[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] blkif: add indirect descriptors interface to public headers



> -----Original Message-----
> From: Roger Pau Monnà [mailto:roger.pau@xxxxxxxxxx]
> Sent: 14 November 2013 10:52
> To: Paul Durrant; Ian Campbell
> Cc: Konrad Rzeszutek Wilk; xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir (Xen.org);
> Jan Beulich
> Subject: Re: [Xen-devel] [PATCH] blkif: add indirect descriptors interface to
> public headers
> 
> On 14/11/13 11:38, Paul Durrant wrote:
> >> -----Original Message-----
> >> From: Roger Pau Monnà [mailto:roger.pau@xxxxxxxxxx]
> >> Sent: 14 November 2013 10:27
> >> To: Paul Durrant; Ian Campbell
> >> Cc: Konrad Rzeszutek Wilk; xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir
> (Xen.org);
> >> Jan Beulich
> >> Subject: Re: [Xen-devel] [PATCH] blkif: add indirect descriptors interface
> to
> >> public headers
> >>
> >> On 14/11/13 11:14, Paul Durrant wrote:
> >>>> -----Original Message-----
> >>>> From: Roger Pau Monnà [mailto:roger.pau@xxxxxxxxxx]
> >>>> Sent: 14 November 2013 10:06
> >>>> To: Paul Durrant; Ian Campbell
> >>>> Cc: Konrad Rzeszutek Wilk; xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir
> >> (Xen.org);
> >>>> Jan Beulich
> >>>> Subject: Re: [Xen-devel] [PATCH] blkif: add indirect descriptors
> interface
> >> to
> >>>> public headers
> >>>>
> >>>> On 13/11/13 12:24, Paul Durrant wrote:
> >>>>>> -----Original Message-----
> >>>>>> From: Ian Campbell
> >>>>>> Sent: 13 November 2013 11:11
> >>>>>> To: Paul Durrant
> >>>>>> Cc: Konrad Rzeszutek Wilk; xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir
> >>>> (Xen.org);
> >>>>>> Jan Beulich; Roger Pau Monne
> >>>>>> Subject: Re: [Xen-devel] [PATCH] blkif: add indirect descriptors
> >> interface
> >>>> to
> >>>>>> public headers
> >>>>>>
> >>>>>> On Wed, 2013-11-13 at 11:07 +0000, Paul Durrant wrote:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Ian Campbell
> >>>>>>>> Sent: 13 November 2013 09:27
> >>>>>>>> To: Paul Durrant
> >>>>>>>> Cc: Konrad Rzeszutek Wilk; xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir
> >>>>>> (Xen.org);
> >>>>>>>> Jan Beulich; Roger Pau Monne
> >>>>>>>> Subject: Re: [Xen-devel] [PATCH] blkif: add indirect descriptors
> >>>> interface
> >>>>>> to
> >>>>>>>> public headers
> >>>>>>>>
> >>>>>>>> On Tue, 2013-11-12 at 15:16 +0000, Paul Durrant wrote:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Ian Campbell
> >>>>>>>>>> Sent: 12 November 2013 14:29
> >>>>>>>>>> To: Konrad Rzeszutek Wilk
> >>>>>>>>>> Cc: Paul Durrant; xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir
> (Xen.org);
> >> Jan
> >>>>>>>> Beulich;
> >>>>>>>>>> Roger Pau Monne
> >>>>>>>>>> Subject: Re: [Xen-devel] [PATCH] blkif: add indirect descriptors
> >>>>>> interface
> >>>>>>>> to
> >>>>>>>>>> public headers
> >>>>>>>>>>
> >>>>>>>>>> On Tue, 2013-11-12 at 09:22 -0500, Konrad Rzeszutek Wilk
> wrote:
> >>>>>>>>>>
> >>>>>>>>>>>>> +struct blkif_request_indirect {
> >>>>>>>>>>>>> +    uint8_t        operation;    /* BLKIF_OP_INDIRECT
> */
> >>>>>>>>>>>>> +    uint8_t        indirect_op;  /* BLKIF_OP_{READ/WRITE}
> >>>>>> */
> >>>>>>>>>>>>> +    uint16_t       nr_segments;  /* number of segments
> >>>>>> */
> >>>>>>>>>>>>
> >>>>>>>>>>>> This is going to be a problem. What alignment boundary are
> you
> >>>>>>>>>>> expecting the next field to start on? AFAIK 32-bit gcc will 4-
> byte
> >>>>>>>>>>> align it, 32-bit MSVC will 8-byte align it.
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Oh no. I thought that the Linux one had this set correctly, ah it
> >> did:
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> struct blkif_request_indirect {
> >>>>>>>>>>> [...]
> >>>>>>>>>>> } __attribute__((__packed__));
> >>>>>>>>>>
> >>>>>>>>>> That attribute packed isn't allowed in the public interface
> headers.
> >>>>>>>>>>
> >>>>>>>>>> Since compilers do differ in their packing, and guests may be
> using
> >>>>>>>>>> various pragmas, it might be useful to write down that for x86
> >> these
> >>>>>>>>>> headers are to be treated as using the <WHATEVER> ABI (gcc?
> >> Some
> >>>>>> Intel
> >>>>>>>>>> standard?).
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Can we go for types aligned on their size then rather than gcc
> >>>>>> brokenness.
> >>>>>>>>
> >>>>>>>> We should go for some existing well defined ABI spec not make
> up
> >> our
> >>>>>>>> own.
> >>>>>>>>
> >>>>>>>> In effect the x86 ABI has historically been de-facto specified as the
> >>>>>>>> gcc ABI.
> >>>>>>>>
> >>>>>>>
> >>>>>>> Since the linux headers seem to hardcode the x64 ABI for this
> struct,
> >>>>>>> do we need to support an x86 variant? After all there's no
> backwards
> >>>>>>> compatibility issue here.
> >>>>>>
> >>>>>> I am talking about the general case for all xen/include/public
> headers,
> >>>>>> not these structs specifically.
> >>>>>>
> >>>>>
> >>>>> Ah ok. Then yes I guess the x86 gcc ABI has to be the default.
> >>>>>
> >>>>>> There should be a well specified default for the struct layout. If
> >>>>>> particular structs diverge from this (and being consistent across 32-
> >>>>>> and 64-bit is a good reason to do so) then suitable padding and
> perhaps
> >>>>>> #ifdefs might be needed.
> >>>>>>
> >>>>>
> >>>>> Yes, agreed. This patch therefore needs to be fixed.
> >>>>
> >>>> I don't understand why or how this patch should be fixed, the ABI of
> >>>> this new structures is defined by the way gcc generates it's layout
> >>>> (different on i386 or amd64), it's not pretty, but it's how the blkif
> >>>> protocol is defined. Doing something different now just for struct
> >>>> blkif_request_indirect seems even worse.
> >>>
> >>> I don't see where it's defined that the protocol always uses the gcc ABI?
> >> And if that's the case then why the need for
> __attribute__((__packed__)) all
> >> over the linux header?
> >>
> >> AFAIK there's no need for all the __attribute__((__packed__)) in Linux
> >> blkif.h header, but it's Linux copy of the header, so it's arguably that
> >> Linux can define those as wanted, as long as they have the same layout
> >> as the one generated by a pristine copy of blkif.h from the Xen tree (as
> >> it is now).
> >>
> >> __attribute__((__packed__)) should only be needed in blkback in order
> to
> >> define the i386 and amd64 version of those structures and handle
> >> correctly requests from an i386 DomU on an amd64 Dom0 for example.
> >
> > Yes, agreed. So can we have a comment in the patch stating the ABI and
> the fact that it's different in x86 and x64 builds and hence frontends need to
> be careful about correctly setting the xenstore key?
> 
> There's already a comment describing the "protocol" xenstore node, and
> the possible values are in protocols.h. Adding a comment describing that
> the layout of this structures should match the gcc ABI should probably
> be set in a more generic header (like xen.h?), since I guess there might
> be other cases for this.
> 

I agree that it's a broader issue, but I think the comments should go in the 
individual protocol headers as that's where developers are going to look when 
they are attempting to implement frontends or backends.

> From my POV, if we are going to add a comment regarding the ABI, it
> should be done in a different patch, since it's not related to the
> inclusion of indirect descriptors, it has always been there.

Ok, but it would be good if at least blkif were updated. Deferring it will 
probably mean it's just forgotten (again).

  Paul
  
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.