Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp798002pxk; Thu, 3 Sep 2020 12:53:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzblfC4LVQ70H3RHpHsMC1hcL8NtU3OeS+wwguWSa+RWjYDErRZ9ck6z8oaXqubWiblvjZT X-Received: by 2002:a05:6402:184d:: with SMTP id v13mr5026759edy.240.1599162826310; Thu, 03 Sep 2020 12:53:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599162826; cv=none; d=google.com; s=arc-20160816; b=ZfBBUc1RSsUbzogJZFGB0q1shRKGJxao4l/aZlFoivV499bz3bpq27kT7gMgQfgDJ4 2wFOrekB7T67Wkff79vImcDvgcHPl3Ph8UHcARcCdyWYoZMOn3n9V/do3/2CCNbcqUA2 IWhZoGumbicosZgXUT9+hIv5tus8hwrWm7DMeJZzqQgg55szYbfCj/h4pbCgEeAVEDTO RL7rdmBRJBsd4jjIanBhoOIrTcxJy2/f/4XhVwp2+aKne5CgWnWB8awwmr0jm0TBiwJg Ria2RLWem84ZoPLCVQzRB6d9N6/f90ELWLtO2FnCViZiKOs8xGYLcHCizINa48FZRtht e0+Q== 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 :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter; bh=H0TD7B05zrFB4PWZ7PdgDmNgVi+/Qjc4cNSTdkzgIBA=; b=E23UPE/qtEO4A6iGJNEIy+krg38r0oBIBM4K2iJPuPKBKeCjw0cdU5TP16cI4z2C6V 2VQLi/pys/FZHrEuribmGjhG+T8iZi23EFCzuXAa9U6xbVE3MsIoJcGQqoaZwQnledri kXRlgGq5xI0B0PSBFra7CI41++cgepipUpPubyM0at4xmex9TAtOntQRuTop09iWpUWq L9mCnXI0C5S4bOo51IP7GWB3QsLyTcdc3ZKLRlIyFH1nKYx/W+OPz7gNuJJHb6KlNn9k snyLaFgZ1dWPeC+8R+x06A5T/Usfpl3ooFykFv3hbCF9TCP9syVOt5jLT6eT0lGPwDG/ 6hSw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@candelatech.com header.s=default header.b=KpdL9dyb; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=candelatech.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u15si2414905ejz.216.2020.09.03.12.53.10; Thu, 03 Sep 2020 12:53:46 -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=pass header.i=@candelatech.com header.s=default header.b=KpdL9dyb; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=candelatech.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728312AbgICTw6 (ORCPT + 99 others); Thu, 3 Sep 2020 15:52:58 -0400 Received: from mail2.candelatech.com ([208.74.158.173]:47606 "EHLO mail3.candelatech.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727065AbgICTw5 (ORCPT ); Thu, 3 Sep 2020 15:52:57 -0400 Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 60FCA13C2B0; Thu, 3 Sep 2020 12:52:56 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 60FCA13C2B0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1599162776; bh=NnYK1TMUcs2/+QKawuwRstDt5AYGooJjGV0uKYt19gA=; h=From:To:Cc:Subject:Date:From; b=KpdL9dybZ+B/H7ePbAVHSqfPSJdsFl7a6E6n9bbIKQ2dMahtbactfQ953jTFEPj6E 0olYtD607Lb7YJ9ODqLscXW9YLP72iga3Wn63/a6ppn8pfGSUqhfTdHEv/vz0Vjr/w RviiK+mVuKHeYl1xEwcRineMV3RH+kbTCaG5h4Ig= From: greearb@candelatech.com To: ath11k@lists.infradead.org Cc: linux-wireless@vger.kernel.org, Ben Greear Subject: [PATCH] ath11k: Fix napi related hang Date: Thu, 3 Sep 2020 12:52:54 -0700 Message-Id: <20200903195254.29379-1-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 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 From: Ben Greear Similar to the same bug in ath10k, a napi disable w/out it being enabled will hang forever. I believe I saw this while trying rmmod after driver had some failure on startup. Fix it by keeping state on whether napi is enabled or not. And, remove un-used napi pointer in ath10k driver base struct. Signed-off-by: Ben Greear --- drivers/net/wireless/ath/ath11k/ahb.c | 12 +++++++++--- drivers/net/wireless/ath/ath11k/core.h | 2 +- drivers/net/wireless/ath/ath11k/pci.c | 12 +++++++++--- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c index 6380d48e013d7..e667f5f0a0686 100644 --- a/drivers/net/wireless/ath/ath11k/ahb.c +++ b/drivers/net/wireless/ath/ath11k/ahb.c @@ -411,8 +411,11 @@ static void __ath11k_ahb_ext_irq_disable(struct ath11k_base *ab) ath11k_ahb_ext_grp_disable(irq_grp); - napi_synchronize(&irq_grp->napi); - napi_disable(&irq_grp->napi); + if (irq_grp->napi_enabled) { + napi_synchronize(&irq_grp->napi); + napi_disable(&irq_grp->napi); + irq_grp->napi_enabled = false; + } } } @@ -536,7 +539,10 @@ static void ath11k_ahb_ext_irq_enable(struct ath11k_base *ab) for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++) { struct ath11k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i]; - napi_enable(&irq_grp->napi); + if (!irq_grp->napi_enabled) { + napi_enable(&irq_grp->napi); + irq_grp->napi_enabled = true; + } ath11k_ahb_ext_grp_enable(irq_grp); } } diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h index 858dfc700d54c..ac03c9c0f07ef 100644 --- a/drivers/net/wireless/ath/ath11k/core.h +++ b/drivers/net/wireless/ath/ath11k/core.h @@ -111,6 +111,7 @@ struct ath11k_ext_irq_grp { u32 num_irq; u32 grp_id; u64 timestamp; + bool napi_enabled; struct napi_struct napi; struct net_device napi_ndev; }; @@ -674,7 +675,6 @@ struct ath11k_base { u32 wlan_init_status; int irq_num[ATH11K_IRQ_NUM_MAX]; struct ath11k_ext_irq_grp ext_irq_grp[ATH11K_EXT_IRQ_GRP_NUM_MAX]; - struct napi_struct *napi; struct ath11k_targ_cap target_caps; u32 ext_service_bitmap[WMI_SERVICE_EXT_BM_SIZE]; bool pdevs_macaddr_valid; diff --git a/drivers/net/wireless/ath/ath11k/pci.c b/drivers/net/wireless/ath/ath11k/pci.c index b3f1c6659f419..1e2fc8932a66e 100644 --- a/drivers/net/wireless/ath/ath11k/pci.c +++ b/drivers/net/wireless/ath/ath11k/pci.c @@ -569,8 +569,11 @@ static void __ath11k_pci_ext_irq_disable(struct ath11k_base *sc) ath11k_pci_ext_grp_disable(irq_grp); - napi_synchronize(&irq_grp->napi); - napi_disable(&irq_grp->napi); + if (irq_grp->napi_enabled) { + napi_synchronize(&irq_grp->napi); + napi_disable(&irq_grp->napi); + irq_grp->napi_enabled = false; + } } } @@ -589,7 +592,10 @@ static void ath11k_pci_ext_irq_enable(struct ath11k_base *ab) for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++) { struct ath11k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i]; - napi_enable(&irq_grp->napi); + if (!irq_grp->napi_enabled) { + napi_enable(&irq_grp->napi); + irq_grp->napi_enabled = true; + } ath11k_pci_ext_grp_enable(irq_grp); } } -- 2.26.2