From: Pkshih <pkshih@realtek.com>
To: "briannorris@chromium.org" <briannorris@chromium.org>
Cc: "linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>,
"kvalo@codeaurora.org" <kvalo@codeaurora.org>
Subject: Re: [PATCH v4 13/19] rtw89: 8852a: add 8852a specific files
Date: Thu, 29 Apr 2021 23:43:12 +0000 [thread overview]
Message-ID: <1619739791.1874.18.camel@realtek.com> (raw)
In-Reply-To: <YIsg3iv6d4L6n9Uk@google.com>
On Thu, 2021-04-29 at 21:10 +0000, Brian Norris wrote:
> Hi,
>
> On Thu, Apr 29, 2021 at 04:01:43PM +0800, Ping-Ke Shih wrote:
> > --- /dev/null
> > +++ b/drivers/net/wireless/realtek/rtw89/rtw8852a.c
> > @@ -0,0 +1,2047 @@
> ...
> > +static void rtw8852a_btc_init_cfg(struct rtw89_dev *rtwdev)
> > +{
> > + struct rtw89_btc *btc = &rtwdev->btc;
> > + struct rtw89_btc_module *module = &btc->mdinfo;
> > + const struct rtw89_chip_info *chip = rtwdev->chip;
> > + const struct rtw89_mac_ax_coex coex_params = {
> > + .pta_mode = RTW89_MAC_AX_COEX_RTK_MODE,
> > + .direction = RTW89_MAC_AX_COEX_INNER,
> > + };
> > +
> > + /* PTA init */
> > + rtw89_mac_coex_init(rtwdev, &coex_params);
> > +
> > + /* set WL Tx response = Hi-Pri */
> > + chip->ops->btc_set_wl_pri(rtwdev, BTC_PRI_MASK_TX_RESP, true);
> > +
> > + /* set rf gnt debug off */
> > + rtw89_write_rf(rtwdev, RF_PATH_A, RR_WLSEL, 0xfffff, 0x0);
>
> I fired this up and quickly ran into this:
>
> [ 1746.061015] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:281
> [ 1746.061029] in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 838, name: wpa_supplicant
> [ 1746.061037] CPU: 2 PID: 838 Comm: wpa_supplicant Tainted: G W 5.10.27 #3
> ...
> [ 1746.061047] Call Trace:
> [ 1746.061061] dump_stack+0x9e/0xe9
> [ 1746.061080] ___might_sleep+0x154/0x16a
> [ 1746.061093] mutex_lock+0x20/0x3c
> [ 1746.061106] rtw8852a_btc_init_cfg+0x60/0x177 [rtw89_core]
> [ 1746.061127] rtw89_btc_ntfy_radio_state+0xb8/0x115 [rtw89_core]
> [ 1746.061153] __iterate_interfaces+0xa9/0x109 [mac80211]
> [ 1746.061165] ? rtw89_leave_lps+0x44/0x44 [rtw89_core]
> [ 1746.061175] ? rtw89_leave_lps+0x44/0x44 [rtw89_core]
> [ 1746.061194] ieee80211_iterate_active_interfaces_atomic+0x33/0x40 [mac80211]
> [ 1746.061205] rtw89_ops_sw_scan_start+0x2e/0x48 [rtw89_core]
> [ 1746.061234] drv_sw_scan_start+0x97/0xf0 [mac80211]
> [ 1746.061261] __ieee80211_start_scan+0x3c7/0x4ae [mac80211]
> [ 1746.061284] ieee80211_request_scan+0x33/0x4f [mac80211]
> [ 1746.061307] rdev_scan+0x72/0xd1 [cfg80211]
> [ 1746.061335] nl80211_trigger_scan+0x610/0x669 [cfg80211]
> [ 1746.061349] genl_rcv_msg+0x3b0/0x3e0
> [ 1746.061372] ? nl80211_update_mesh_config+0x1b7/0x1b7 [cfg80211]
> [ 1746.061382] ? genl_rcv+0x36/0x36
> [ 1746.061387] netlink_rcv_skb+0x89/0xfb
> [ 1746.061394] genl_rcv+0x28/0x36
> [ 1746.061400] netlink_unicast+0x169/0x23b
> [ 1746.061408] netlink_sendmsg+0x379/0x3f1
> [ 1746.061416] sock_sendmsg+0x72/0x76
> [ 1746.061423] ____sys_sendmsg+0x171/0x1ea
> [ 1746.061429] ? copy_msghdr_from_user+0x82/0xaa
> [ 1746.061436] ___sys_sendmsg+0xa0/0xdc
> [ 1746.061445] ? _copy_from_user+0x70/0x9c
> [ 1746.061451] __sys_sendmsg+0x8c/0xc6
> [ 1746.061460] do_syscall_64+0x43/0x55
> [ 1746.061467] entry_SYSCALL_64_after_hwframe+0x44/0xa9
>
> rtw89_write_rf() is holding a mutex (rf_mutex). Judging by its trivial
> usage (it's only protecting register reads/writes), it probably could be
> a spinlock instead -- although I do note some magic udelay()s in there.
>
The udelay() is needed to ensure the indirect-write correct.
> Alternatively, it looks like you'd be safe moving to the non-atomic
> ieee80211_iterate_active_interfaces() in rtw89_leave_lps().
>
For most cases of rtw89_leave_lps(), we can use ieee80211_iterate_active_interfaces(),
which hold iflist_mtx lock, except to
ieee80211_recalc_ps(local); // held iflist_mtx lock
...
ieee80211_hw_config
...
rtw89_leave_lps()
...
ieee80211_iterate_active_interfaces()
That will leads deadlock.
Another variant ieee80211_iterate_active_interfaces_mtx() that doesn't
hold a lock may be a solution. The the comment says "This version can
only be used while holding the RTNL.", and the code within the function
says "lockdep_assert_wiphy(hw->wiphy);". I'm not sure if I can use it
to prevent locking iflist_mtx twice.
If I can use it, I can add a argument 'mtx', like rtw89_leave_lps(rtwdev, bool mtx),
to judge using ieee80211_iterate_active_interfaces() or ieee80211_iterate_active_interfaces_mtx().
I'm also thinking that we can still use ieee80211_iterate_active_interfaces_atomic()
to merely collect rtwvif->mac_id list, and use a loop to do leave_lps
out of the atomic iterate.
--
Ping-Ke
next prev parent reply other threads:[~2021-04-29 23:43 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-29 8:01 [PATCH v4 00/19] rtw89: add Realtek 802.11ax driver Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 01/19] rtw89: add CAM files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 02/19] rtw89: add BT coexistence files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 03/19] rtw89: add core and trx files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 04/19] rtw89: add debug files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 05/19] rtw89: add efuse files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 06/19] rtw89: add files to download and communicate with firmware Ping-Ke Shih
2021-04-30 1:10 ` Brian Norris
2021-05-01 0:39 ` Pkshih
2021-04-29 8:01 ` [PATCH v4 07/19] rtw89: add MAC files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 08/19] rtw89: implement mac80211 ops Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 09/19] rtw89: add pci files Ping-Ke Shih
2021-06-10 2:03 ` Brian Norris
2021-06-16 8:31 ` Pkshih
2021-06-18 19:13 ` Brian Norris
2021-06-25 10:07 ` Pkshih
2021-07-01 0:47 ` Pkshih
2021-07-19 18:50 ` Brian Norris
2021-07-21 3:20 ` Pkshih
2021-04-29 8:01 ` [PATCH v4 10/19] rtw89: add phy files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 11/19] rtw89: define register names Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 12/19] rtw89: add regulatory support Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 13/19] rtw89: 8852a: add 8852a specific files Ping-Ke Shih
2021-04-29 21:10 ` Brian Norris
2021-04-29 23:43 ` Pkshih [this message]
2021-04-30 1:22 ` Brian Norris
2021-05-01 0:54 ` Pkshih
2021-04-29 8:01 ` [PATCH v4 14/19] rtw89: 8852a: add 8852a RFK files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 15/19] rtw89: 8852a: add 8852a RFK tables Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 17/19] rtw89: add ser to recover error reported by firmware Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 18/19] rtw89: add PS files Ping-Ke Shih
2021-04-29 8:01 ` [PATCH v4 19/19] rtw89: add Kconfig and Makefile Ping-Ke Shih
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1619739791.1874.18.camel@realtek.com \
--to=pkshih@realtek.com \
--cc=briannorris@chromium.org \
--cc=kvalo@codeaurora.org \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).