Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3673243ybz; Mon, 4 May 2020 07:36:23 -0700 (PDT) X-Google-Smtp-Source: APiQypJx6Bl2lAB4zL6HaY5mnfmMqmMFRlvLXyoQ/S4Oz07qAwEUWhkjNf9tdKldfdEiQ9JNKLmb X-Received: by 2002:aa7:d78a:: with SMTP id s10mr15434515edq.319.1588602983076; Mon, 04 May 2020 07:36:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588602983; cv=none; d=google.com; s=arc-20160816; b=q1KNO2BXcY5sJl8cHD37ypJabaji/Ou1zetPZaJFn7sLrcVXusgefhh09BD5YoudYu W0SSBOM/9juYoS92G0bsZhHb3lT/shuJ+BUULbEI3/+76D+tl6vfyYVM6j/0lVMl1xoP /LRzSvuwrKddOEqGIQbIQiHQKvPROCRYNjd6ZY4TffoYPmxLAu+s68ak7xasObB8gmLV PFXk1J7iGyqtc0rf9YjSu6EyJxgjZmbPNT5P7aESHOoTIOqICcfvppR4VylHzij1w1/V NjbaPUnDUlatmtCSI42l3F6uYiQ16TCQQzu6BenI6/KfMmiby7u3Mx/zq3J0HyqqSFpz zghw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dmarc-filter:dkim-signature; bh=4OlRcGETyCmH3CyivLm0F5Fs+YC/4OSoLg+kCNZVH5w=; b=DHpqZ3ulFxJRXILz3AVlZSwohLur1o5mba29HpwiKEc6Joqd1LT7G1vZ50ozxd/xg2 NmpPexHGBP2w8WVhEV5InMnfNku9aFSOWNQOngRMxCbpcDi+qkbGU6d/UIyZeJPtQhOi cbE7ztdmTTWoNt5WpsVDFxrcEn93RZwIGUd4TA9REl1JwvrvtpItDqQv48zOoJyQfPC4 4hulW3/MxE41XujWRmCVvN4tifzdDPb7i6O6hcpDjDQNFksBlbyiqVc2C9mSwynLfq5Y iKgQQGnwSYebuJxmT5QL1/GDy9OCRpgmcWyq5QSelPYVWjHy8ClXPw0k30J2cJ27yVZX 1HtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=ZJnRRv8G; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q18si6625236eju.4.2020.05.04.07.35.47; Mon, 04 May 2020 07:36:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=ZJnRRv8G; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729102AbgEDOfK (ORCPT + 99 others); Mon, 4 May 2020 10:35:10 -0400 Received: from mail27.static.mailgun.info ([104.130.122.27]:22590 "EHLO mail27.static.mailgun.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729091AbgEDOfK (ORCPT ); Mon, 4 May 2020 10:35:10 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1588602909; h=Message-Id: Date: Subject: Cc: To: From: Sender; bh=4OlRcGETyCmH3CyivLm0F5Fs+YC/4OSoLg+kCNZVH5w=; b=ZJnRRv8GK/1jokhaK0dSaFgP3VLGIRtn+65k7A/BQaAcDzY+nyAVVkURc6Jxps/apSSa/loY ierEzzxBEgq1rCSw+986Dhz5gDpegbVcRrx4awUaZvIg2fACxD/HDd/q79r+0/HsJxFKb1dz N4he03rVszM1sjrRmyXrYar3PSo= X-Mailgun-Sending-Ip: 104.130.122.27 X-Mailgun-Sid: WyI3YTAwOSIsICJsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmciLCAiYmU5ZTRhIl0= Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by mxa.mailgun.org with ESMTP id 5eb02805.7f88f8fa1180-smtp-out-n01; Mon, 04 May 2020 14:34:45 -0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 1001) id C6FEDC433F2; Mon, 4 May 2020 14:34:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.0 tests=ALL_TRUSTED,SPF_NONE autolearn=ham autolearn_force=no version=3.4.0 Received: from pillair-linux.qualcomm.com (blr-c-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: pillair) by smtp.codeaurora.org (Postfix) with ESMTPSA id CA1A7C433D2; Mon, 4 May 2020 14:34:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org CA1A7C433D2 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=pillair@codeaurora.org From: Rakesh Pillai To: ath10k@lists.infradead.org Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, Rakesh Pillai Subject: [PATCH] ath10k: Remove msdu from idr when management pkt send fails Date: Mon, 4 May 2020 20:04:39 +0530 Message-Id: <1588602879-14098-1-git-send-email-pillair@codeaurora.org> X-Mailer: git-send-email 2.7.4 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Currently when the sending of any management pkt via wmi command fails, the packet is being unmapped freed in the error handling. But the idr entry added, which is used to track these packet is not getting removed. Hence, during unload, in wmi cleanup, all the entries in IDR are removed and the corresponding buffer is attempted to be freed. This can cause a situation where one packet is attempted to be freed twice. Fix this error by rmeoving the msdu from the idr list when the sending of a management packet over wmi fails. Tested HW: WCN3990 Tested FW: WLAN.HL.3.1-01040-QCAHLSWMTPLZ-1 Fixes: 1807da49733e ("ath10k: wmi: add management tx by reference support over wmi") Signed-off-by: Rakesh Pillai --- drivers/net/wireless/ath/ath10k/wmi-ops.h | 7 ++++++- drivers/net/wireless/ath/ath10k/wmi-tlv.c | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath10k/wmi-ops.h b/drivers/net/wireless/ath/ath10k/wmi-ops.h index 1491c25..de15e62 100644 --- a/drivers/net/wireless/ath/ath10k/wmi-ops.h +++ b/drivers/net/wireless/ath/ath10k/wmi-ops.h @@ -216,6 +216,7 @@ struct wmi_ops { struct sk_buff *(*gen_bb_timing) (struct ath10k *ar, const struct wmi_bb_timing_cfg_arg *arg); + int (*cleanup_mgmt_tx_send)(struct ath10k *ar, struct sk_buff *msdu); }; @@ -457,8 +458,12 @@ ath10k_wmi_mgmt_tx_send(struct ath10k *ar, struct sk_buff *msdu, ret = ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->mgmt_tx_send_cmdid); - if (ret) + if (ret) { + /* remove this msdu from idr tracking */ + if (ar->wmi.ops->cleanup_mgmt_tx_send) + ar->wmi.ops->cleanup_mgmt_tx_send(ar, msdu); return ret; + } return 0; } diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c index e1ab900f..b2a4a44 100644 --- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c +++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c @@ -2898,6 +2898,18 @@ ath10k_wmi_tlv_op_gen_request_stats(struct ath10k *ar, u32 stats_mask) } static int +ath10k_wmi_tlv_op_cleanup_mgmt_tx_send(struct ath10k *ar, + struct sk_buff *msdu) +{ + struct ath10k_skb_cb *cb = ATH10K_SKB_CB(msdu); + struct ath10k_wmi *wmi = &ar->wmi; + + idr_remove(&wmi->mgmt_pending_tx, cb->msdu_id); + + return 0; +} + +static int ath10k_wmi_mgmt_tx_alloc_msdu_id(struct ath10k *ar, struct sk_buff *skb, dma_addr_t paddr) { @@ -2971,6 +2983,8 @@ ath10k_wmi_tlv_op_gen_mgmt_tx_send(struct ath10k *ar, struct sk_buff *msdu, if (desc_id < 0) goto err_free_skb; + cb->msdu_id = desc_id; + ptr = (void *)skb->data; tlv = ptr; tlv->tag = __cpu_to_le16(WMI_TLV_TAG_STRUCT_MGMT_TX_CMD); @@ -4447,6 +4461,7 @@ static const struct wmi_ops wmi_tlv_ops = { .gen_echo = ath10k_wmi_tlv_op_gen_echo, .gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf, .gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable, + .cleanup_mgmt_tx_send = ath10k_wmi_tlv_op_cleanup_mgmt_tx_send, }; static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = { -- 2.7.4