From: Greg Kroah-Hartman Date: Sat, 8 Nov 2025 05:29:47 +0000 (+0900) Subject: 6.6-stable patches X-Git-Tag: v6.12.58~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=56e570c172dc9c9fcf3a8ef5705c56fbeb619b43;p=thirdparty%2Fkernel%2Fstable-queue.git 6.6-stable patches 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 --- 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 index 0000000000..b13a3cc02e --- /dev/null +++ b/queue-6.6/media-uvcvideo-use-heuristic-to-find-stream-entity.patch @@ -0,0 +1,60 @@ +From 758dbc756aad429da11c569c0d067f7fd032bcf7 Mon Sep 17 00:00:00 2001 +From: Ricardo Ribalda +Date: Tue, 21 Oct 2025 10:36:17 +0000 +Subject: media: uvcvideo: Use heuristic to find stream entity + +From: Ricardo Ribalda + +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 +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 +Reviewed-by: Hans de Goede +Signed-off-by: Hans Verkuil +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 0000000000..175baecc9a --- /dev/null +++ b/queue-6.6/net-libwx-fix-device-bus-lan-id.patch @@ -0,0 +1,60 @@ +From a04ea57aae375bdda1cb57034d8bcbb351e1f973 Mon Sep 17 00:00:00 2001 +From: Jiawen Wu +Date: Tue, 4 Nov 2025 14:23:21 +0800 +Subject: net: libwx: fix device bus LAN ID + +From: Jiawen Wu + +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 +Reviewed-by: Simon Horman +Link: https://patch.msgid.link/B60A670C1F52CB8E+20251104062321.40059-1-jiawenwu@trustnetic.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 0000000000..fed462c39a --- /dev/null +++ b/queue-6.6/revert-wifi-ath10k-avoid-unnecessary-wait-for-service-ready-message.patch @@ -0,0 +1,85 @@ +From 2469bb6a6af944755a7d7daf66be90f3b8decbf9 Mon Sep 17 00:00:00 2001 +From: Baochen Qiang +Date: Mon, 27 Oct 2025 09:49:12 +0800 +Subject: Revert "wifi: ath10k: avoid unnecessary wait for service ready message" + +From: Baochen Qiang + +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 +Reviewed-by: Vasanthakumar Thiagarajan +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 +Signed-off-by: Greg Kroah-Hartman +--- + 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) diff --git a/queue-6.6/series b/queue-6.6/series index 766b9b64a7..d286a873f5 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -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