Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp734246ybl; Fri, 16 Aug 2019 03:11:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqxLWzFfhjNhsPPHv3RxUnWMPPVqmENJvTqiBIDWEyqwEH8ALNmfPOIQIvD0av1xJro3U+Nw X-Received: by 2002:a17:902:f204:: with SMTP id gn4mr8638048plb.3.1565950283351; Fri, 16 Aug 2019 03:11:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565950283; cv=none; d=google.com; s=arc-20160816; b=AElqWiwYgWqx5Ay/M7kzE1pQsEdGQ4FuwVi51pKEq7vF18y31rLEOzqAmXxCnmLa9j uxut8kAPoo/1KTKNPtknAxaKpE26k5hL4leXrUlcStzRX4O1xMPiHnnr4BpKKYE4pyRb RxtYFaOoE81kkdYOSq9aA3GY74Pm9sJSGB0bvjB8+jvmhEAFn+NMqalnpHpBgzmTe/ud BA3EbTNZyuZ8aJTkvyzUjLzpabTz/ToIR4kZHt1tFblJ+vRXkPBN4RjcLa66i2zHuJh9 t3mNcm3Pw5qkTBmOMdAdNdD1FgV01MMT1921hGUoqlZpUwP6koAr2Ig8DArOpGS6eS5V N/oQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=BziYCDS7YU8vYUQWJ4hyE7rgzHXY7u3/I6t4rVAc7Js=; b=PglUxJTZRRDBefIAYjM2lDFN0rqSF46PzhLPVOAjUYeJOn6ASGnLUCjRUAG5wsHdB3 Euz3XzvWwRvMAYIO7LCMcbv3t4+PQNhfP8Pd9WbSeVvcokStylMF+zdIgwvj2xVZgYv+ DpYUsFIduY4PhiTfzX3nBCAjeyR82fpnRBgEE5L1UpOqu0bc5y9Kv9BDnl9zcZGoAlqu Cou8ZMrGbYhF8iQi6VHtKtMBOs8n049gu1jqGI0A/rxYLsyQmRKWN4CmyBNmis+dbXfr yEDFAEZrTcAb991neCg6AXK4Rqqq2gTIoD8pjzZaypsYTk4q+Q1OghOvfMWyR8/My0e9 71Rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@endlessm-com.20150623.gappssmtp.com header.s=20150623 header.b="R/BjKxui"; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x11si3740385pll.343.2019.08.16.03.11.00; Fri, 16 Aug 2019 03:11:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@endlessm-com.20150623.gappssmtp.com header.s=20150623 header.b="R/BjKxui"; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727031AbfHPKKi (ORCPT + 99 others); Fri, 16 Aug 2019 06:10:38 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:43386 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726839AbfHPKKh (ORCPT ); Fri, 16 Aug 2019 06:10:37 -0400 Received: by mail-pf1-f194.google.com with SMTP id v12so2893112pfn.10 for ; Fri, 16 Aug 2019 03:10:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=endlessm-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BziYCDS7YU8vYUQWJ4hyE7rgzHXY7u3/I6t4rVAc7Js=; b=R/BjKxui66lKaPED3pI5oRmo9WbpFno/jivG60cueCwZVAbNmgMlimnp5k74+OJjib 5abcqYanAtnFBMcE0+mg/qAV5bloh75/Ek0FeTy7Wqu/rhr0tuscqHCDZONoXcx/7Exk hlrykyaUzQRJtq5FXMPPmdgOnepFMvmi24yFmrH67dC/8TvYXuf9nwS3xJk2eeR4J1+v S2m0BvtEImg1hR2oq6/tFHqZ0mJ6ErE7NBiTCOp8lWgSwfwWmSwNAI9sPLsyImio9YhD WQw00PA5Pn9G2m7YusEMEehyFAcmEfWRsxDFunYRiEw+4H+DMF2cx302fdEBCAArohL5 McUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BziYCDS7YU8vYUQWJ4hyE7rgzHXY7u3/I6t4rVAc7Js=; b=IDi0XHmoJDaLIbaZntRaZvnSksb5xdjGWhH7O+LDF8Y79p8vU2g9Exjp8FUh1hb05k loaRC6ob/2lz4Fme7Gc1LckllHJkT/CRPSGRuBQ+LYZgSeGMyzty8qZLPVh5BozaIWC0 CZsLaYV5wBAdPNYEXlpSVo3DJBbqe/Zcav3036IiXN1BfhKhwGs+2PkGsLdsmb9Idsih R/wEKOt04qi4MDkLzan6L/FU9ps4YfbRa+cbrveE9uIWtEymKF2qqjr1KDcSVkG1F7j0 USqMC416gwkTBHLGHi7N+IBoPJEn9gC1b4AjOgVA0LZbpOVx9iIWia2fBUcvjTQ6lOQd Y7Hg== X-Gm-Message-State: APjAAAU+/FaYweRWUrXLRw36zuSEhUT8olnSHZNIqvSIALjaOl4KClRA ENvFBpgEfRRwnOLqdhrzh/ePfg== X-Received: by 2002:a17:90a:8081:: with SMTP id c1mr6584848pjn.62.1565950236764; Fri, 16 Aug 2019 03:10:36 -0700 (PDT) Received: from localhost.localdomain (123-204-46-122.static.seed.net.tw. [123.204.46.122]) by smtp.gmail.com with ESMTPSA id r75sm6230043pfc.18.2019.08.16.03.10.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Aug 2019 03:10:36 -0700 (PDT) From: Jian-Hong Pan To: Yan-Hsuan Chuang , Kalle Valo , "David S . Miller" Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux@endlessm.com, Jian-Hong Pan Subject: [PATCH v2] rtw88: pci: Move a mass of jobs in hw IRQ to soft IRQ Date: Fri, 16 Aug 2019 18:09:04 +0800 Message-Id: <20190816100903.7549-1-jian-hong@endlessm.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org There is a mass of jobs between spin lock and unlock in the hardware IRQ which will occupy much time originally. To make system work more efficiently, this patch moves the jobs to the soft IRQ (bottom half) to reduce the time in hardware IRQ. Signed-off-by: Jian-Hong Pan --- v2: Change the spin_lock_irqsave/unlock_irqrestore to spin_lock/unlock in rtw_pci_interrupt_handler. Because the interrupts are already disabled in the hardware interrupt handler. drivers/net/wireless/realtek/rtw88/pci.c | 33 +++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c index 00ef229552d5..0740140d7e46 100644 --- a/drivers/net/wireless/realtek/rtw88/pci.c +++ b/drivers/net/wireless/realtek/rtw88/pci.c @@ -866,12 +866,28 @@ static irqreturn_t rtw_pci_interrupt_handler(int irq, void *dev) { struct rtw_dev *rtwdev = dev; struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; - u32 irq_status[4]; spin_lock(&rtwpci->irq_lock); if (!rtwpci->irq_enabled) goto out; + /* disable RTW PCI interrupt to avoid more interrupts before the end of + * thread function + */ + rtw_pci_disable_interrupt(rtwdev, rtwpci); +out: + spin_unlock(&rtwpci->irq_lock); + + return IRQ_WAKE_THREAD; +} + +static irqreturn_t rtw_pci_interrupt_threadfn(int irq, void *dev) +{ + struct rtw_dev *rtwdev = dev; + struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv; + unsigned long flags; + u32 irq_status[4]; + rtw_pci_irq_recognized(rtwdev, rtwpci, irq_status); if (irq_status[0] & IMR_MGNTDOK) @@ -891,8 +907,11 @@ static irqreturn_t rtw_pci_interrupt_handler(int irq, void *dev) if (irq_status[0] & IMR_ROK) rtw_pci_rx_isr(rtwdev, rtwpci, RTW_RX_QUEUE_MPDU); -out: - spin_unlock(&rtwpci->irq_lock); + /* all of the jobs for this interrupt have been done */ + spin_lock_irqsave(&rtwpci->irq_lock, flags); + if (rtw_flag_check(rtwdev, RTW_FLAG_RUNNING)) + rtw_pci_enable_interrupt(rtwdev, rtwpci); + spin_unlock_irqrestore(&rtwpci->irq_lock, flags); return IRQ_HANDLED; } @@ -1152,8 +1171,10 @@ static int rtw_pci_probe(struct pci_dev *pdev, goto err_destroy_pci; } - ret = request_irq(pdev->irq, &rtw_pci_interrupt_handler, - IRQF_SHARED, KBUILD_MODNAME, rtwdev); + ret = devm_request_threaded_irq(rtwdev->dev, pdev->irq, + rtw_pci_interrupt_handler, + rtw_pci_interrupt_threadfn, + IRQF_SHARED, KBUILD_MODNAME, rtwdev); if (ret) { ieee80211_unregister_hw(hw); goto err_destroy_pci; @@ -1192,7 +1213,7 @@ static void rtw_pci_remove(struct pci_dev *pdev) rtw_pci_disable_interrupt(rtwdev, rtwpci); rtw_pci_destroy(rtwdev, pdev); rtw_pci_declaim(rtwdev, pdev); - free_irq(rtwpci->pdev->irq, rtwdev); + devm_free_irq(rtwdev->dev, rtwpci->pdev->irq, rtwdev); rtw_core_deinit(rtwdev); ieee80211_free_hw(hw); } -- 2.20.1