wifi: iwlmei: send HOST_GOES_DOWN message even if wiamt is disabled
authorAvraham Stern <avraham.stern@intel.com>
Tue, 22 Aug 2023 07:33:17 +0000 (10:33 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 22 Aug 2023 11:19:53 +0000 (13:19 +0200)
The HOST_GOES_DOWN message should be sent even if wiamt is disabled.
Otherwise wiamt may still use the shared memory (e.g. if enabled
later) while it's no longer valid.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230822103048.2baad50eb1c3.If7b7c1dc2d6bfc6bacf7f6c72972f19714d9d973@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mei/main.c

index 908506f98242a9143d92a64a82ab8ae5bc2c40f7..27f45f5ea264ad251d42794df6c30351edc8a01e 100644 (file)
@@ -2070,33 +2070,29 @@ static void iwl_mei_remove(struct mei_cl_device *cldev)
 
        mutex_lock(&iwl_mei_mutex);
 
-       if (mei->amt_enabled) {
-               /*
-                * 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;
+       /* 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);
 
-                       msleep(20);
-               }
+       for (i = 0; i < SEND_SAP_MAX_WAIT_ITERATION; i++) {
+               if (!iwl_mei_host_to_me_data_pending(mei))
+                       break;
 
-               /*
-                * 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");
+               msleep(20);
        }
 
+       /* 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);
 
        /*