[RFC/PATCH] Fix rtas_ibm_suspend_me bugs
Nathan Lynch
ntl at pobox.com
Thu Nov 8 06:19:42 EST 2007
Nathan Lynch wrote:
> (very rfc for now, no sign-off, needs more testing)
>
> There are a couple of bugs in the rtas_ibm_suspend_me() and
> rtas_percpu_suspend_me() functions:
>
> 1. rtas_ibm_suspend_me() uses on_each_cpu() to invoke
> rtas_percpu_suspend_me() via IPI:
>
> if (on_each_cpu(rtas_percpu_suspend_me, &data, 1, 0))
> ...
>
> 'data' is on the stack, and rtas_ibm_suspend_me() takes no measures to
> ensure that all instances of rtas_percpu_suspend_me() are finished
> accessing 'data' before returning. This can result in the IPI'd cpus
> accessing random stack data and getting stuck in H_JOIN.
Another possible issue is that H_JOIN requires MSR.EE to be off, but
lazy interrupt disabling could conceivably allow that constraint to be
violated if we end up doing H_JOIN on the cpu which calls on_each_cpu().
At least I think so...
More information about the Linuxppc-dev
mailing list