Messages in this thread Patch in this message |  | | From | Mike Frysinger <> | Date | Wed, 13 Apr 2011 17:02:45 -0400 | Subject | Re: freezer: should barriers be smp ? |
| |
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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |