[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.