|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/5] xen: Add V4V implementation
>>> 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.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |