Skip to content

Commit 8fc6f3a

Browse files
committed
media: uvcvideo: Allow changing noparam on the fly
jira LE-3622 Rebuild_History Non-Buildable kernel-6.12.0-55.22.1.el10_0 commit-author Ricardo Ribalda <ribalda@chromium.org> commit 8869eb6 Right now the parameter value is read during video_registration and cannot be changed afterwards, despite its permissions 0644, that makes the user believe that the value can be written. The parameter only affects the behaviour of uvc_queue_buffer_complete(), with only one check per buffer. We can read the value directly from uvc_queue_buffer_complete() and therefore allowing changing it with sysfs on the fly. Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Link: https://lore.kernel.org/r/20241218-uvc-deprecate-v2-3-ab814139e983@chromium.org Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> (cherry picked from commit 8869eb6) Signed-off-by: Jonathan Maple <jmaple@ciq.com>
1 parent 34a31a8 commit 8fc6f3a

File tree

3 files changed

+4
-8
lines changed

3 files changed

+4
-8
lines changed

drivers/media/usb/uvc/uvc_driver.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1949,7 +1949,7 @@ int uvc_register_video_device(struct uvc_device *dev,
19491949
int ret;
19501950

19511951
/* Initialize the video buffers queue. */
1952-
ret = uvc_queue_init(queue, type, !uvc_no_drop_param);
1952+
ret = uvc_queue_init(queue, type);
19531953
if (ret)
19541954
return ret;
19551955

drivers/media/usb/uvc/uvc_queue.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,7 @@ static const struct vb2_ops uvc_meta_queue_qops = {
212212
.stop_streaming = uvc_stop_streaming,
213213
};
214214

215-
int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type,
216-
int drop_corrupted)
215+
int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type)
217216
{
218217
int ret;
219218

@@ -243,7 +242,6 @@ int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type,
243242
mutex_init(&queue->mutex);
244243
spin_lock_init(&queue->irqlock);
245244
INIT_LIST_HEAD(&queue->irqqueue);
246-
queue->flags = drop_corrupted ? UVC_QUEUE_DROP_CORRUPTED : 0;
247245

248246
return 0;
249247
}
@@ -476,7 +474,7 @@ static void uvc_queue_buffer_complete(struct kref *ref)
476474
struct vb2_buffer *vb = &buf->buf.vb2_buf;
477475
struct uvc_video_queue *queue = vb2_get_drv_priv(vb->vb2_queue);
478476

479-
if ((queue->flags & UVC_QUEUE_DROP_CORRUPTED) && buf->error) {
477+
if (buf->error && !uvc_no_drop_param) {
480478
uvc_queue_buffer_requeue(queue, buf);
481479
return;
482480
}

drivers/media/usb/uvc/uvcvideo.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,6 @@ struct uvc_buffer {
316316
};
317317

318318
#define UVC_QUEUE_DISCONNECTED (1 << 0)
319-
#define UVC_QUEUE_DROP_CORRUPTED (1 << 1)
320319

321320
struct uvc_video_queue {
322321
struct vb2_queue queue;
@@ -679,8 +678,7 @@ extern struct uvc_driver uvc_driver;
679678
struct uvc_entity *uvc_entity_by_id(struct uvc_device *dev, int id);
680679

681680
/* Video buffers queue management. */
682-
int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type,
683-
int drop_corrupted);
681+
int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type);
684682
void uvc_queue_release(struct uvc_video_queue *queue);
685683
int uvc_request_buffers(struct uvc_video_queue *queue,
686684
struct v4l2_requestbuffers *rb);

0 commit comments

Comments
 (0)