[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] arm: implement hypercall continuations
On Wed, 25 Jul 2012, Ian Campbell wrote: > On Mon, 2012-07-23 at 14:32 +0100, Ian Campbell wrote: > > @@ -482,8 +494,15 @@ static void do_trap_hypercall(struct > > cpu_user_regs *regs, unsigned long iss) > > regs->r0 = call(regs->r0, regs->r1, regs->r2, regs->r3, > > regs->r4); > > > > #ifndef NDEBUG > > - /* clobber registers */ > > - regs->r1 = regs->r2 = regs->r3 = regs->r4 = regs->r12 = > > 0xDEADBEEF; > > + /* clobber non-argument registers */ > > + switch ( arm_hypercall_table[regs->r12].nr_args ) { > > + case 1: regs->r1 = 0xDEADBEEF; > > + case 2: regs->r2 = 0xDEADBEEF; > > + case 3: regs->r3 = 0xDEADBEEF; > > + case 4: regs->r4 = 0xDEADBEEF; > > + break; > > + default: BUG(); > > + } > > #endif > > } > > This actually inadvertently changes the behaviour to only clobber the > arguments which the particular hypercall does not uses, which is > contrary to the comment in arch-arm.h, which says hypercalls always > clobber all of those registers. > > However having spoken to Stefano IRL we think that actually better to > only clobber the ones which are actually used (unless PC has changed, so > continations work). i.e. to change the ABI such that: I confirm :) > diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h > index 6e0fe47..a0593e2 100644 > --- a/xen/include/public/arch-arm.h > +++ b/xen/include/public/arch-arm.h > @@ -42,8 +42,9 @@ > * > * The return value is in r0. > * > - * The hypercall will always clobber r0, r1, r2, r3, r4 and r12, > - * regardless of how many arguments the particular hypercall takes. > + * The hypercall will clobber the argument registers, except r0 which > + * is the return value, i.e. a 2 argument hypercall will clobber r1 > + * and a 4 argument hypercall will clobber r1, r2 and r3. > * > */ > > I'll do this and make the corresponding implementation change and respin > this change on top. > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |