[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 0/6] ARM hypercall ABI: 64 bit ready
On Tue, 16 Oct 2012, Ian Campbell wrote: > On Thu, 2012-08-16 at 15:48 +0100, Stefano Stabellini wrote: > > In this version of the patch series I have introduced conversion macros > > to convert a XEN_GUEST_HANDLE_PARAM into a XEN_GUEST_HANDLE a vice > > versa. Most of the problematic cases come from xen/arch/x86 code, in > > order to spot them I wrote a simple debug patch that change the > > definition of XEN_GUEST_HANDLE_PARAM to be different from > > XEN_GUEST_HANDLE on x86 too. I am attaching the debug patch to this > > email. > > This (quoted below) seems like a useful patch from the PoV of catching > these sorts of things early on x86 before they break ARM. > > It doesn't seem like it should have any impact on the generated code, > should we perhaps apply it? Nope, it shouldn't have any impact. Having it in the tree would be a clear improvement! > I needed the addition of the following to actually make it work though. > > diff --git a/xen/include/asm-x86/guest_access.h > b/xen/include/asm-x86/guest_acce > index ca700c9..33b4afd 100644 > --- a/xen/include/asm-x86/guest_access.h > +++ b/xen/include/asm-x86/guest_access.h > @@ -54,22 +54,24 @@ > > /* Cast a XEN_GUEST_HANDLE to XEN_GUEST_HANDLE_PARAM */ > #define guest_handle_to_param(hnd, type) ({ \ > + typeof((hnd).p) _x = (hnd).p; \ > + XEN_GUEST_HANDLE_PARAM(type) _y = { _x }; \ > /* type checking: make sure that the pointers inside \ > * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ > * the same type, then return hnd */ \ > - (void)((typeof(&(hnd).p)) 0 == \ > - (typeof(&((XEN_GUEST_HANDLE_PARAM(type)) {}).p)) 0); \ > - (hnd); \ > + (void)(&_x == &_y.p); \ > + _y; \ > }) > > /* Cast a XEN_GUEST_HANDLE_PARAM to XEN_GUEST_HANDLE */ > -#define guest_handle_from_param(hnd, type) ({ \ > - /* type checking: make sure that the pointers inside \ > - * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ > - * the same type, then return hnd */ \ > - (void)((typeof(&(hnd).p)) 0 == \ > - (typeof(&((XEN_GUEST_HANDLE_PARAM(type)) {}).p)) 0); \ > - (hnd); \ > +#define guest_handle_from_param(hnd, type) ({ \ > + typeof((hnd).p) _x = (hnd).p; \ > + XEN_GUEST_HANDLE(type) _y = { _x }; \ > + /* type checking: make sure that the pointers inside \ > + * XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAM are of \ > + * the same type, then return hnd */ \ > + (void)(&_x == &_y.p); \ > + _y; \ > }) > > #define guest_handle_for_field(hnd, type, fld) \ I would argue that these changes are the right thing to do anyway. The original code is unreadable. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |