Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> wrote: > Disable rtw89_ps_power_mode_change() and rtw89_mac_send_rpwm() for > USB because they are called in atomic context and accessing hardware > registers results in "scheduling while atomic" errors. I feel rtw89_ps_power_mode_change() should be not in atomic context. Please check this. > > Signed-off-by: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> > --- > drivers/net/wireless/realtek/rtw89/mac.c | 3 +++ > drivers/net/wireless/realtek/rtw89/ps.c | 3 +++ > 2 files changed, 6 insertions(+) > > diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c > index a316864ad137..1a03355b340f 100644 > --- a/drivers/net/wireless/realtek/rtw89/mac.c > +++ b/drivers/net/wireless/realtek/rtw89/mac.c > @@ -1338,6 +1338,9 @@ static void rtw89_mac_send_rpwm(struct rtw89_dev *rtwdev, > { > u16 request; > > + if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) I think SDIO devices have the same problems as USB, so I prefer to return if "!= PCIE". > + return; > + > spin_lock_bh(&rtwdev->rpwm_lock); > > request = rtw89_read16(rtwdev, R_AX_RPWM); > diff --git a/drivers/net/wireless/realtek/rtw89/ps.c b/drivers/net/wireless/realtek/rtw89/ps.c > index ac46a7baa00d..edff9f8e1016 100644 > --- a/drivers/net/wireless/realtek/rtw89/ps.c > +++ b/drivers/net/wireless/realtek/rtw89/ps.c > @@ -56,6 +56,9 @@ static void rtw89_ps_power_mode_change_with_hci(struct rtw89_dev *rtwdev, > > static void rtw89_ps_power_mode_change(struct rtw89_dev *rtwdev, bool enter) > { > + if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) > + return; > + > if (rtwdev->chip->low_power_hci_modes & BIT(rtwdev->ps_mode) && > !test_bit(RTW89_FLAG_WOWLAN, rtwdev->flags)) > rtw89_ps_power_mode_change_with_hci(rtwdev, enter); > -- > 2.49.0