|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/5] xen: Add V4V implementation
On 29 June 2012 11:36, Jan Beulich <JBeulich@xxxxxxxx> wrote:
>>>> On 29.06.12 at 12:03, Jean Guyader <jean.guyader@xxxxxxxxx> wrote:
>> On 29 June 2012 09:33, Jan Beulich <JBeulich@xxxxxxxx> wrote:
>>>>>> On 28.06.12 at 18:26, Jean Guyader <jean.guyader@xxxxxxxxxx> wrote:
>>>> +typedef struct v4v_ring_id
>>>> +{
>>>> + struct v4v_addr addr;
>>>> + domid_t partner;
>>>> +} V4V_PACKED v4v_ring_id_t;
>>>> +
>>
>> This structure is really the one that cause trouble. domid_t is 16b
>> and v4v_addr_t is used
>> inside v4v_ring_t. I would like the structure to remind as close as we
>> can from the original version
>> as we already versions in the field. Having explicit padding will make
>> all the structures different
>> which will make much harder to write a driver that will support the
>> two versions of the API.
>
> Oh, I see, "partner" would end up on a different offset if the
> packed attribute was removed from v4v_addr_t. But that
> could still be solved by making this type a union:
>
> typedef union v4v_ring_id
> {
> struct v4v_addr addr;
> struct {
> uint32_t port;
> domid_t domain;
> domid_t partner;
> } full;
> } v4v_ring_id_t;
>
> That would guarantee binary compatibility. And you could even
> achieve source compatibility for gcc users by making the naming
> of the second structure conditional upon __GNUC__ being
> undefined (or adding a second instance of the same, just
> unnamed structure within a respective #ifdef - that would make
> it possible to write code that can be compiled by both gcc and
> non-gcc, yet existing gcc-only code would need changing).
>
>> Also most all the consumer of those headers will have to rewrite the
>> structure anyway, for instance
>> the Linux kernel have it's own naming convention, macros definitions
>> which are different, etc..
>
> Such can usually be done via scripts, so having a fully defined
> public header is still worthwhile.
>
Hi,
I've been working on this and it work for most of it apart from one case.
Let's take this structure:
struct a
{
uint64_t a;
uint32_t b;
uint16_t c;
uint16_t d;
uint32_t e;
uint32_t f;
uint32_t g;
uint8_t h[32];
uint8_t q[0];
};
On 32b with and without packing sizeof the struct a is 60 but on 64b the size of
the struct a is 64 without packing and 60 with packing.
However offset of q is 60 is all the case below.
One option would be to replace in the code sizeof "struct q" with
offset of "q" be
I think there is probably something better that could be done.
Thanks,
Jean
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |