From patchwork Tue Dec 20 07:55:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abhishek Kumar X-Patchwork-Id: 34979 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp2833288wrn; Tue, 20 Dec 2022 00:03:18 -0800 (PST) X-Google-Smtp-Source: AA0mqf4WQ5pe+r21PJBKKLG/wl62ZH1TWOWH+6pgCYpPXeAhCXdfj6JNe2h6I2hbd1+uXzOcKLVN X-Received: by 2002:a17:902:d551:b0:18d:6244:4676 with SMTP id z17-20020a170902d55100b0018d62444676mr46082042plf.18.1671523397977; Tue, 20 Dec 2022 00:03:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671523397; cv=none; d=google.com; s=arc-20160816; b=Ap0i2+5kdWxAeqFYUgx1mxx6jFGHZh8uUykp4cYD12Zex3c8u0ZrdwGlSWAN14qtEf BjbbeB/LTcmMQR2JxKsZAmbCcI6qUIxlPDh0mfokAXAadxZcDSlnVQNrt0WSMh7k6rk6 cjKA4/ZJEKV7394vM71rRitYaW1jo8+oxc2tTH/rEH63JLS8+gmO8FJIzArX56CZxoxI IJHGn4mPQTGnagSe6lPR59yALJ2d0p0GVEy4QBvJqDCt9IEi0GGkHLLNl81aH3EYCqTW T0turTYr66+p+glu1au6RtQTwcLLvXgA/YM7DLkWqK6XhTEVa8t5yQB4EWFhjcyrLRRv RdZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=+lUH7ICleRb/CYwKzbaXCdf221Goq9bYxBGSvWpk034=; b=l9J+q/phm239QqzDuZIqx4iswwXj2B602Gmw91UmmAp1k9JeviHfYwbLKe9+U7ohQT F6eVTGuuDNXsJgWE2bhcXlSClIyG9G08t6iAV1FMl9wBTDyQDPDueOIK7c10TBvF4dQ4 vPZmcAa87A940PQiKXZfmOc3CTWZcMVud1bvLwzVsmV+/5qxCX8Y0LkcABy+rlPIQHWL My1Nc2WZl3QjU16dpWzVUZhESykeiTiahmesNjbdmtyIxHWpXdFsZZtpZVJhbYnjTg7A P+HG3c3rNn2FBaRsnCUYE3KpD05ZwU+Q6yh38MaawG6QDJqsMo/9BIgRj+3SWTdInqD6 megw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=m5nTnrA9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x8-20020a170902b40800b00189c3cb41a6si12356392plr.93.2022.12.20.00.03.04; Tue, 20 Dec 2022 00:03:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=m5nTnrA9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232918AbiLTHzy (ORCPT + 99 others); Tue, 20 Dec 2022 02:55:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34390 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229690AbiLTHzu (ORCPT ); Tue, 20 Dec 2022 02:55:50 -0500 Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 758C53892 for ; Mon, 19 Dec 2022 23:55:48 -0800 (PST) Received: by mail-pj1-x102d.google.com with SMTP id 3-20020a17090a098300b00219041dcbe9so11301291pjo.3 for ; Mon, 19 Dec 2022 23:55:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=+lUH7ICleRb/CYwKzbaXCdf221Goq9bYxBGSvWpk034=; b=m5nTnrA9JUKHMNfFob+CNWz9Y5A1kA/3Jg6cLD2QsBzePMwiGtry/ONhtt0M6DLHQp nDTdgG2QLz7YZjToSy+z02blQQO/SSdch1ihyHDei1Ao12BSLtsQM0JaN95eblZG12ss 2eoqXXhHY7PGgAznQJ9xkaJaha4nQFcP00W2M= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+lUH7ICleRb/CYwKzbaXCdf221Goq9bYxBGSvWpk034=; b=uyAEE8HkSCRmIlqTiaVzYivYvOndO7uQnu1rLCLKkAXMiEDFr4jDBxyvhocT3WV1hP XKuOVveWTzqX/ORVoRJD7lJGOnhO6Yz90CsMBPNQjlNZSXIRpr+OUgMpQnxFNGvGUOKV 4mnRwcwc/vfV+tVnp3EuRKMMLhWqN/8iFkQysYPBDc9Ntlqc6VYE2+vbHAS5SwBRX7q0 js2R4sFfkuLKLMxUkdfo1xpzQcLQygockujg0uCNxwMk9J/1fvpnJpQcBWUV/bWeQeOK USzUZBb1NaAyi43H1iVAfJVXV6pQMEL3t3PTrE9EPqN2vlX3gtZETiWoy4VnGHYoN9lc P4Fw== X-Gm-Message-State: AFqh2kruar4X9gP4HW5/fnAXJPODQ30QDJggm9wC3LuR93g3oMeyfqb4 mJ6xIZ9tFC6OqWS+ed3ODGHsDQ== X-Received: by 2002:a05:6a20:9e05:b0:b2:18da:1515 with SMTP id ms5-20020a056a209e0500b000b218da1515mr3509202pzb.20.1671522947919; Mon, 19 Dec 2022 23:55:47 -0800 (PST) Received: from kuabhs-cdev.c.googlers.com.com (254.80.82.34.bc.googleusercontent.com. [34.82.80.254]) by smtp.gmail.com with ESMTPSA id u31-20020a63235f000000b00488b8ad57bfsm5124215pgm.54.2022.12.19.23.55.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Dec 2022 23:55:47 -0800 (PST) From: Abhishek Kumar To: kvalo@kernel.org Cc: ath10k@lists.infradead.org, linux-wireless@vger.kernel.org, kuabhs@chromium.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Subject: [PATCH] ath10k: snoc: enable threaded napi on WCN3990 Date: Tue, 20 Dec 2022 07:55:06 +0000 Message-Id: <20221220075215.1.Ic12e347e0d61a618124b742614e82bbd5d770173@changeid> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752719318689080714?= X-GMAIL-MSGID: =?utf-8?q?1752719318689080714?= NAPI poll can be done in threaded context along with soft irq context. Threaded context can be scheduled efficiently, thus creating less of bottleneck during Rx processing. This patch is to enable threaded NAPI on ath10k driver. Based on testing, it was observed that on WCN3990, the CPU0 reaches 100% utilization when napi runs in softirq context. At the same time the other CPUs are at low consumption percentage. This does not allow device to reach its maximum throughput potential. After enabling threaded napi, CPU load is balanced across all CPUs and following improvments were observed: - UDP_RX increase by ~22-25% - TCP_RX increase by ~15% Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.2.2-00696-QCAHLSWMTPL-1 Signed-off-by: Abhishek Kumar --- drivers/net/wireless/ath/ath10k/core.c | 16 ++++++++++++++++ drivers/net/wireless/ath/ath10k/hw.h | 2 ++ drivers/net/wireless/ath/ath10k/snoc.c | 3 +++ 3 files changed, 21 insertions(+) diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 5eb131ab916fd..ee4b6ba508c81 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -100,6 +100,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA988X_HW_2_0_VERSION, @@ -140,6 +141,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA9887_HW_1_0_VERSION, @@ -181,6 +183,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA6174_HW_3_2_VERSION, @@ -217,6 +220,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA6174_HW_2_1_VERSION, @@ -257,6 +261,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA6174_HW_2_1_VERSION, @@ -297,6 +302,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA6174_HW_3_0_VERSION, @@ -337,6 +343,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA6174_HW_3_2_VERSION, @@ -381,6 +388,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA99X0_HW_2_0_DEV_VERSION, @@ -427,6 +435,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA9984_HW_1_0_DEV_VERSION, @@ -480,6 +489,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA9888_HW_2_0_DEV_VERSION, @@ -530,6 +540,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA9377_HW_1_0_DEV_VERSION, @@ -570,6 +581,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA9377_HW_1_1_DEV_VERSION, @@ -612,6 +624,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA9377_HW_1_1_DEV_VERSION, @@ -645,6 +658,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = QCA4019_HW_1_0_DEV_VERSION, @@ -692,6 +706,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .enable_threaded_napi = false, }, { .id = WCN3990_HW_1_0_DEV_VERSION, @@ -725,6 +740,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = true, .use_fw_tx_credits = false, .delay_unmap_buffer = true, + .enable_threaded_napi = true, }, }; diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h index 9643031a4427a..adf3076b96503 100644 --- a/drivers/net/wireless/ath/ath10k/hw.h +++ b/drivers/net/wireless/ath/ath10k/hw.h @@ -639,6 +639,8 @@ struct ath10k_hw_params { bool use_fw_tx_credits; bool delay_unmap_buffer; + + bool enable_threaded_napi; }; struct htt_resp; diff --git a/drivers/net/wireless/ath/ath10k/snoc.c b/drivers/net/wireless/ath/ath10k/snoc.c index cfcb759a87dea..b94150fb6ef06 100644 --- a/drivers/net/wireless/ath/ath10k/snoc.c +++ b/drivers/net/wireless/ath/ath10k/snoc.c @@ -927,6 +927,9 @@ static int ath10k_snoc_hif_start(struct ath10k *ar) bitmap_clear(ar_snoc->pending_ce_irqs, 0, CE_COUNT_MAX); + if (ar->hw_params.enable_threaded_napi) + dev_set_threaded(&ar->napi_dev, true); + ath10k_core_napi_enable(ar); ath10k_snoc_irq_enable(ar); ath10k_snoc_rx_post(ar);