From 83c57729821fb898d58d11524169815917f1792e Mon Sep 17 00:00:00 2001 From: Oliver Neukum Date: Apr 17 2023 11:12:45 +0000 Subject: ath10k: Fix the parsing error in service available event (git-fixes). --- diff --git a/patches.suse/ath10k-Fix-the-parsing-error-in-service-available-ev.patch b/patches.suse/ath10k-Fix-the-parsing-error-in-service-available-ev.patch new file mode 100644 index 0000000..01bf380 --- /dev/null +++ b/patches.suse/ath10k-Fix-the-parsing-error-in-service-available-ev.patch @@ -0,0 +1,91 @@ +From c7cee9c0f499f27ec6de06bea664b61320534768 Mon Sep 17 00:00:00 2001 +From: Rakesh Pillai +Date: Tue, 24 Nov 2020 17:59:17 +0200 +Subject: [PATCH] ath10k: Fix the parsing error in service available event +Git-commit: c7cee9c0f499f27ec6de06bea664b61320534768 +References: git-fixes +Patch-mainline: v5.11-rc1 + +The wmi service available event has been +extended to contain extra 128 bit for new services +to be indicated by firmware. + +Currently the presence of any optional TLVs in +the wmi service available event leads to a parsing +error with the below error message: +ath10k_snoc 18800000.wifi: failed to parse svc_avail tlv: -71 + +The wmi service available event parsing should +not return error for the newly added optional TLV. +Fix this parsing for service available event message. + +Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.2.2-00720-QCAHLSWMTPL-1 + +Fixes: cea19a6ce8bf ("ath10k: add WMI_SERVICE_AVAILABLE_EVENT support") +Signed-off-by: Rakesh Pillai +Reviewed-by: Douglas Anderson +Signed-off-by: Kalle Valo +Link: https://lore.kernel.org/r/1605501291-23040-1-git-send-email-pillair@codeaurora.org +Signed-off-by: Oliver Neukum +--- + drivers/net/wireless/ath/ath10k/wmi-tlv.c | 4 +++- + drivers/net/wireless/ath/ath10k/wmi.c | 9 +++++++-- + drivers/net/wireless/ath/ath10k/wmi.h | 1 + + 3 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c +index 932266d1111b..7b5834157fe5 100644 +--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c ++++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c +@@ -1401,13 +1401,15 @@ static int ath10k_wmi_tlv_svc_avail_parse(struct ath10k *ar, u16 tag, u16 len, + + switch (tag) { + case WMI_TLV_TAG_STRUCT_SERVICE_AVAILABLE_EVENT: ++ arg->service_map_ext_valid = true; + arg->service_map_ext_len = *(__le32 *)ptr; + arg->service_map_ext = ptr + sizeof(__le32); + return 0; + default: + break; + } +- return -EPROTO; ++ ++ return 0; + } + + static int ath10k_wmi_tlv_op_pull_svc_avail(struct ath10k *ar, +diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c +index c521f0b27831..c491acebdb46 100644 +--- a/drivers/net/wireless/ath/ath10k/wmi.c ++++ b/drivers/net/wireless/ath/ath10k/wmi.c +@@ -5751,8 +5751,13 @@ void ath10k_wmi_event_service_available(struct ath10k *ar, struct sk_buff *skb) + ret); + } + +- ath10k_wmi_map_svc_ext(ar, arg.service_map_ext, ar->wmi.svc_map, +- __le32_to_cpu(arg.service_map_ext_len)); ++ /* ++ * Initialization of "arg.service_map_ext_valid" to ZERO is necessary ++ * for the below logic to work. ++ */ ++ if (arg.service_map_ext_valid) ++ ath10k_wmi_map_svc_ext(ar, arg.service_map_ext, ar->wmi.svc_map, ++ __le32_to_cpu(arg.service_map_ext_len)); + } + + static int ath10k_wmi_event_temperature(struct ath10k *ar, struct sk_buff *skb) +diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h +index c32aabea8293..d870f7067cb7 100644 +--- a/drivers/net/wireless/ath/ath10k/wmi.h ++++ b/drivers/net/wireless/ath/ath10k/wmi.h +@@ -6919,6 +6919,7 @@ struct wmi_svc_rdy_ev_arg { + }; + + struct wmi_svc_avail_ev_arg { ++ bool service_map_ext_valid; + __le32 service_map_ext_len; + const __le32 *service_map_ext; + }; +-- +2.40.0 + diff --git a/series.conf b/series.conf index e7ffd3a..24d3091 100644 --- a/series.conf +++ b/series.conf @@ -59070,6 +59070,7 @@ patches.suse/orinoco-Move-context-allocation-after-processing-the.patch patches.suse/cw1200-fix-missing-destroy_workqueue-on-error-in-cw1.patch patches.suse/ath6kl-fix-enum-conversion-warning.patch + patches.suse/ath10k-Fix-the-parsing-error-in-service-available-ev.patch patches.suse/ath10k-Fix-an-error-handling-path.patch patches.suse/ath10k-Release-some-resources-in-an-error-handling-p.patch patches.suse/ibmvnic-add-some-debugs.patch