|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.6] xen/public: arm: Use __typeof__ rather than typeof
>>> On 23.10.15 at 16:55, <ian.campbell@xxxxxxxxxx> wrote:
> On Fri, 2015-10-23 at 15:44 +0100, Julien Grall wrote:
>> #define set_xen_guest_handle_raw(hnd, val) \
>> do { if ( sizeof(hnd) == 8 ) *(uint64_t *)&(hnd) = 0; \
>> (hnd).p = val; \
>> } while ( 0 )
>
> This evaluates hnd twice, which I assumed we wanted to avoid.
Hmm, that's true. We've got a couple of __GNUC__ dependencies
in the headers already - perhaps this is a reason to add one more
(and then also mirror the gcc alternative to x86), keeping the use
of __typeof__() in that case, thus ...
> But if that is OK for x86 in this situation then there is no harm doing it
> on ARM too[0].
... eliminating the need for [0] perhaps entirely. (I also note val
isn't properly parenthesized.)
> But in that case I think we would just do
> (hnd).q = val ; (hnd).p = val
> rather than messing with &, casts and *.
If you're sure that val always has the upper 32 bits clear...
> I think x86 does it that way because .q doesn't exist in the
> __guest_handle_foo, only the __guest_handle_64_foo, but it exists in both
> on ARM.
Right.
Jan
> We also know that sizeof(hnd) == 8 always on both arm subarches. Maybe it
> would be worth checking sizeof(hnd.p) == 8 (i.e. whether the real type
> completely fills the padding container), I don't know.
>
> Ian.
>
> [0] But maybe do check for arm specific set_guest_handle(foo++, bar) type
> constructs which slipped in...
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |