Re: [PATCH] Activate Virtualization On Demand v2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux