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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.