Re: [PATCH] media: uvcvideo: Fix custom control mapping probing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Ricardo,


Thank you very much for your patch.

Am 22.07.24 um 09:59 schrieb Ricardo Ribalda:
Custom control mapping introduced a bug, where the filter function was
applied to every single control.

I’d paste the error messages, so the commit can be easily found.

Fix it so it is only applied to the matching controls.

Reported-by: Paul Menzen <pmenzel@xxxxxxxxxxxxx>
Closes: https://lore.kernel.org/linux-media/518cd6b4-68a8-4895-b8fc-97d4dae1ddc4@xxxxxxxxxxxxx/T/#t
Cc: stable@xxxxxxxxxxxxxxx
Fixes: 8f4362a8d42b ("media: uvcvideo: Allow custom control mapping")
Signed-off-by: Ricardo Ribalda <ribalda@xxxxxxxxxxxx>
---
Paul, could you check if this fixes your issue, thanks!

$ b4 shazam https://lore.kernel.org/linux-media/20240722-fix-filter-mapping-v1-1-07cc9c6bf4e3@xxxxxxxxxxxx/T/#u
    $ git log --oneline -2
1391c45f04fb (HEAD -> master) media: uvcvideo: Fix custom control mapping probing 933069701c1b (origin/master, origin/HEAD) Merge tag '6.11-rc-smb3-server-fixes' of git://git.samba.org/ksmbd

Yes, it does fix it on the Dell XPS 13 9360:

    $ sudo dmesg --level alert,crit,err,warn
    [    0.293264] hpet_acpi_add: no address or irqs in _CRS
    [    0.340614] i8042: Warning: Keylock active
    [    0.352146] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[ 1.680610] device-mapper: core: CONFIG_IMA_DISABLE_HTABLE is disabled. Duplicate IMA measurements will not be recorded in the IMA log. [ 9.012306] wmi_bus wmi_bus-PNP0C14:01: [Firmware Bug]: WQBC data block query control method not found [ 9.955744] Bluetooth: hci0: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.

---
  drivers/media/usb/uvc/uvc_ctrl.c | 8 +++++---
  1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 0136df5732ba..06fede57bf36 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -2680,6 +2680,10 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
  	for (i = 0; i < ARRAY_SIZE(uvc_ctrl_mappings); ++i) {
  		const struct uvc_control_mapping *mapping = &uvc_ctrl_mappings[i];
+ if (!(uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
+		    ctrl->info.selector == mapping->selector))
+			continue;
+
  		/* Let the device provide a custom mapping. */
  		if (mapping->filter_mapping) {
  			mapping = mapping->filter_mapping(chain, ctrl);
@@ -2687,9 +2691,7 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
  				continue;
  		}
- if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
-		    ctrl->info.selector == mapping->selector)
-			__uvc_ctrl_add_mapping(chain, ctrl, mapping);
+		__uvc_ctrl_add_mapping(chain, ctrl, mapping);
  	}
  }

So the check was just too late. Thank you for fixing it.

Tested-by: Paul Menzel <pmenzel@xxxxxxxxxxxxx>


Kind regards,

Paul




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux