Freezer: Use SMP barriers
The freezer processes are dealing with multiple threads running simultaneously, and on a UP system, the memory reads/writes do not need barriers to keep things in sync. These are only needed on SMP systems, so use SMP barriers instead. Signed-off-by: Mike Frysinger <vapier@gentoo.org> Acked-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
This commit is contained in:
committed by
Rafael J. Wysocki
parent
3c43193608
commit
ee940d8dcc
@@ -17,7 +17,7 @@ static inline void frozen_process(void)
|
|||||||
{
|
{
|
||||||
if (!unlikely(current->flags & PF_NOFREEZE)) {
|
if (!unlikely(current->flags & PF_NOFREEZE)) {
|
||||||
current->flags |= PF_FROZEN;
|
current->flags |= PF_FROZEN;
|
||||||
wmb();
|
smp_wmb();
|
||||||
}
|
}
|
||||||
clear_freeze_flag(current);
|
clear_freeze_flag(current);
|
||||||
}
|
}
|
||||||
@@ -93,7 +93,7 @@ bool freeze_task(struct task_struct *p, bool sig_only)
|
|||||||
* the task as frozen and next clears its TIF_FREEZE.
|
* the task as frozen and next clears its TIF_FREEZE.
|
||||||
*/
|
*/
|
||||||
if (!freezing(p)) {
|
if (!freezing(p)) {
|
||||||
rmb();
|
smp_rmb();
|
||||||
if (frozen(p))
|
if (frozen(p))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user