From patchwork Wed Jun 29 12:00:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kazior X-Patchwork-Id: 9204999 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EC5AD6075F for ; Wed, 29 Jun 2016 11:58:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DCA4628655 for ; Wed, 29 Jun 2016 11:58:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D06C428658; Wed, 29 Jun 2016 11:58:56 +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=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9F89D28655 for ; Wed, 29 Jun 2016 11:58:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751980AbcF2L6v (ORCPT ); Wed, 29 Jun 2016 07:58:51 -0400 Received: from mail-lf0-f52.google.com ([209.85.215.52]:34040 "EHLO mail-lf0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751168AbcF2L6u (ORCPT ); Wed, 29 Jun 2016 07:58:50 -0400 Received: by mail-lf0-f52.google.com with SMTP id h129so31777741lfh.1 for ; Wed, 29 Jun 2016 04:58:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tieto.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rBibQHgLVGsiqzp8GLMtZWv3leNJLtOMLV2kTpygwKI=; b=TnEXN4cKJdiNIw1wJpmn57lzvTL8PyZcfWNi9YKAnBBu4E2exiDPDUCev5P9bxN8xO la+LbI4RX7UimWU+P08g4w92bEjAbqgwJ0g0/IqcmNEy/8r4OBz1GOtC1yA8kTpWimLZ iFlZxJzn6kxiG4y8ut7coq/qBOiMgTzOyPSUU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rBibQHgLVGsiqzp8GLMtZWv3leNJLtOMLV2kTpygwKI=; b=IfPy1QT0YzHJRQPiQ6VpgBZgqL3oCb70vGEF7sCEv5nJSPf+Qcxir2liXzNK0oWGNP F4MalbUU7Ecpy2C5RHH5qjC7AzY8WjmUzIkn7H0TXG49T32J+8G5ueMBcyj3GtEKVGF5 3BpYuKcOuhBdhHEjwJoOohpMJTE6KJrDnNWOFO2rq+xa6FxSWLNSbzrq7X2NMUbO6KZB 3fEfa5dRDoyf87G5GJHWURQrKas7Dv/uSuCpdDmPlgjFb/7ekZ0m+4MsWpb7ES5AXwi6 g0V8tW04hoJirlVwecrlYXHwO21+e0N6+RpbUsMFjXKxnmPkMceyil5NO/HIHK2Brkd+ exNw== X-Gm-Message-State: ALyK8tIa4bu1OuiqmVdz0EYcc/uHMJvB/gAD6viSiPQa+Gf59q46l7Mx5Jfutc1dwH74dNxyqDRi+7o/eEVsNGJFzXhDwiBciUvShpxJIvozkCk3dFmOh23VcZNoRuDhvOAZk6w9I1MP0w== X-Received: by 10.25.212.77 with SMTP id l74mr2458984lfg.176.1467201528219; Wed, 29 Jun 2016 04:58:48 -0700 (PDT) Received: from localhost.localdomain ([91.198.246.8]) by smtp.gmail.com with ESMTPSA id 78sm583091lfs.29.2016.06.29.04.58.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 29 Jun 2016 04:58:46 -0700 (PDT) From: Michal Kazior To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, kvalo@qca.qualcomm.com, ath10k@lists.infradead.org, Michal Kazior Subject: [PATCH] mac80211: fix fq lockdep warnings Date: Wed, 29 Jun 2016 14:00:34 +0200 Message-Id: <1467201634-11060-1-git-send-email-michal.kazior@tieto.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1467026569-19329-1-git-send-email-michal.kazior@tieto.com> References: <1467026569-19329-1-git-send-email-michal.kazior@tieto.com> X-DomainID: tieto.com Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Some lockdep assertions were not fulfilled and resulted in a kernel warning/call trace if driver used intermediate software queues (e.g. ath10k). Existing code sequences should've guranteed safety but it's always good to be extra careful. The call trace could look like this: [ 237.335805] ------------[ cut here ]------------ [ 237.335852] WARNING: CPU: 3 PID: 1921 at include/net/fq_impl.h:22 fq_flow_dequeue+0xed/0x140 [mac80211] [ 237.335855] Modules linked in: ath10k_pci(E-) ath10k_core(E) ath(E) mac80211(E) cfg80211(E) [ 237.335913] CPU: 3 PID: 1921 Comm: rmmod Tainted: G W E 4.7.0-rc4-wt-ath+ #1377 [ 237.335916] Hardware name: Hewlett-Packard HP ProBook 6540b/1722, BIOS 68CDD Ver. F.04 01/27/2010 [ 237.335918] 00200286 00200286 eff85dac c14151e2 f901574e 00000000 eff85de0 c1081075 [ 237.335928] c1ab91f0 00000003 00000781 f901574e 00000016 f8fbabad f8fbabad 00000016 [ 237.335938] eb24ff60 00000000 ef3886c0 eff85df4 c10810ba 00000009 00000000 00000000 [ 237.335948] Call Trace: [ 237.335953] [] dump_stack+0x76/0xb4 [ 237.335957] [] __warn+0xe5/0x100 [ 237.336002] [] ? fq_flow_dequeue+0xed/0x140 [mac80211] [ 237.336046] [] ? fq_flow_dequeue+0xed/0x140 [mac80211] [ 237.336053] [] warn_slowpath_null+0x2a/0x30 [ 237.336095] [] fq_flow_dequeue+0xed/0x140 [mac80211] [ 237.336137] [] fq_flow_reset.constprop.56+0x2a/0x90 [mac80211] [ 237.336180] [] fq_reset.constprop.59+0x2a/0x50 [mac80211] [ 237.336222] [] ieee80211_txq_teardown_flows+0x38/0x40 [mac80211] [ 237.336258] [] ieee80211_unregister_hw+0xe4/0x120 [mac80211] [ 237.336275] [] ath10k_mac_unregister+0x16/0x50 [ath10k_core] [ 237.336292] [] ath10k_core_unregister+0x3d/0x90 [ath10k_core] [ 237.336301] [] ath10k_pci_remove+0x36/0xa0 [ath10k_pci] [ 237.336307] [] pci_device_remove+0x38/0xb0 ... Fixes: 5caa328e3811 ("mac80211: implement codel on fair queuing flows") Fixes: fa962b92120b ("mac80211: implement fair queueing per txq") Tested-by: Kalle Valo Reported-by: Kalle Valo Signed-off-by: Michal Kazior --- Notes: v1: - added Tested-by [Kalle] - swapped first/last name in Reported-by to match Tested-by - improve commit log net/mac80211/tx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index fa8d38eb9236..91461c415525 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -1449,7 +1449,9 @@ int ieee80211_txq_setup_flows(struct ieee80211_local *local) local->cvars = kcalloc(fq->flows_cnt, sizeof(local->cvars[0]), GFP_KERNEL); if (!local->cvars) { + spin_lock_bh(&fq->lock); fq_reset(fq, fq_skb_free_func); + spin_unlock_bh(&fq->lock); return -ENOMEM; } @@ -1469,7 +1471,9 @@ void ieee80211_txq_teardown_flows(struct ieee80211_local *local) kfree(local->cvars); local->cvars = NULL; + spin_lock_bh(&fq->lock); fq_reset(fq, fq_skb_free_func); + spin_unlock_bh(&fq->lock); } struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw,