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