On Wed, Apr 13, 2011 at 16:58, Rafael J. Wysocki wrote: > On Wednesday, April 13, 2011, Mike Frysinger wrote: >> when we suspend/resume Blackfin SMP systems, we notice that the >> freezer code runs on multiple cores. Âthis is of course what you want >> -- freeze processes in parallel. Âhowever, the code only uses non-smp >> based barriers which causes us problems ... our cores need software >> support to keep caches in sync, so our smp barriers do just that. Âbut >> the non-smp barriers do not, and so the frozen/thawed processes >> randomly get stuck in the wrong task state. >> >> thinking about it, shouldnt the freezer code be using smp barriers ? > > Yes, it should, but rmb() and wmb() are supposed to be SMP barriers. > > Or do you mean something different? then what's the diff between smp_rmb() and rmb() ? this is what i'm proposing: --- a/kernel/freezer.c +++ b/kernel/freezer.c @@ -17,7 +17,7 @@ static inline void frozen_process(void) { if (!unlikely(current->flags & PF_NOFREEZE)) { current->flags |= PF_FROZEN; - wmb(); + smp_wmb(); } 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. */ if (!freezing(p)) { - rmb(); + smp_rmb(); if (frozen(p)) return false; -mike _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm