[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH xen v2] xen: arm: fully implement multicall interface.
>>> On 07.04.14 at 14:48, <ian.campbell@xxxxxxxxxx> wrote: > I'm not sure what I was smoking at the time of 5d74ad1a082e "xen: arm: > implement do_multicall_call for both 32 and 64-bit" but it is obviously > insufficient since it doesn't actually wire up the hypercall. > > Before doing so we need to make the usual adjustments for ARM and turn the > unsigned longs into xen_ulong_t. There is no difference in the resulting > structure for x86. > > There are knock on changes to the trace interface, but again they are nops > on > x86. > > For 32-bit ARM guests we require that the arguments which they pass to a > hypercall via a multicall do not use the upper bits of xen_ulong_t and kill > them if they violate this. This should ensure that no ABI surprises can be > silently lurking when running on a 32-bit hypervisor waiting to pounce when > the > same kernel is run on a 64-bit hypervisor. Killing the guest is harsh but it > will be far easier to relax the restriction if it turns out to cause > problems > than to tighten it up if we were lax to begin with. > > In the interests of clarity and always using explicitly sized types change > the > unsigned int in the hypercall arguments to a uint32_t. There is no actual > change here on any platform. > > We should consider backporting this to 4.4.1 in case a guest decides they > want > to use a multicall in common code e.g. I suggested such a thing while > reviewing a netback change recently. > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> on the non-ARM parts, with one comment on the ARM ones below. > @@ -1159,6 +1160,21 @@ static void do_trap_hypercall(struct cpu_user_regs > *regs, register_t *nr, > #endif > } > > +static void check_multicall_32bit_clean(struct multicall_entry *multi) > +{ > + int i; > + > + for ( i = 0; i < arm_hypercall_table[multi->op].nr_args; i++ ) > + { > + if ( unlikely(multi->args[i] & 0xffffffff00000000ULL) ) > + { > + printk("%pv: multicall argument %d is not 32-bit clean > %"PRIx64"\n", > + current, i, multi->args[i]); > + domain_crash_synchronous(); On x86 we actually decided quite a long while ago to try to avoid domain_crash_synchronous() whenever possible. Would domain_crash(current->domain) not work for you here? Also I think you want the loop variable to be uint32_t, in line with your changes elsewhere in this patch. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |