]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 8 Nov 2025 05:29:47 +0000 (14:29 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 8 Nov 2025 05:29:47 +0000 (14:29 +0900)
added patches:
media-uvcvideo-use-heuristic-to-find-stream-entity.patch
net-libwx-fix-device-bus-lan-id.patch
revert-wifi-ath10k-avoid-unnecessary-wait-for-service-ready-message.patch

queue-6.6/media-uvcvideo-use-heuristic-to-find-stream-entity.patch [new file with mode: 0644]
queue-6.6/net-libwx-fix-device-bus-lan-id.patch [new file with mode: 0644]
queue-6.6/revert-wifi-ath10k-avoid-unnecessary-wait-for-service-ready-message.patch [new file with mode: 0644]
queue-6.6/series

diff --git a/queue-6.6/media-uvcvideo-use-heuristic-to-find-stream-entity.patch b/queue-6.6/media-uvcvideo-use-heuristic-to-find-stream-entity.patch
new file mode 100644 (file)
index 0000000..b13a3cc
--- /dev/null
@@ -0,0 +1,60 @@
+From 758dbc756aad429da11c569c0d067f7fd032bcf7 Mon Sep 17 00:00:00 2001
+From: Ricardo Ribalda <ribalda@chromium.org>
+Date: Tue, 21 Oct 2025 10:36:17 +0000
+Subject: media: uvcvideo: Use heuristic to find stream entity
+
+From: Ricardo Ribalda <ribalda@chromium.org>
+
+commit 758dbc756aad429da11c569c0d067f7fd032bcf7 upstream.
+
+Some devices, like the Grandstream GUV3100 webcam, have an invalid UVC
+descriptor where multiple entities share the same ID, this is invalid
+and makes it impossible to make a proper entity tree without heuristics.
+
+We have recently introduced a change in the way that we handle invalid
+entities that has caused a regression on broken devices.
+
+Implement a new heuristic to handle these devices properly.
+
+Reported-by: Angel4005 <ooara1337@gmail.com>
+Closes: https://lore.kernel.org/linux-media/CAOzBiVuS7ygUjjhCbyWg-KiNx+HFTYnqH5+GJhd6cYsNLT=DaA@mail.gmail.com/
+Fixes: 0e2ee70291e6 ("media: uvcvideo: Mark invalid entities with id UVC_INVALID_ENTITY_ID")
+Cc: stable@vger.kernel.org
+Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
+Reviewed-by: Hans de Goede <hansg@kernel.org>
+Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/media/usb/uvc/uvc_driver.c |   15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+--- a/drivers/media/usb/uvc/uvc_driver.c
++++ b/drivers/media/usb/uvc/uvc_driver.c
+@@ -165,13 +165,26 @@ static struct uvc_entity *uvc_entity_by_
+ static struct uvc_streaming *uvc_stream_by_id(struct uvc_device *dev, int id)
+ {
+-      struct uvc_streaming *stream;
++      struct uvc_streaming *stream, *last_stream;
++      unsigned int count = 0;
+       list_for_each_entry(stream, &dev->streams, list) {
++              count += 1;
++              last_stream = stream;
+               if (stream->header.bTerminalLink == id)
+                       return stream;
+       }
++      /*
++       * If the streaming entity is referenced by an invalid ID, notify the
++       * user and use heuristics to guess the correct entity.
++       */
++      if (count == 1 && id == UVC_INVALID_ENTITY_ID) {
++              dev_warn(&dev->intf->dev,
++                       "UVC non compliance: Invalid USB header. The streaming entity has an invalid ID, guessing the correct one.");
++              return last_stream;
++      }
++
+       return NULL;
+ }
diff --git a/queue-6.6/net-libwx-fix-device-bus-lan-id.patch b/queue-6.6/net-libwx-fix-device-bus-lan-id.patch
new file mode 100644 (file)
index 0000000..175baec
--- /dev/null
@@ -0,0 +1,60 @@
+From a04ea57aae375bdda1cb57034d8bcbb351e1f973 Mon Sep 17 00:00:00 2001
+From: Jiawen Wu <jiawenwu@trustnetic.com>
+Date: Tue, 4 Nov 2025 14:23:21 +0800
+Subject: net: libwx: fix device bus LAN ID
+
+From: Jiawen Wu <jiawenwu@trustnetic.com>
+
+commit a04ea57aae375bdda1cb57034d8bcbb351e1f973 upstream.
+
+The device bus LAN ID was obtained from PCI_FUNC(), but when a PF
+port is passthrough to a virtual machine, the function number may not
+match the actual port index on the device. This could cause the driver
+to perform operations such as LAN reset on the wrong port.
+
+Fix this by reading the LAN ID from port status register.
+
+Fixes: a34b3e6ed8fb ("net: txgbe: Store PCI info")
+Cc: stable@vger.kernel.org
+Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Link: https://patch.msgid.link/B60A670C1F52CB8E+20251104062321.40059-1-jiawenwu@trustnetic.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/wangxun/libwx/wx_hw.c   |    3 ++-
+ drivers/net/ethernet/wangxun/libwx/wx_type.h |    4 ++--
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/wangxun/libwx/wx_hw.c
++++ b/drivers/net/ethernet/wangxun/libwx/wx_hw.c
+@@ -1667,7 +1667,8 @@ int wx_sw_init(struct wx *wx)
+       wx->oem_svid = pdev->subsystem_vendor;
+       wx->oem_ssid = pdev->subsystem_device;
+       wx->bus.device = PCI_SLOT(pdev->devfn);
+-      wx->bus.func = PCI_FUNC(pdev->devfn);
++      wx->bus.func = FIELD_GET(WX_CFG_PORT_ST_LANID,
++                               rd32(wx, WX_CFG_PORT_ST));
+       if (wx->oem_svid == PCI_VENDOR_ID_WANGXUN) {
+               wx->subsystem_vendor_id = pdev->subsystem_vendor;
+--- a/drivers/net/ethernet/wangxun/libwx/wx_type.h
++++ b/drivers/net/ethernet/wangxun/libwx/wx_type.h
+@@ -65,6 +65,8 @@
+ #define WX_CFG_PORT_CTL_DRV_LOAD     BIT(3)
+ #define WX_CFG_PORT_CTL_QINQ         BIT(2)
+ #define WX_CFG_PORT_CTL_D_VLAN       BIT(0) /* double vlan*/
++#define WX_CFG_PORT_ST               0x14404
++#define WX_CFG_PORT_ST_LANID         GENMASK(9, 8)
+ #define WX_CFG_TAG_TPID(_i)          (0x14430 + ((_i) * 4))
+ #define WX_CFG_PORT_CTL_NUM_VT_MASK  GENMASK(13, 12) /* number of TVs */
+@@ -363,8 +365,6 @@ enum WX_MSCA_CMD_value {
+ #define TXD_USE_COUNT(S)     DIV_ROUND_UP((S), WX_MAX_DATA_PER_TXD)
+ #define DESC_NEEDED          (MAX_SKB_FRAGS + 4)
+-#define WX_CFG_PORT_ST               0x14404
+-
+ /******************* Receive Descriptor bit definitions **********************/
+ #define WX_RXD_STAT_DD               BIT(0) /* Done */
+ #define WX_RXD_STAT_EOP              BIT(1) /* End of Packet */
diff --git a/queue-6.6/revert-wifi-ath10k-avoid-unnecessary-wait-for-service-ready-message.patch b/queue-6.6/revert-wifi-ath10k-avoid-unnecessary-wait-for-service-ready-message.patch
new file mode 100644 (file)
index 0000000..fed462c
--- /dev/null
@@ -0,0 +1,85 @@
+From 2469bb6a6af944755a7d7daf66be90f3b8decbf9 Mon Sep 17 00:00:00 2001
+From: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
+Date: Mon, 27 Oct 2025 09:49:12 +0800
+Subject: Revert "wifi: ath10k: avoid unnecessary wait for service ready message"
+
+From: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
+
+commit 2469bb6a6af944755a7d7daf66be90f3b8decbf9 upstream.
+
+This reverts commit 51a73f1b2e56b0324b4a3bb8cebc4221b5be4c7a.
+
+Although this commit benefits QCA6174, it breaks QCA988x and
+QCA9984 [1][2]. Since it is not likely to root cause/fix this
+issue in a short time, revert it to get those chips back.
+
+Compile tested only.
+
+Fixes: 51a73f1b2e56 ("wifi: ath10k: avoid unnecessary wait for service ready message")
+Link: https://lore.kernel.org/ath10k/6d41bc00602c33ffbf68781f563ff2e6c6915a3e.camel@gmail.com # [1]
+Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220671 # [2]
+Signed-off-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
+Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
+Cc: stable@vger.kernel.org
+Link: https://patch.msgid.link/20251027-ath10k-revert-polling-first-change-v1-1-89aaf3bcbfa1@oss.qualcomm.com
+Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/wireless/ath/ath10k/wmi.c |   39 +++++++++++++++++-----------------
+ 1 file changed, 20 insertions(+), 19 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath10k/wmi.c
++++ b/drivers/net/wireless/ath/ath10k/wmi.c
+@@ -1763,32 +1763,33 @@ void ath10k_wmi_put_wmi_channel(struct a
+ int ath10k_wmi_wait_for_service_ready(struct ath10k *ar)
+ {
+-      unsigned long timeout = jiffies + WMI_SERVICE_READY_TIMEOUT_HZ;
+       unsigned long time_left, i;
+-      /* Sometimes the PCI HIF doesn't receive interrupt
+-       * for the service ready message even if the buffer
+-       * was completed. PCIe sniffer shows that it's
+-       * because the corresponding CE ring doesn't fires
+-       * it. Workaround here by polling CE rings. Since
+-       * the message could arrive at any time, continue
+-       * polling until timeout.
+-       */
+-      do {
++      time_left = wait_for_completion_timeout(&ar->wmi.service_ready,
++                                              WMI_SERVICE_READY_TIMEOUT_HZ);
++      if (!time_left) {
++              /* Sometimes the PCI HIF doesn't receive interrupt
++               * for the service ready message even if the buffer
++               * was completed. PCIe sniffer shows that it's
++               * because the corresponding CE ring doesn't fires
++               * it. Workaround here by polling CE rings once.
++               */
++              ath10k_warn(ar, "failed to receive service ready completion, polling..\n");
++
+               for (i = 0; i < CE_COUNT; i++)
+                       ath10k_hif_send_complete_check(ar, i, 1);
+-              /* The 100 ms granularity is a tradeoff considering scheduler
+-               * overhead and response latency
+-               */
+               time_left = wait_for_completion_timeout(&ar->wmi.service_ready,
+-                                                      msecs_to_jiffies(100));
+-              if (time_left)
+-                      return 0;
+-      } while (time_before(jiffies, timeout));
++                                                      WMI_SERVICE_READY_TIMEOUT_HZ);
++              if (!time_left) {
++                      ath10k_warn(ar, "polling timed out\n");
++                      return -ETIMEDOUT;
++              }
++
++              ath10k_warn(ar, "service ready completion received, continuing normally\n");
++      }
+-      ath10k_warn(ar, "failed to receive service ready completion\n");
+-      return -ETIMEDOUT;
++      return 0;
+ }
+ int ath10k_wmi_wait_for_unified_ready(struct ath10k *ar)
index 766b9b64a7b417f8690beae3bfca4a55b5713e7c..d286a873f55c06eec7db9b1e6a911937fec467ce 100644 (file)
@@ -327,3 +327,6 @@ asoc-meson-aiu-encoder-i2s-fix-bit-clock-polarity.patch
 ceph-add-checking-of-wait_for_completion_killable-re.patch
 ceph-refactor-wake_up_bit-pattern-of-calling.patch
 alsa-hda-realtek-audio-disappears-on-hp-15-fc000-aft.patch
+media-uvcvideo-use-heuristic-to-find-stream-entity.patch
+revert-wifi-ath10k-avoid-unnecessary-wait-for-service-ready-message.patch
+net-libwx-fix-device-bus-lan-id.patch