[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2] xen: arm: Log a warning message when a deprecated hypercall is used



On Fri, 2015-06-26 at 16:43 +0200, Julien Grall wrote:
> Hi Ian,
> 
> On 26/06/2015 13:39, Ian Campbell wrote:
> > A few folks have been caught out by OSes which call e.g.
> > HYPERVISOR_event_channel_op_compat which has been deprecated since
> > 3.2.2 (i.e. long before Xen on ARM). Existing x86 code can still
> > safely and quietly using those calls, waiting for an unsuspecting ARM
> > porter to turn up and trip over it. This turns out to be rather
> > perplexing when it happens, since it can be obscured e.g. by various
> > conditionals like __XEN_INTERFACE_VERSION__ what is actually being
> > called.
> >
> > Note that I'm making a distinction here between hypercalls which are
> > simply not used/implemented on arm (yet) and those which were
> > deprecated and replaced by a newer variant prior to Xen on ARM even
> > being invented.  The latter will never be implemented on ARM and have
> > non-deprecated aliases leading to confusion so those are the ones for
> > which a warning is useful.
> >
> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> > Tested-by: Ard Biesheuvel <ard@xxxxxxxxxx>
> > Cc: Jan Beulich <JBeulich@xxxxxxxx>
> > Cc: Keir Fraser <keir@xxxxxxx>
> > Cc: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx>
> > Cc: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> > ---
> > v2:
> >     - Use correct format code (I didn't yet shave the yakk of providing
> >       PRIxREG et al).
> >     - Settle on just a debug message for now.
> >
> > Ard tested the last version, but this one is unchanged enough that
> > I've retained it.
> > ---
> >   xen/arch/arm/traps.c |   30 ++++++++++++++++++++++++++++++
> >   1 file changed, 30 insertions(+)
> >
> > diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> > index 258d4c5..06fb40f 100644
> > --- a/xen/arch/arm/traps.c
> > +++ b/xen/arch/arm/traps.c
> > @@ -1171,6 +1171,22 @@ die:
> >   }
> >   #endif
> >
> > +static register_t do_deprecated_hypercall(void)
> > +{
> > +    struct cpu_user_regs *regs = guest_cpu_user_regs();
> > +    const register_t op =
> > +#ifdef CONFIG_ARM_64
> > +        !is_32bit_domain(current->domain) ?
> > +            regs->x16
> > +        :
> > +#endif
> > +            regs->r12;
> > +
> > +    gdprintk(XENLOG_DEBUG, "%pv: deprecated hypercall %lu\n",
> > +             current, (unsigned long)op);
> > +    return -ENOSYS;
> > +}
> > +
> >   typedef register_t (*arm_hypercall_fn_t)(
> >       register_t, register_t, register_t, register_t, register_t);
> >
> > @@ -1190,15 +1206,29 @@ typedef struct {
> >           .fn = (arm_hypercall_fn_t) &do_arm_ ## _name,                \
> >           .nr_args = _nr_args,                                         \
> >       }
> > +/*
> > + * Only use this for hypercalls which were deprecated (i.e. replaced
> > + * by something else) before Xen on ARM was created, i.e. *not* for
> > + * hypercalls which are simply not yet used on ARM.
> > + */
> > +#define HYPERCALL_DEPRECATED(_name, _nr_args)                   \
> 
> I guess the parameter __nr_args is just here for completeness?

It goes into the hypercall table and is used to clobber the arguments in
debug mode, just like for a non-deprecated hypercall.

>  If so:
> 
> Reviewed-by: Julien Grall <julien.grall@xxxxxxxxxx>
> 
> Regards,
> 



_______________________________________________
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®.