[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: Konrad Rzeszutek Wilk [mailto:konrad.wilk@xxxxxxxxxx]
> Sent: 14 November 2013 16:24
> To: Paul Durrant; Roger Pau Monne; Ian Campbell
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir (Xen.org); Jan Beulich
> Subject: RE: [Xen-devel] [PATCH] blkif: add indirect descriptors interface to
> public headers
> 
> Paul Durrant <Paul.Durrant@xxxxxxxxxx> 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?
> 
> Thr layout and size of the structure should be the same size on 32 and 64 bit
> builds.
> 

As the header stands, that is not true.

  Paul

> I don't understand what the xenstore key has to do with this?
> >
> >  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®.