[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: fix qdisk BLKIF_OP_DISCARD for 32/64 word size mix
> -----Original Message----- > From: Xen-devel [mailto:xen-devel-bounces@xxxxxxxxxxxxx] On Behalf Of > Juergen Gross > Sent: 16 June 2016 11:02 > To: qemu-devel@xxxxxxxxxx; xen-devel@xxxxxxxxxxxxxxxxxxx > Cc: Anthony Perard; Juergen Gross; sstabellini@xxxxxxxxxx; > kraxel@xxxxxxxxxx > Subject: [Xen-devel] [PATCH] xen: fix qdisk BLKIF_OP_DISCARD for 32/64 > word size mix > > In case the word size of the domU and qemu running the qdisk backend > differ BLKIF_OP_DISCARD will not work reliably, as the request > structure in the ring have different layouts for different word size. > > Correct this by copying the request structure in case of different > word size element by element in the BLKIF_OP_DISCARD case, too. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Would it not be better to re-import the canonical blkif header as a whole rather than cherry-picking like this? You'd need to post-process to maintain style and possibly change some names for compatibility etc. but probably nothing beyond what indent and a simple [s]ed script can do. I did broadly the same thing to re-import the netif header into Linux recently. Paul > --- > hw/block/xen_blkif.h | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) > > diff --git a/hw/block/xen_blkif.h b/hw/block/xen_blkif.h > index e3b133b..969112f 100644 > --- a/hw/block/xen_blkif.h > +++ b/hw/block/xen_blkif.h > @@ -26,6 +26,14 @@ struct blkif_x86_32_request { > blkif_sector_t sector_number;/* start sector idx on disk (r/w only) > */ > struct blkif_request_segment > seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; > }; > +struct blkif_x86_32_request_discard { > + uint8_t operation; /* BLKIF_OP_DISCARD */ > + uint8_t flag; /* nr_segments in request struct */ > + blkif_vdev_t handle; /* only for read/write requests */ > + uint64_t id; /* private guest value, echoed in resp */ > + blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ > + uint64_t nr_sectors; /* # of contiguous sectors to discard */ > +}; > struct blkif_x86_32_response { > uint64_t id; /* copied from request */ > uint8_t operation; /* copied from request */ > @@ -44,6 +52,14 @@ struct blkif_x86_64_request { > blkif_sector_t sector_number;/* start sector idx on disk (r/w only) > */ > struct blkif_request_segment > seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; > }; > +struct blkif_x86_64_request_discard { > + uint8_t operation; /* BLKIF_OP_DISCARD */ > + uint8_t flag; /* nr_segments in request struct */ > + blkif_vdev_t handle; /* only for read/write requests */ > + uint64_t __attribute__((__aligned__(8))) id; > + blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ > + uint64_t nr_sectors; /* # of contiguous sectors to discard */ > +}; > struct blkif_x86_64_response { > uint64_t __attribute__((__aligned__(8))) id; > uint8_t operation; /* copied from request */ > @@ -82,7 +98,7 @@ static inline void blkif_get_x86_32_req(blkif_request_t > *dst, blkif_x86_32_reque > /* Prevent the compiler from using src->... instead. */ > barrier(); > if (dst->operation == BLKIF_OP_DISCARD) { > - struct blkif_request_discard *s = (void *)src; > + struct blkif_x86_32_request_discard *s = (void *)src; > struct blkif_request_discard *d = (void *)dst; > d->nr_sectors = s->nr_sectors; > return; > @@ -105,7 +121,7 @@ static inline void > blkif_get_x86_64_req(blkif_request_t *dst, blkif_x86_64_reque > /* Prevent the compiler from using src->... instead. */ > barrier(); > if (dst->operation == BLKIF_OP_DISCARD) { > - struct blkif_request_discard *s = (void *)src; > + struct blkif_x86_64_request_discard *s = (void *)src; > struct blkif_request_discard *d = (void *)dst; > d->nr_sectors = s->nr_sectors; > return; > -- > 2.6.6 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |