With unlimited pseudo-D3, we can get stuck here in the read if
the firmware never wakes up. All of our testing infrastructure
however will anyway give up after at most a minute, so there's
no value in that.
Limit this to about a minute to avoid getting stuck with the
RTNL held forever, which basically makes the machine unusable
and then we can't even understand what caused the failure.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240205211151.ca55b3a7fa8d.Id746846f187442ebc689416d2688f2bd9278c0e9@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                    size_t count, loff_t *ppos)
 {
        struct iwl_mvm *mvm = file->private_data;
+       unsigned long end = jiffies + 60 * HZ;
        u32 pme_asserted;
 
        while (true) {
 
                if (msleep_interruptible(100))
                        break;
+
+               if (time_is_before_jiffies(end)) {
+                       IWL_ERR(mvm,
+                               "ending pseudo-D3 with timeout after ~60 seconds\n");
+                       return -ETIMEDOUT;
+               }
        }
 
        return 0;