On Tue, May 17, 2011, Avi Kivity wrote about "Re: [PATCH 08/31] nVMX: Fix local_vcpus_link handling": > >(local_vcpus_link must be >manipulated with interrupts disabled, BTW). Thanks, I'll look into that. > >What about having a per-CPU VMCS list instead of per-CPU vcpu list? > Perhaps even easier (avoids duplication): > > struct raw_vmcs { > u32 revision_id; > u32 abort; > char data[0]; > }; > > struct vmcs { > struct raw_vmcs *raw_vmcs; > struct list_head local_vmcs_link; > }; > > struct vcpu_vmx { > ... > struct vmcs *vmcs; /* often points at l1_vmcs */ > struct vmcs l1_vmcs; > ... > }; > > static DEFINE_PER_CPU(struct list_head, vmcss_on_cpu); This is an interesting suggestion. My initial plan was to do something similar to this, and I agree it could have been nicer code, but I had to change it after bumping into too many obstacles. For example, currently, vmclear_local_vcpus() not only VMCLEARs the vmcss, it also sets vmx->vcpu.cpu = -1, xmv->launched=0 for the vcpus holding these VMCSs. If we had only a list of VMCSs, how can we mark the vcpus as being not currently loaded (cpu=-1)? -- Nadav Har'El | Tuesday, May 17 2011, 13 Iyyar 5771 nyh@xxxxxxxxxxxxxxxxxxx |----------------------------------------- Phone +972-523-790466, ICQ 13349191 |I'm a peripheral visionary: I see into http://nadav.harel.org.il |the future, but mostly off to the sides. -- 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