lkml.org 
[lkml]   [2022]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 178/545] media: tw686x: Register the irq at the end of probe
    Date
    From: Zheyu Ma <zheyuma97@gmail.com>

    [ Upstream commit fb730334e0f759d00f72168fbc555e5a95e35210 ]

    We got the following warning when booting the kernel:

    [ 3.243674] INFO: trying to register non-static key.
    [ 3.243922] The code is fine but needs lockdep annotation, or maybe
    [ 3.244230] you didn't initialize this object before use?
    [ 3.245642] Call Trace:
    [ 3.247836] lock_acquire+0xff/0x2d0
    [ 3.248727] tw686x_audio_irq+0x1a5/0xcc0 [tw686x]
    [ 3.249211] tw686x_irq+0x1f9/0x480 [tw686x]

    The lock 'vc->qlock' will be initialized in tw686x_video_init(), but the
    driver registers the irq before calling the tw686x_video_init(), and we
    got the warning.

    Fix this by registering the irq at the end of probe

    Fixes: 704a84ccdbf1 ("[media] media: Support Intersil/Techwell TW686x-based video capture cards")
    Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/pci/tw686x/tw686x-core.c | 18 ++++++++----------
    1 file changed, 8 insertions(+), 10 deletions(-)

    diff --git a/drivers/media/pci/tw686x/tw686x-core.c b/drivers/media/pci/tw686x/tw686x-core.c
    index 74ae4f0dcee7..8a25a0dac4ae 100644
    --- a/drivers/media/pci/tw686x/tw686x-core.c
    +++ b/drivers/media/pci/tw686x/tw686x-core.c
    @@ -315,13 +315,6 @@ static int tw686x_probe(struct pci_dev *pci_dev,

    spin_lock_init(&dev->lock);

    - err = request_irq(pci_dev->irq, tw686x_irq, IRQF_SHARED,
    - dev->name, dev);
    - if (err < 0) {
    - dev_err(&pci_dev->dev, "unable to request interrupt\n");
    - goto iounmap;
    - }
    -
    timer_setup(&dev->dma_delay_timer, tw686x_dma_delay, 0);

    /*
    @@ -333,18 +326,23 @@ static int tw686x_probe(struct pci_dev *pci_dev,
    err = tw686x_video_init(dev);
    if (err) {
    dev_err(&pci_dev->dev, "can't register video\n");
    - goto free_irq;
    + goto iounmap;
    }

    err = tw686x_audio_init(dev);
    if (err)
    dev_warn(&pci_dev->dev, "can't register audio\n");

    + err = request_irq(pci_dev->irq, tw686x_irq, IRQF_SHARED,
    + dev->name, dev);
    + if (err < 0) {
    + dev_err(&pci_dev->dev, "unable to request interrupt\n");
    + goto iounmap;
    + }
    +
    pci_set_drvdata(pci_dev, dev);
    return 0;

    -free_irq:
    - free_irq(pci_dev->irq, dev);
    iounmap:
    pci_iounmap(pci_dev, dev->mmio);
    free_region:
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-19 18:08    [W:2.732 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site