Re: [PATCH 1/2] don't start cpu main loop while there is still init work to do.

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

 



On Mon, May 04, 2009 at 11:30:58AM +0300, Avi Kivity wrote:
> Glauber Costa wrote:
>> As soon as we call kvm_init_vcpu(), we start the vcpu thread.
>> However, there is still things that has to be done, as soon
>> as the new CPUState is created. Examples include initializing the
>> apic, halting the cpu, etc.
>>
>> Without this patch, it is possible that the cpu may want to start
>> using those things, before initializing them, leading to segfaults.
>> We introduce another state variable, "initialized", meaning that
>> the cpu is already created, but not totally initialized,
>> to serialize it.
>>
>> Before this patch:
>> (qemu) cpu_set X online => segfaults ~ 80 % of the time
>> After this patch:
>> (qemu) cpu_set X online => works.
>>
>>   
>
> Is it possible to move all those things to the vcpu thread, so it  
> serializes naturally?
Everything is possible. moving everything to inside cpu_x86_init would be best,
IMHO. We have to remember qemu will have the same problem when kvm gets in there.

However, we might as well remember that cpu_x86_init creates a x86 cpu. It does not
have to be a pc cpu. So initializing apic and the like inside cpu_x86_init could break
this separability. Of course, right now we don't do anything other than pc, so we might
not care. But theorectically...

>
> I'd like to avoid vcpu ioctls from more than one thread, in case we ever  
> move to a syscall implementation.

Although I don't see exactly what's your point in here.
We're just adding a serialization points through pthreads function, not doing any ioctl from
the outside.

--
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