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=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no 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 788DDC35672 for ; Sat, 22 Feb 2020 13:55:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5A7A720702 for ; Sat, 22 Feb 2020 13:55:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727701AbgBVNzD (ORCPT ); Sat, 22 Feb 2020 08:55:03 -0500 Received: from s3.sipsolutions.net ([144.76.43.62]:59284 "EHLO sipsolutions.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726839AbgBVNzD (ORCPT ); Sat, 22 Feb 2020 08:55:03 -0500 Received: by sipsolutions.net with esmtpsa (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) (envelope-from ) id 1j5VF2-000nAx-QM; Sat, 22 Feb 2020 14:54:48 +0100 Message-ID: <229913c0b0481c3572032b2f64ce0202f5c66c23.camel@sipsolutions.net> Subject: Re: [PATCH] net: mac80211: rx.c: Use built-in RCU list checking From: Johannes Berg To: Madhuparna Bhowmik Cc: davem@davemloft.net, linux-wireless@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, joel@joelfernandes.org, frextrite@gmail.com, linux-kernel-mentees@lists.linuxfoundation.org, paulmck@kernel.org Date: Sat, 22 Feb 2020 14:54:47 +0100 In-Reply-To: <20200222133928.GA10397@madhuparna-HP-Notebook> (sfid-20200222_143938_994762_F2980624) References: <20200222101831.8001-1-madhuparnabhowmik10@gmail.com> <20200222133928.GA10397@madhuparna-HP-Notebook> (sfid-20200222_143938_994762_F2980624) Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.34.2 (3.34.2-1.fc31) MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org > If list_for_each_entry_rcu() is called from non rcu protection > i.e without holding rcu_read_lock, but under the protection of > a different lock then we can pass that as the condition for lockdep checking > because otherwise lockdep will complain if list_for_each_entry_rcu() > is used without rcu protection. So, if we do not pass this argument > (cond) it may lead to false lockdep warnings. Sure. But what's the specific warning you see? > > > - list_for_each_entry_rcu(sdata, &local->interfaces, list) { > > > + list_for_each_entry_rcu(sdata, &local->interfaces, list, > > > + lockdep_is_held(&rx->local->rx_path_lock)) { > > > if (!ieee80211_sdata_running(sdata)) > > > continue; > > > > This is not related at all. > > I analysed the following traces: > ieee80211_rx_handlers() -> ieee80211_rx_handlers_result() -> ieee80211_rx_cooked_monitor() > > here ieee80211_rx_handlers() is holding the rx->local->rx_path_lock and > therefore I used this for the cond argument. > > If this is not right, can you help me in figuring out that which other > lock is held? It's _clearly_ not right, that's the RX spinlock, it has nothing to do with the interface list. But I'd have to see the warning. Perhaps the driver you're using is wrongly calling something in the stack. > > > lockdep_assert_held(&local->sta_mtx); > > > > > > - list_for_each_entry_rcu(sta, &local->sta_list, list) { > > > + list_for_each_entry_rcu(sta, &local->sta_list, list, > > > + lockdep_is_held(&local->sta_mtx)) { > > > > And this isn't even a real RCU iteration, since we _must_ hold the mutex > > here. > > > Yeah exactly, dropping _rcu (use list_for_each_entry()) would be a good option in this case. > Let me know if that is alright and I will send a new patch with all the > changes required. Seems fine, also better to split the patches anyway. johannes