[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC] xen: arm: Log a warning message when a deprecated hypercall is used
On 20 January 2015 at 10:52, Ian Campbell <ian.campbell@xxxxxxxxxx> 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> > Cc: Jan Beulich <JBeulich@xxxxxxxx> > Cc: Keir Fraser <keir@xxxxxxx> > Cc: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> > Cc: Anthony PERARD <anthony.perard@xxxxxxxxxx> > --- > RFC since I'm not sure how extreme our reaction ought to be here, e.g. > I considered domain_crash() or even panic() when in a debug build. A > XENLOG_DEBUG message is about the most benign of the options. > > Jan/Keir, although this is ARM specific I'd welcome your views as > x86/REST maintainers. > > Ard, I've not actually run this -- any chance you could re-b0rk your > Tianocore image and give it a go? Hello, I have been trying not to code against a moving Xen target, so I haven't had a go with this yet. Once I go back to testing the GICv3 support, I will need to rebuild Xen and kernels etc anyway so I will give it a try (by the end of the week) -- Ard. > --- > 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 ad046e8..89cbde6 100644 > --- a/xen/arch/arm/traps.c > +++ b/xen/arch/arm/traps.c > @@ -1148,6 +1148,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 %ld\n", > + current, (unsigned long)op); > + return -ENOSYS; > +} > + > typedef register_t (*arm_hypercall_fn_t)( > register_t, register_t, register_t, register_t, register_t); > > @@ -1167,15 +1183,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) \ > + [ __HYPERVISOR_##_name ] = { \ > + .fn = (arm_hypercall_fn_t) &do_deprecated_hypercall, \ > + .nr_args = _nr_args, \ > + } > + > static arm_hypercall_t arm_hypercall_table[] = { > HYPERCALL(memory_op, 2), > HYPERCALL(domctl, 1), > HYPERCALL(sched_op, 2), > + HYPERCALL_DEPRECATED(sched_op_compat, 2), > HYPERCALL(console_io, 3), > HYPERCALL(xen_version, 2), > HYPERCALL(xsm_op, 1), > HYPERCALL(event_channel_op, 2), > + HYPERCALL_DEPRECATED(event_channel_op_compat, 1), > HYPERCALL(physdev_op, 2), > + HYPERCALL_DEPRECATED(physdev_op_compat, 1), > HYPERCALL(sysctl, 2), > HYPERCALL(hvm_op, 2), > HYPERCALL(grant_table_op, 3), > -- > 1.7.10.4 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |