Heiko reported a case where a timer interrupt managed to
reference a root_domain structure that was already freed by a
concurrent hot-un-plug operation.
Solve this like the regular sched_domain stuff is also
synchronized, by adding a synchronize_sched() stmt to the free
path, this ensures that a root_domain stays present for any
atomic section that could have observed it.
Reported-by: Heiko Carstens <[email protected]>
Signed-off-by: Peter Zijlstra <[email protected]>
Acked-by: Heiko Carstens <[email protected]>
Cc: Gregory Haskins <[email protected]>
Cc: Siddha Suresh B <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
LKML-Reference: <
1258363873.26714.83.camel@laptop>
Signed-off-by: Ingo Molnar <[email protected]>
static void free_rootdomain(struct root_domain *rd)
{
+ synchronize_sched();
+
cpupri_cleanup(&rd->cpupri);
free_cpumask_var(rd->rto_mask);