From patchwork Fri Jun 28 10:11:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 11021911 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3A6C14BB for ; Fri, 28 Jun 2019 10:11:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E26482878F for ; Fri, 28 Jun 2019 10:11:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D6B4828796; Fri, 28 Jun 2019 10:11:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 582A72878F for ; Fri, 28 Jun 2019 10:11:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=8DhY2/8hSKrp+yiAQsTh/SSkINBXKRd3eS11TTEin6k=; b=ALE0W/z2XBaSB3 WHJ67HfYBT8gYfwJVE4rMDojhxxNsO3NNk9FoJgpvBQYl2IpGG1LhzSSg1OLMeETym7h4Xz2U4IPj FSNtGjCWmtQH1EeqDpk4j1UtbhfuZlUEAQe3I37BDXIIZjJQV+qzn4CuLvlWBpLTn/F5525Wi3Z0s a7i5dHrCFxKceg86fWNQi/tKsTX6tdkeTjO7h0zP4JiuYjIS75sG2zmMx8u6EwY+mwqY4nriGOE8d /8LACdDN0uCdemxFEMGJQBJWoTABDH3bcl4fDAsDtV8baSh42Ykp+geEBpcvM38wGyWHeuXRJKjTR +cHZU0ZlgvN2ZI7BNv7A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hgnr3-0005kq-BK; Fri, 28 Jun 2019 10:11:41 +0000 Received: from nbd.name ([2a01:4f8:221:3d45::2]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hgnqy-0005Yz-UY for ath11k@lists.infradead.org; Fri, 28 Jun 2019 10:11:40 +0000 Received: from pd95fdaa4.dip0.t-ipconnect.de ([217.95.218.164] helo=bertha.datto.lan) by ds12 with esmtpa (Exim 4.89) (envelope-from ) id 1hgnqu-0007dX-Mj; Fri, 28 Jun 2019 12:11:32 +0200 From: John Crispin To: Kalle Valo Subject: [RFC 1/2] ath11k: drop tx_status_fifo Date: Fri, 28 Jun 2019 12:11:26 +0200 Message-Id: <20190628101127.6044-1-john@phrozen.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190628_031137_145831_0E242FEB X-CRM114-Status: GOOD ( 13.18 ) X-BeenThere: ath11k@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Crispin , ath11k@lists.infradead.org, Rajkumar Manoharan Sender: "ath11k" Errors-To: ath11k-bounces+patchwork-ath11k=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP perf top showed that 10% of the cpu time was spent on the memcpy used to populate the fifo when the device is under high load. There is no apparent benefit from using a fifo so lets just drop it. Signed-off-by: John Crispin --- drivers/net/wireless/ath/ath11k/dp.c | 13 --------- drivers/net/wireless/ath/ath11k/dp.h | 5 ---- drivers/net/wireless/ath/ath11k/dp_tx.c | 37 +++++------------------- drivers/net/wireless/ath/ath11k/hal_tx.c | 5 ---- drivers/net/wireless/ath/ath11k/hal_tx.h | 1 - 5 files changed, 8 insertions(+), 53 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp.c b/drivers/net/wireless/ath/ath11k/dp.c index 3f5174a0c622..7e0a67d9e5c1 100644 --- a/drivers/net/wireless/ath/ath11k/dp.c +++ b/drivers/net/wireless/ath/ath11k/dp.c @@ -839,10 +839,6 @@ void ath11k_dp_free(struct ath11k_base *sc) ath11k_dp_tx_pending_cleanup, sc); idr_destroy(&dp->tx_ring[i].txbuf_idr); spin_unlock_bh(&dp->tx_ring[i].tx_idr_lock); - - spin_lock_bh(&dp->tx_ring[i].tx_status_lock); - kfifo_free(&dp->tx_ring[i].tx_status_fifo); - spin_unlock_bh(&dp->tx_ring[i].tx_status_lock); } /* Deinit any SOC level resource */ @@ -888,12 +884,6 @@ int ath11k_dp_alloc(struct ath11k_base *sc) idr_init(&dp->tx_ring[i].txbuf_idr); spin_lock_init(&dp->tx_ring[i].tx_idr_lock); dp->tx_ring[i].tcl_data_ring_id = i; - - spin_lock_init(&dp->tx_ring[i].tx_status_lock); - ret = kfifo_alloc(&dp->tx_ring[i].tx_status_fifo, size, - GFP_KERNEL); - if (ret) - goto fail_cmn_srng_cleanup; } for (i = 0; i < HAL_DSCP_TID_MAP_TBL_NUM_ENTRIES_MAX; i++) @@ -903,9 +893,6 @@ int ath11k_dp_alloc(struct ath11k_base *sc) return 0; -fail_cmn_srng_cleanup: - ath11k_dp_srng_common_cleanup(sc); - fail_link_desc_cleanup: ath11k_dp_link_desc_cleanup(sc, dp->link_desc_banks, HAL_WBM_IDLE_LINK, &dp->wbm_idle_ring); diff --git a/drivers/net/wireless/ath/ath11k/dp.h b/drivers/net/wireless/ath/ath11k/dp.h index e09065690481..b654277cb68d 100644 --- a/drivers/net/wireless/ath/ath11k/dp.h +++ b/drivers/net/wireless/ath/ath11k/dp.h @@ -66,11 +66,6 @@ struct dp_tx_ring { u32 num_tx_pending; /* Protects txbuf_idr and num_pending */ spinlock_t tx_idr_lock; - DECLARE_KFIFO_PTR(tx_status_fifo, struct hal_wbm_release_ring); - /* lock to protect tx_status_fifo because tx_status_fifo can be - * accessed concurrently. - */ - spinlock_t tx_status_lock; }; struct ath11k_pdev_mon_stats { diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c index e7229f6289c1..b3d5995fc657 100644 --- a/drivers/net/wireless/ath/ath11k/dp_tx.c +++ b/drivers/net/wireless/ath/ath11k/dp_tx.c @@ -448,47 +448,28 @@ void ath11k_dp_tx_completion_handler(struct ath11k_base *ab, int ring_id) int hal_ring_id = dp->tx_ring[ring_id].tcl_comp_ring.ring_id; struct hal_srng *status_ring = &ab->hal.srng_list[hal_ring_id]; struct sk_buff *msdu; - struct hal_wbm_release_ring tx_status; struct hal_tx_status ts; struct dp_tx_ring *tx_ring = &dp->tx_ring[ring_id]; - u32 *desc; u32 msdu_id; + u32 *desc; u8 mac_id; spin_lock_bh(&status_ring->lock); ath11k_hal_srng_access_begin(ab, status_ring); - spin_lock_bh(&tx_ring->tx_status_lock); - while (!kfifo_is_full(&tx_ring->tx_status_fifo) && - (desc = ath11k_hal_srng_dst_get_next_entry(ab, status_ring))) { - ath11k_hal_tx_status_desc_sync((void *)desc, - (void *)&tx_status); - kfifo_put(&tx_ring->tx_status_fifo, tx_status); - } - - if ((ath11k_hal_srng_dst_peek(ab, status_ring) != NULL) && - kfifo_is_full(&tx_ring->tx_status_fifo)) { - /* TODO: Process pending tx_status messages when kfifo_is_full() */ - ath11k_warn(ab, "Unable to process some of the tx_status ring desc because status_fifo is full\n"); - } - - spin_unlock_bh(&tx_ring->tx_status_lock); - - ath11k_hal_srng_access_end(ab, status_ring); - spin_unlock_bh(&status_ring->lock); - - spin_lock_bh(&tx_ring->tx_status_lock); - while (kfifo_get(&tx_ring->tx_status_fifo, &tx_status)) { + while ((desc = ath11k_hal_srng_dst_get_next_entry(ab, status_ring))) { memset(&ts, 0, sizeof(ts)); - ath11k_hal_tx_status_parse(ab, &tx_status, &ts); + ath11k_hal_tx_status_parse(ab, + (struct hal_wbm_release_ring *)desc, + &ts); mac_id = FIELD_GET(DP_TX_DESC_ID_MAC_ID, ts.desc_id); msdu_id = FIELD_GET(DP_TX_DESC_ID_MSDU_ID, ts.desc_id); if (ts.buf_rel_source == HAL_WBM_REL_SRC_MODULE_FW) { ath11k_dp_tx_process_htt_tx_complete(ab, - (void *)&tx_status, + (void *)desc, mac_id, msdu_id, tx_ring); continue; @@ -511,12 +492,10 @@ void ath11k_dp_tx_completion_handler(struct ath11k_base *ab, int ring_id) if (atomic_dec_and_test(&ar->dp.num_tx_pending)) wake_up(&ar->dp.tx_empty_waitq); - /* TODO: Locking optimization so that tx_completion for an msdu - * is not called with tx_status_lock acquired - */ ath11k_dp_tx_complete_msdu(ar, msdu, &ts); } - spin_unlock_bh(&tx_ring->tx_status_lock); + ath11k_hal_srng_access_end(ab, status_ring); + spin_unlock_bh(&status_ring->lock); } int ath11k_dp_tx_send_reo_cmd(struct ath11k_base *ab, struct dp_rx_tid *rx_tid, diff --git a/drivers/net/wireless/ath/ath11k/hal_tx.c b/drivers/net/wireless/ath/ath11k/hal_tx.c index 3c04ebe23c22..899fb9356f2d 100644 --- a/drivers/net/wireless/ath/ath11k/hal_tx.c +++ b/drivers/net/wireless/ath/ath11k/hal_tx.c @@ -79,11 +79,6 @@ void ath11k_hal_tx_desc_sync(void *tx_desc_cached, void *hw_desc) sizeof(struct hal_tcl_data_cmd)); } -void ath11k_hal_tx_status_desc_sync(void *hw_desc, void *local_desc) -{ - memcpy(local_desc, hw_desc, HAL_TX_STATUS_DESC_LEN); -} - void ath11k_hal_tx_status_parse(struct ath11k_base *ab, struct hal_wbm_release_ring *desc, struct hal_tx_status *ts) diff --git a/drivers/net/wireless/ath/ath11k/hal_tx.h b/drivers/net/wireless/ath/ath11k/hal_tx.h index 3b12dfda7423..b37d585355a0 100644 --- a/drivers/net/wireless/ath/ath11k/hal_tx.h +++ b/drivers/net/wireless/ath/ath11k/hal_tx.h @@ -70,7 +70,6 @@ void ath11k_hal_tx_desc_sync(void *tx_desc_cached, void *hw_desc); void ath11k_hal_tx_status_parse(struct ath11k_base *ab, struct hal_wbm_release_ring *desc, struct hal_tx_status *ts); -void ath11k_hal_tx_status_desc_sync(void *hw_desc, void *local_desc); void ath11k_hal_tx_set_dscp_tid_map(struct ath11k_base *ab, int id); int ath11k_hal_reo_cmd_send(struct ath11k_base *ab, struct hal_srng *srng, enum hal_reo_cmd_type type, From patchwork Fri Jun 28 10:11:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 11021909 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AD51114E5 for ; Fri, 28 Jun 2019 10:11:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9D1942878F for ; Fri, 28 Jun 2019 10:11:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9127D28796; Fri, 28 Jun 2019 10:11:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 221962878F for ; Fri, 28 Jun 2019 10:11:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=yOq9LCnA9fNu7nzNSqnmQ4eAlOSLfmXn+akFtW10Dhw=; b=M7sQti72cuaj+/ iYFKjvCSyFZCErvoJnGWQLVHgNUFllhsJ9fqPiuppLMrlgKwu43aWBzt0L213Cfxs+hB9FAtCRxph RtU2bggVXWxAnEDgmjIZ+PH3KmxrQgV90lcc3p5GzDR/6kNMqAqC6VwYhaXBFIMvBzhijfpye+TcA uAhavIYTSmWQ8xpjic13o7Ev7DUDfp5WZLvCaJj9WY8D9kgdRBG017tHzzngNO+KcxddI+n7Q0lO7 pV+cKcyAmBULtcjUO3s+MWeIp3ZKVgWvnk0ODCEYXR6r6gmFiubGaC/HdimsxEF4iEiBfHYfWFHHF qiI2ZolaWR0chjC5IQXw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hgnr1-0005g0-KH; Fri, 28 Jun 2019 10:11:39 +0000 Received: from nbd.name ([2a01:4f8:221:3d45::2]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hgnqy-0005Z4-UW for ath11k@lists.infradead.org; Fri, 28 Jun 2019 10:11:38 +0000 Received: from pd95fdaa4.dip0.t-ipconnect.de ([217.95.218.164] helo=bertha.datto.lan) by ds12 with esmtpa (Exim 4.89) (envelope-from ) id 1hgnqv-0007dX-31; Fri, 28 Jun 2019 12:11:33 +0200 From: John Crispin To: Kalle Valo Subject: [RFC 2/2] ath11k: drop memset in tx status hotpath Date: Fri, 28 Jun 2019 12:11:27 +0200 Message-Id: <20190628101127.6044-2-john@phrozen.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190628101127.6044-1-john@phrozen.org> References: <20190628101127.6044-1-john@phrozen.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190628_031137_142608_646A4EE1 X-CRM114-Status: UNSURE ( 9.30 ) X-CRM114-Notice: Please train this message. X-BeenThere: ath11k@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Crispin , ath11k@lists.infradead.org, Rajkumar Manoharan Sender: "ath11k" Errors-To: ath11k-bounces+patchwork-ath11k=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP This in a small but measurable performance increase. Signed-off-by: John Crispin --- drivers/net/wireless/ath/ath11k/dp_tx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c index b3d5995fc657..8c5db3c88a87 100644 --- a/drivers/net/wireless/ath/ath11k/dp_tx.c +++ b/drivers/net/wireless/ath/ath11k/dp_tx.c @@ -448,7 +448,6 @@ void ath11k_dp_tx_completion_handler(struct ath11k_base *ab, int ring_id) int hal_ring_id = dp->tx_ring[ring_id].tcl_comp_ring.ring_id; struct hal_srng *status_ring = &ab->hal.srng_list[hal_ring_id]; struct sk_buff *msdu; - struct hal_tx_status ts; struct dp_tx_ring *tx_ring = &dp->tx_ring[ring_id]; u32 msdu_id; u32 *desc; @@ -459,7 +458,8 @@ void ath11k_dp_tx_completion_handler(struct ath11k_base *ab, int ring_id) ath11k_hal_srng_access_begin(ab, status_ring); while ((desc = ath11k_hal_srng_dst_get_next_entry(ab, status_ring))) { - memset(&ts, 0, sizeof(ts)); + struct hal_tx_status ts = { 0 }; + ath11k_hal_tx_status_parse(ab, (struct hal_wbm_release_ring *)desc, &ts);