From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80678CA9EB5 for ; Mon, 4 Nov 2019 13:46:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 51AD1205C9 for ; Mon, 4 Nov 2019 13:46:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728138AbfKDNqG (ORCPT ); Mon, 4 Nov 2019 08:46:06 -0500 Received: from smail.rz.tu-ilmenau.de ([141.24.186.67]:35871 "EHLO smail.rz.tu-ilmenau.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727663AbfKDNqG (ORCPT ); Mon, 4 Nov 2019 08:46:06 -0500 Received: from thunderstorm.prakinf.tu-ilmenau.de (thunderstorm.prakinf.tu-ilmenau.de [141.24.212.108]) by smail.rz.tu-ilmenau.de (Postfix) with ESMTPA id E88A058006E; Mon, 4 Nov 2019 14:46:04 +0100 (CET) From: Markus Theil To: nbd@nbd.name Cc: lorenzo.bianconi@redhat.com, sgruszka@redhat.com, linux-wireless@vger.kernel.org, Markus Theil Subject: [PATCH] mt76: disable softirqs while calling ieee80211_rx_napi Date: Mon, 4 Nov 2019 14:45:40 +0100 Message-Id: <20191104134540.19199-1-markus.theil@tu-ilmenau.de> X-Mailer: git-send-email 2.17.1 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org mac80211 assumes ieee80211_rx_napi to be called with disabled softirqs. ieee80211_rx_napi in mac80211.c can be called from aggregation reordering work queue or from mt76_rx_poll_complete. mt76_rx_poll_complete does currently not disable softirq processing. This patch fixes this by disabling softirqs before calling ieee80211_rx_napi. It should be no problem to disable them twice, if mt76_aggr_reorder_work calls ieee80211_rx_napi and has already called local_bh_disable, as local_bh_disable/local_bh_enable are reentrant. I became aware of this issue by the following dmesg output: NOHZ: local_softirq_pending 08 Signed-off-by: Markus Theil --- drivers/net/wireless/mediatek/mt76/mac80211.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c index 1a2c143b34d0..43c050660fc7 100644 --- a/drivers/net/wireless/mediatek/mt76/mac80211.c +++ b/drivers/net/wireless/mediatek/mt76/mac80211.c @@ -628,7 +628,7 @@ void mt76_rx_complete(struct mt76_dev *dev, struct sk_buff_head *frames, struct ieee80211_sta *sta; struct sk_buff *skb; - spin_lock(&dev->rx_lock); + spin_lock_bh(&dev->rx_lock); while ((skb = __skb_dequeue(frames)) != NULL) { if (mt76_check_ccmp_pn(skb)) { dev_kfree_skb(skb); @@ -638,7 +638,7 @@ void mt76_rx_complete(struct mt76_dev *dev, struct sk_buff_head *frames, sta = mt76_rx_convert(skb); ieee80211_rx_napi(dev->hw, sta, skb, napi); } - spin_unlock(&dev->rx_lock); + spin_unlock_bh(&dev->rx_lock); } void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q, -- 2.20.1