Avi Kivity wrote: > On 06/15/2009 02:30 PM, Alexander Graf wrote: >> X86 CPUs need to have some magic happening to enable the virtualization >> extensions on them. This magic can result in unpleasant results for >> users, like blocking other VMMs from working (vmx) or using invalid TLB >> entries (svm). >> >> Currently KVM activates virtualization when the respective kernel module >> is loaded. This blocks us from autoloading KVM modules without breaking >> other VMMs. >> >> To circumvent this problem at least a bit, this patch introduces on >> demand activation of virtualization. This means, that instead >> virtualization is enabled on creation of the first virtual machine >> and disabled on destruction of the last one. >> >> So using this, KVM can be easily autoloaded, while keeping other >> hypervisors usable. >> >> +static int hardware_enable_all(void) >> +{ >> + int r = 0; >> + >> + spin_lock(&kvm_lock); >> + >> + kvm_usage_count++; >> + if (kvm_usage_count == 1) { >> + atomic_set(&hardware_enable_failed, 1); >> + on_each_cpu(hardware_enable, NULL, 1); >> + >> + if (!atomic_dec_and_test(&hardware_enable_failed)) >> + r = -EBUSY; >> + } >> > > That's a little obfuscated. I suggest atomic_set(..., p) and > atomic_read(...). Ah, I was more searching for an atomic_test :-). >> static int kvm_cpu_hotplug(struct notifier_block *notifier, >> unsigned long val, >> void *v) >> { >> int cpu = (long)v; >> >> + if (!kvm_usage_count) >> + return NOTIFY_OK; >> + >> val&= ~CPU_TASKS_FROZEN; >> switch (val) { >> case CPU_DYING: >> @@ -2513,13 +2571,15 @@ static void kvm_exit_debug(void) >> >> static int kvm_suspend(struct sys_device *dev, pm_message_t state) >> { >> - hardware_disable(NULL); >> + if (kvm_usage_count) >> + hardware_disable(NULL); >> return 0; >> } >> >> static int kvm_resume(struct sys_device *dev) >> { >> - hardware_enable(NULL); >> + if (kvm_usage_count) >> + hardware_enable(NULL); >> return 0; >> } >> >> > + > > Please tell me you tested suspend/resume with/without VMs and cpu > hotunplug/hotplug. I tested cpu hotplugging. On the last round I tested suspend/resume, but this time I couldn't because my machine can't do suspend :-(. So I'll try hard and find a machine I can test it on for the next round. Alex -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html