x86: warn if arch_flush_lazy_mmu_cpu is called in preemptible context
authorThomas Gleixner <tglx@linutronix.de>
Thu, 12 Feb 2009 20:30:48 +0000 (21:30 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 12 Feb 2009 22:11:58 +0000 (23:11 +0100)
Impact: Catch cases where lazy MMU state is active in a preemtible context

arch_flush_lazy_mmu_cpu() has been changed to disable preemption so
the checks in enter/leave will never trigger. Put the preemtible()
check into arch_flush_lazy_mmu_cpu() to catch such cases.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/paravirt.c

index dcba6c567a2a349af10ea7291d30cb7e368e1334..c6520a4e85d4fe3479070d03867bfd65e50dd081 100644 (file)
@@ -273,6 +273,7 @@ void arch_flush_lazy_mmu_mode(void)
        preempt_disable();
 
        if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU) {
+               WARN_ON(preempt_count() == 1);
                arch_leave_lazy_mmu_mode();
                arch_enter_lazy_mmu_mode();
        }
@@ -285,6 +286,7 @@ void arch_flush_lazy_cpu_mode(void)
        preempt_disable();
 
        if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_CPU) {
+               WARN_ON(preempt_count() == 1);
                arch_leave_lazy_cpu_mode();
                arch_enter_lazy_cpu_mode();
        }