On Tue, 2022-04-19 at 13:33 +0200, Toke Høiland-Jørgensen wrote: > "Grumbach, Emmanuel" <emmanuel.grumbach@xxxxxxxxx> writes: > > > On Tue, 2022-04-19 at 09:41 +0300, Grumbach, Emmanuel wrote: > > > Hi Toke, > > > > > > On Tue, 2022-04-19 at 06:24 +0000, Coelho, Luciano wrote: > > > > On Mon, 2022-04-18 at 13:36 +0200, Toke Høiland-Jørgensen wrote: > > > > > Hi Luca > > > > > > > > Hi Toke, > > > > > > > > > I've started seeing issues with my iwlwifi interface going away after > > > > > suspend. I get errors like these in dmesg: > > > > > > > > > > [104393.142264] wlan0: deauthenticating from 4c:60:de:ea:b8:58 by local choice (Reason: > > > > > 3=DEAUTH_LEAVING) > > > > > [104393.347775] iwlmei 0000:00:16.0-13280904-7792-4fcb-a1aa-5e70cbb1e865: Couldn't get ACK > > > > > from > > > > > CSME on HOST_GOES_DOWN message > > > > > [104393.347876] iwlmei 0000:00:16.0-13280904-7792-4fcb-a1aa-5e70cbb1e865: failed to send > > > > > the > > > > > SAP_ME_MSG_CHECK_SHARED_AREA message -19 > > > > > > > > > > And when the host comes back up, there is no connectivity. Restarting > > > > > iwd fixes the problem. > > > > > > > > > > This is on a 5.17.3 kernel (Arch Linux distribution kernel), and lspci > > > > > says the WiFi device is an "Intel Corporation Wi-Fi 6 AX201". > > > > > > > > > > Any ideas? :) > > > > > > > > This seems to be related to iwlmei, so I added Emmanuel to the thread. > > > > > > > > > > Can we have the full dmesg output? > > > What NIC / platform do you have? > > > Do you have AMT configured in the BIOS? > > > Did you enable wireless operation in AMT? > > > > Ah - this is AX201, ok, but I still need the platform and thefull dmesg :-) > > It's a Lenovo ThinkPad X1 Carbon Gen 9, model 20XXS3HC26; AMT is set to > "Disabled" in the BIOS. I rebooted and did a suspend/wake cycle after > connecting to the WiFi network, which produced the dmesg below. Thanks. This is a Skylake platform and we didn't have a handshake with CSME which is not enabled. We are missing a check before we shut down iwlmei. Can you check this? diff --git a/drivers/net/wireless/intel/iwlwifi/mei/main.c b/drivers/net/wireless/intel/iwlwifi/mei/main.c index 8d61044a6ed3..7b45382c813c 100644 --- a/drivers/net/wireless/intel/iwlwifi/mei/main.c +++ b/drivers/net/wireless/intel/iwlwifi/mei/main.c @@ -1923,29 +1923,33 @@ static void iwl_mei_remove(struct mei_cl_device *cldev) mutex_lock(&iwl_mei_mutex); - /* - * Tell CSME that we are going down so that it won't access the - * memory anymore, make sure this message goes through immediately. - */ - mei->csa_throttled = false; - iwl_mei_send_sap_msg(mei->cldev, - SAP_MSG_NOTIF_HOST_GOES_DOWN); + if (iwl_mei_is_connected()) + { + /* + * Tell CSME that we are going down so that it won't access the + * memory anymore, make sure this message goes through immediately. + */ + mei->csa_throttled = false; + iwl_mei_send_sap_msg(mei->cldev, + SAP_MSG_NOTIF_HOST_GOES_DOWN); - for (i = 0; i < SEND_SAP_MAX_WAIT_ITERATION; i++) { - if (!iwl_mei_host_to_me_data_pending(mei)) - break; + for (i = 0; i < SEND_SAP_MAX_WAIT_ITERATION; i++) { + if (!iwl_mei_host_to_me_data_pending(mei)) + break; - msleep(5); - } + msleep(5); + } - /* - * If we couldn't make sure that CSME saw the HOST_GOES_DOWN message, - * it means that it will probably keep reading memory that we are going - * to unmap and free, expect IOMMU error messages. - */ - if (i == SEND_SAP_MAX_WAIT_ITERATION) - dev_err(&mei->cldev->dev, - "Couldn't get ACK from CSME on HOST_GOES_DOWN message\n"); + /* + * If we couldn't make sure that CSME saw the HOST_GOES_DOWN + * message, it means that it will probably keep reading memory + * that we are going to unmap and free, expect IOMMU error + * messages. + */ + if (i == SEND_SAP_MAX_WAIT_ITERATION) + dev_err(&mei->cldev->dev, + "Couldn't get ACK from CSME on HOST_GOES_DOWN message\n"); + } mutex_unlock(&iwl_mei_mutex); Although I think it'll just fix the error print and nothing more than this