[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 4/5] arm: use r12 to pass the hypercall number
On Thu, 23 Feb 2012, Ian Campbell wrote: > On Thu, 2012-02-23 at 18:21 +0000, Stefano Stabellini wrote: > > Use r12 to pass the hypercall number and r0-r4 for the hypercall > > arguments as usual. > > Strictly speaking "as usual" in the ARM calling convention would be args > in r0-r3 and the fifth (and subsequent) arguments on the stack. However > we are free to implement our own convention for hypercalls and avoiding > arguments on the stack is a good idea. Yes, you are right. I meant "as before" here. > Please could you add a comment describing the interface. X86 documents > this in xen/include/public/arch-x86/xen-x86_{32,64}.h so I suppose > xen/include/public/arch-arm.h is appropriate Good idea. > We should define precisely which registers are clobbered by a hypercall. > X86 clobbers exactly those arguments registers which are used for that > hypercall but perhaps we can simplify and always clobber r0..r4,r12 > (plus any other caller saved registers in the usual calling convention, > just for sanity). r0..r3,r12 are already clobbered in the normal calling > convention so the only difference would be clobbering r4 which is > normally callee saved (but is also not normally used to pass arguments). > > We should explicitly clobber whatever we say we will too in a debug > build. OK > I've trimmed the quote already so I'll mention it here instead: > XEN_HYPERCALL_TAG should be defined in the public interface too not in > the private asm headers. Sure > > @@ -409,16 +408,17 @@ static void do_trap_hypercall(struct cpu_user_regs > > *regs, unsigned long iss) > > { > > local_irq_enable(); > > > > - regs->r0 = arm_hypercall_table[iss](regs->r0, > > + if ( iss != XEN_HYPERCALL_TAG ) { > > + printk("%s %d: received an alien hypercall iss=%lx\n", __func__ , > > + __LINE__ , iss); > > regs->r0 = -EINVAL; > > here I think. yes, we need that > > + return; > > + } > > + > > + regs->r0 = arm_hypercall_table[regs->r12](regs->r0, > > It's an existing issue but we need to check that > arm_hypercall_table[regs->r12] is non-NULL here and return -ENOSYS (by > setting r0) if it is. Yes, you are right. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |