mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
PM / freezer: Abort suspend when there's a wakeup while freezing
Although try_to_freeze_tasks() stops when there's a wakeup, it doesn't return an error when it successfully freezes everything it wants to freeze. As a result, the suspend attempt can continue even after a wakeup is issued. Although the wakeup will be eventually caught later in the suspend process, kicking the can down the road is suboptimal; when there's a wakeup detected, suspend should be immediately aborted by returning an error instead. Make try_to_freeze_tasks() do just that, and also move the wakeup check above the `todo` check so that we don't miss a wakeup from a process that successfully froze. Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com> Signed-off-by: azrim <mirzaspc@gmail.com>
This commit is contained in:
parent
1a58d5951e
commit
64a6b2c346
@ -65,14 +65,14 @@ static int try_to_freeze_tasks(bool user_only)
|
||||
todo += wq_busy;
|
||||
}
|
||||
|
||||
if (!todo || time_after(jiffies, end_time))
|
||||
break;
|
||||
|
||||
if (pm_wakeup_pending()) {
|
||||
wakeup = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!todo || time_after(jiffies, end_time))
|
||||
break;
|
||||
|
||||
/*
|
||||
* We need to retry, but first give the freezing tasks some
|
||||
* time to enter the refrigerator. Start with an initial
|
||||
@ -113,7 +113,7 @@ static int try_to_freeze_tasks(bool user_only)
|
||||
elapsed_msecs % 1000);
|
||||
}
|
||||
|
||||
return todo ? -EBUSY : 0;
|
||||
return todo || wakeup ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user