|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC v12 15/21] pvh: Set up more PV stuff in set_info_guest
>>> On 13.09.13 at 18:25, George Dunlap <george.dunlap@xxxxxxxxxxxxx> wrote:
> @@ -737,7 +737,31 @@ int arch_set_info_guest(
> if ( has_hvm_container_vcpu(v) )
> {
> hvm_set_info_guest(v);
> - goto out;
> +
> + if ( is_hvm_vcpu(v) || v->is_initialised )
> + goto out;
> +
> + /* PVH */
> + if ( c.nat->ctrlreg[1] )
> + return -EINVAL;
> +
> + ASSERT(!compat);
This lacks a pvh-32bit-fixme annotation.
> +
> + cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[3]);
> + cr3_page = get_page_from_gfn(d, cr3_gfn, NULL, P2M_ALLOC);
> +
> + v->arch.cr3 = page_to_maddr(cr3_page);
> + v->arch.hvm_vcpu.guest_cr[3] = c.nat->ctrlreg[3];
> +
> + if ( paging_mode_enabled(d) )
Is the opposite really possible? I think this ought to be an
assertion.
> +int vmx_pvh_vcpu_boot_set_info(struct vcpu *v,
> + struct vcpu_guest_context *ctxtp)
> +{
> + if ( ctxtp->ldt_base || ctxtp->ldt_ents ||
> + ctxtp->user_regs.cs || ctxtp->user_regs.ss || ctxtp->user_regs.es ||
> + ctxtp->user_regs.ds || ctxtp->user_regs.fs || ctxtp->user_regs.gs ||
> + *ctxtp->gdt_frames || ctxtp->gdt_ents ||
Don't know why I didn't spot this earlier, but the gdt_frames check
is pointless when gdt_ents is verified to be zero.
> --- a/xen/include/public/arch-x86/xen.h
> +++ b/xen/include/public/arch-x86/xen.h
> @@ -150,6 +150,10 @@ typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
> /*
> * The following is all CPU context. Note that the fpu_ctxt block is filled
>
> * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used.
> + *
> + * PVH 64bit: In the vcpu boot path, for vmcs context, only gs_base_kernel
> + * is honored. Other fields like gdt, ldt, and selectors must be
> + * zeroed. See vmx_pvh_vcpu_boot_set_info.
In the current form I hope the comment is misleading: Surely
general purpose and FPU registers get honored too?
And referring to an internal function from a public header is sort
of bogus too.
> */
> struct vcpu_guest_context {
> /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR. */
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |