This patch has already been merged in stable https://web.git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/drivers/media/usb/uvc?h=linux-6.6.y&id=08384382e1dbd1e2cbbaddc704d3ce98f46b87e4 On Mon, 10 Feb 2025 at 16:12, <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > > The patch below does not apply to the 6.6-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. > > To reproduce the conflict and resubmit, you may use the following commands: > > git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y > git checkout FETCH_HEAD > git cherry-pick -x d9fecd096f67a4469536e040a8a10bbfb665918b > # <resolve conflicts, build, test, etc.> > git commit -s > git send-email --to '<stable@xxxxxxxxxxxxxxx>' --in-reply-to '2025021006-sharpie-patchwork-f168@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^.. > > Possible dependencies: > > > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > From d9fecd096f67a4469536e040a8a10bbfb665918b Mon Sep 17 00:00:00 2001 > From: Ricardo Ribalda <ribalda@xxxxxxxxxxxx> > Date: Tue, 3 Dec 2024 21:20:08 +0000 > Subject: [PATCH] media: uvcvideo: Only save async fh if success > > Now we keep a reference to the active fh for any call to uvc_ctrl_set, > regardless if it is an actual set or if it is a just a try or if the > device refused the operation. > > We should only keep the file handle if the device actually accepted > applying the operation. > > Cc: stable@xxxxxxxxxxxxxxx > Fixes: e5225c820c05 ("media: uvcvideo: Send a control event when a Control Change interrupt arrives") > Suggested-by: Hans de Goede <hdegoede@xxxxxxxxxx> > Reviewed-by: Hans de Goede <hdegoede@xxxxxxxxxx> > Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > Signed-off-by: Ricardo Ribalda <ribalda@xxxxxxxxxxxx> > Link: https://lore.kernel.org/r/20241203-uvc-fix-async-v6-1-26c867231118@xxxxxxxxxxxx > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > index bab9fdac98e6..e0806641a8d0 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -1811,7 +1811,10 @@ int uvc_ctrl_begin(struct uvc_video_chain *chain) > } > > static int uvc_ctrl_commit_entity(struct uvc_device *dev, > - struct uvc_entity *entity, int rollback, struct uvc_control **err_ctrl) > + struct uvc_fh *handle, > + struct uvc_entity *entity, > + int rollback, > + struct uvc_control **err_ctrl) > { > struct uvc_control *ctrl; > unsigned int i; > @@ -1859,6 +1862,10 @@ static int uvc_ctrl_commit_entity(struct uvc_device *dev, > *err_ctrl = ctrl; > return ret; > } > + > + if (!rollback && handle && > + ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) > + ctrl->handle = handle; > } > > return 0; > @@ -1895,8 +1902,8 @@ int __uvc_ctrl_commit(struct uvc_fh *handle, int rollback, > > /* Find the control. */ > list_for_each_entry(entity, &chain->entities, chain) { > - ret = uvc_ctrl_commit_entity(chain->dev, entity, rollback, > - &err_ctrl); > + ret = uvc_ctrl_commit_entity(chain->dev, handle, entity, > + rollback, &err_ctrl); > if (ret < 0) { > if (ctrls) > ctrls->error_idx = > @@ -2046,9 +2053,6 @@ int uvc_ctrl_set(struct uvc_fh *handle, > mapping->set(mapping, value, > uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); > > - if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) > - ctrl->handle = handle; > - > ctrl->dirty = 1; > ctrl->modified = 1; > return 0; > @@ -2377,7 +2381,7 @@ int uvc_ctrl_restore_values(struct uvc_device *dev) > ctrl->dirty = 1; > } > > - ret = uvc_ctrl_commit_entity(dev, entity, 0, NULL); > + ret = uvc_ctrl_commit_entity(dev, NULL, entity, 0, NULL); > if (ret < 0) > return ret; > } > -- Ricardo Ribalda