[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 07/32] xen/x86: fix arch_set_info_guest for HVM guests
On Thu, 2015-07-23 at 05:29 -0600, Jan Beulich wrote: > > > > > > On 23.07.15 at 12:25, <roger.pau@xxxxxxxxxx> wrote: > > El 13/07/15 a les 16.01, Jan Beulich ha escrit: > > > > > > On 03.07.15 at 13:34, <roger.pau@xxxxxxxxxx> wrote: > > > > --- a/xen/arch/x86/domain.c > > > > +++ b/xen/arch/x86/domain.c > > > > @@ -795,6 +795,15 @@ int arch_set_info_guest( > > > > c.nat->fs_base || c.nat->gs_base_user)) ) > > > > return -EINVAL; > > > > } > > > > + else if ( is_hvm_domain(d) ) > > > > + { > > > > + if ( c(ctrlreg[0]) || c(ctrlreg[1]) || c(ctrlreg[2]) > > > > || > > > > + c(ctrlreg[3]) || c(ctrlreg[4]) || c(ctrlreg[5]) > > > > || > > > > + c(ctrlreg[6]) || c(ctrlreg[7]) || c(ldt_base) || > > > > + c(ldt_ents) || c(kernel_ss) || c(kernel_sp) || > > > > + c(gdt_ents) ) > > > > + return -EINVAL; > > > > + } > > > > > > In addition to what Andrew said - is the use of c() here really > > > correct > > > considering > > > > > > compat = is_pv_32bit_domain(d); > > > > > > #define c(fld) (compat ? (c.cmp->fld) : (c.nat->fld)) > > > > > > near the beginning of the function? > > > > I've been thinking about this. Since HVM vCPUs are always started > > in > > 32bit mode, I would ideally like to use the > > vcpu_guest_context_x86_32_t > > struct to set the vCPU context. This means that for HVM guests > > "compat" > > should always be true. > > > > The problem is that inside of the guest there's no notion of > > vcpu_guest_context_x86_32_t or vcpu_guest_context_x86_64_t, there's > > only > > vcpu_guest_context, which defaults to the native bitness of the > > guest. > > So if your guest is running in 64bit mode vcpu_guest_context is > > aliased > > to vcpu_guest_context_x86_64_t by default. > > > > TBH I'm not sure about the best way to solve this. Should > > vcpu_guest_context_x86_32_t and vcpu_guest_context_x86_64_t be > > exposed > > to the guest like it's done for the tools? > > Why? We're in arch_set_info_guest(), which is unreachable for a > HVM guest on itself. Or is this in preparation of allowing HVM > guests to use VCPUOP_initialise? In that case, exposing might be > an option, but remember that the compat mode layout even today > is used only for PV guests. So I'd rather avoid exposing both > layouts to guests, and do translation instead inside the hypervisor. On ARM we deliberately arranged that the vcpu_guest_context was the same for both arm32 and arm64. Moving to PVH seems like an ideal opportunity to do something similar for x86, if not by standardising on the x86_64 layout then by declaring a new struct which can encompass both and declaring the old ones PV legacy. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |