KVM: Avoid calling smp_call_function_single() with interrupts disabled
authorAvi Kivity <avi@qumranet.com>
Sun, 19 Aug 2007 12:57:26 +0000 (15:57 +0300)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sun, 19 Aug 2007 17:13:49 +0000 (10:13 -0700)
When taking a cpu down, we need to hardware_disable() it.
Unfortunately, the CPU_DYING notifier is called with interrupts
disabled, which means we can't use smp_call_function_single().

Fortunately, the CPU_DYING notifier is always called on the dying cpu,
so we don't need to use the function at all and can simply call
hardware_disable() directly.

Tested-by: Paolo Ornati <ornati@fastwebnet.it>
Signed-off-by: Avi Kivity <avi@qumranet.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/kvm/kvm_main.c

index 96856097d15bb9f2cb2b897c87d6a25a6d9248ea..cd0557954e50ef3614c03c334b38f06104ca0551 100644 (file)
@@ -2974,6 +2974,10 @@ static int kvm_cpu_hotplug(struct notifier_block *notifier, unsigned long val,
        switch (val) {
        case CPU_DYING:
        case CPU_DYING_FROZEN:
+               printk(KERN_INFO "kvm: disabling virtualization on CPU%d\n",
+                      cpu);
+               hardware_disable(NULL);
+               break;
        case CPU_UP_CANCELED:
        case CPU_UP_CANCELED_FROZEN:
                printk(KERN_INFO "kvm: disabling virtualization on CPU%d\n",