[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] RFC: PVH set vcpu info context in vmcs....
>>> On 16.08.13 at 04:26, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> wrote: > On Thu, 15 Aug 2013 07:31:32 +0100 > "Jan Beulich" <JBeulich@xxxxxxxx> wrote: > >> >>> On 15.08.13 at 02:25, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> >> >>> wrote: >> > On Wed, 14 Aug 2013 10:12:18 +0100 >> > "Jan Beulich" <JBeulich@xxxxxxxx> wrote: >> > >> >> >>> On 14.08.13 at 04:12, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> >> >> >>> wrote: >> >> > On Tue, 13 Aug 2013 11:56:36 +0100 >> >> > "Jan Beulich" <JBeulich@xxxxxxxx> wrote: >> >> > >> > ... >> >> >> > if ( v->vcpu_id == 0 ) >> >> >> > return 0; >> >> >> >> >> >> Bogus/pointless. >> >> > >> >> > No, we don't have anything for the boot vcpu. It's totally >> >> > coming up on the flat address space. For non boot, the vcpu is >> >> > coming up on the kernel GDT. Recall it's a PV guest (coming up >> >> > in an HVM container). >> >> >> >> No, that's the wrong perspective. You either should never get here >> >> for vCPU 0, or you should refuse this for all already initialized >> >> vCPU-s. >> > >> > Ok, i'll move the check to caller. FWIW, the vcpu->is_initialised is >> > inapplicable here because this is relevant for non-boot vcpus only. >> >> That won't make the check any better. Can you please explain in >> detail why this check is necessary, and why the ->is_initialised one >> would be wrong? > > is_initialised is marked for *each* vcpu upon it being updated, so > second pass around, things are skipped in arch_set_info_guest(). So what's the point of the of != 0 check then? The intention is for this to be a one time thing, i.e. to not be used on already initialized CPUs. > What we want here is something just for non-boot vcpu. The boot vcpu > should fields mostly null in this function since its coming up flat > with default descriptors we loaded. Hence, it will return -EINVAL as > the function is. But you still didn't explain how you would _incorrectly_ get here for the boot CPU _at all_. > The boot vcpu sets up bunch of things for other vcpus, > like gdt, per cpu data areas, etc.. and jump starts them. To jump start > secondary vcpus, its sets few things in this function. Nor did you explain why a second call, with is_initialized already set, would be valid. > If I had my way, I'd have this function as follows: > > int vmx_pvh_set_vcpu_info(struct vcpu *v, struct vcpu_guest_context *ctxtp) > { > vmx_vmcs_enter(v); > __vmwrite(GUEST_GS_BASE, ctxtp->gs_base_kernel); > vmx_vmcs_exit(v); > > return 0; > } > > I realize there are other fields in vcpu_guest_context, but at the > risk of repeating myself, they are all needed for PV, but not for PVH. > Yes, they all will need to be used for pvh save/restore, but not here where > we are just powering on a secondary vcpu. Perhaps, rename function to > something like: vmx_pvh_set_boot_secondary_vcpu_fields()? I think you're heading the completely wrong direction here. The function, just like its PV and HVM counterparts, should be generically handling both booting and restoring of a guest. And any fields documented as unused for PVH in _both_ of these scenarios should be validated to be zero (to allow eventual later use for whatever purpose). Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |