]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
media: rtl2832_sdr: assign vb2 lock before vb2_queue_init
authorHans Verkuil <hverkuil@xs4all.nl>
Mon, 24 Feb 2025 14:40:58 +0000 (15:40 +0100)
committerHans Verkuil <hverkuil@xs4all.nl>
Wed, 12 Mar 2025 15:43:51 +0000 (16:43 +0100)
Commit c780d01cf1a6 ("media: vb2: vb2_core_queue_init(): sanity check lock
and wait_prepare/finish") added a sanity check to ensure that if there are
no wait_prepare/finish callbacks set by the driver, then the vb2_queue lock
must be set, since otherwise the vb2 core cannot do correct locking.

The rtl2832_sdr.c triggered this warning: it turns out that while the
driver does set this lock, it sets it too late. So move it up to before
the vb2_queue_init() call.

Reported-by: Arthur Marsh <arthur.marsh@internode.on.net>
Closes: https://lore.kernel.org/linux-media/20241211042355.8479-1-user@am64/
Fixes: 8fcd2795d22a ("media: rtl2832_sdr: drop vb2_ops_wait_prepare/finish")
Cc: stable@vger.kernel.org
Reviewed-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/dvb-frontends/rtl2832_sdr.c

index 05254d8717db85a66b098fa66ce7388e9589d3c3..0357624968f1b542772d8cc751211c0bf28e19ab 100644 (file)
@@ -1363,6 +1363,7 @@ static int rtl2832_sdr_probe(struct platform_device *pdev)
        dev->vb_queue.ops = &rtl2832_sdr_vb2_ops;
        dev->vb_queue.mem_ops = &vb2_vmalloc_memops;
        dev->vb_queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
+       dev->vb_queue.lock = &dev->vb_queue_lock;
        ret = vb2_queue_init(&dev->vb_queue);
        if (ret) {
                dev_err(&pdev->dev, "Could not initialize vb2 queue\n");
@@ -1421,7 +1422,6 @@ static int rtl2832_sdr_probe(struct platform_device *pdev)
        /* Init video_device structure */
        dev->vdev = rtl2832_sdr_template;
        dev->vdev.queue = &dev->vb_queue;
-       dev->vdev.queue->lock = &dev->vb_queue_lock;
        video_set_drvdata(&dev->vdev, dev);
 
        /* Register the v4l2_device structure */