[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1/1] qemu-xen/blkif: Move read/write/barrier specific fields into a union
From: Owen Smith <owen.smith@xxxxxxxxxx> Patches qemu-xen.git, on branch dummy as part of building xen-unstable.hg Modifies the blkif ring interface by placing the request specific fields into a union in order to support additional operation types. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- hw/xen_blkif.h | 8 ++++---- hw/xen_blktap.c | 10 +++++----- hw/xen_disk.c | 14 +++++++------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/hw/xen_blkif.h b/hw/xen_blkif.h index ca3a65b..de3e103 100644 --- a/hw/xen_blkif.h +++ b/hw/xen_blkif.h @@ -78,11 +78,11 @@ static inline void blkif_get_x86_32_req(blkif_request_t *dst, blkif_x86_32_reque dst->nr_segments = src->nr_segments; dst->handle = src->handle; dst->id = src->id; - dst->sector_number = src->sector_number; + dst->u.rw.sector_number = src->sector_number; if (n > src->nr_segments) n = src->nr_segments; for (i = 0; i < n; i++) - dst->seg[i] = src->seg[i]; + dst->u.rw.seg[i] = src->seg[i]; } static inline void blkif_get_x86_64_req(blkif_request_t *dst, blkif_x86_64_request_t *src) @@ -93,11 +93,11 @@ static inline void blkif_get_x86_64_req(blkif_request_t *dst, blkif_x86_64_reque dst->nr_segments = src->nr_segments; dst->handle = src->handle; dst->id = src->id; - dst->sector_number = src->sector_number; + dst->u.rw.sector_number = src->sector_number; if (n > src->nr_segments) n = src->nr_segments; for (i = 0; i < n; i++) - dst->seg[i] = src->seg[i]; + dst->u.rw.seg[i] = src->seg[i]; } #endif /* __XEN_BLKIF_H__ */ diff --git a/hw/xen_blktap.c b/hw/xen_blktap.c index 24d10a3..ab3210a 100644 --- a/hw/xen_blktap.c +++ b/hw/xen_blktap.c @@ -383,7 +383,7 @@ static void handle_blktap_iomsg(void* private) memcpy(&blkif->pending_list[idx].req, req, sizeof(*req)); blkif->pending_list[idx].status = BLKIF_RSP_OKAY; blkif->pending_list[idx].submitting = 1; - sector_nr = req->sector_number; + sector_nr = req->u.rw.sector_number; /* Don't allow writes on readonly devices */ if ((s->flags & TD_RDONLY) && @@ -393,16 +393,16 @@ static void handle_blktap_iomsg(void* private) } for (i = start_seg; i < req->nr_segments; i++) { - nsects = req->seg[i].last_sect - - req->seg[i].first_sect + 1; + nsects = req->u.rw.seg[i].last_sect - + req->u.rw.seg[i].first_sect + 1; - if ((req->seg[i].last_sect >= page_size >> 9) || + if ((req->u.rw.seg[i].last_sect >= page_size >> 9) || (nsects <= 0)) continue; page = (uint8_t*) MMAP_VADDR(info->vstart, (unsigned long)req->id, i); - page += (req->seg[i].first_sect << SECTOR_SHIFT); + page += (req->u.rw.seg[i].first_sect << SECTOR_SHIFT); if (sector_nr >= s->size) { DPRINTF("Sector request failed:\n"); diff --git a/hw/xen_disk.c b/hw/xen_disk.c index 218f654..b427409 100644 --- a/hw/xen_disk.c +++ b/hw/xen_disk.c @@ -176,7 +176,7 @@ static int ioreq_parse(struct ioreq *ioreq) xen_be_printf(&blkdev->xendev, 3, "op %d, nr %d, handle %d, id %" PRId64 ", sector %" PRId64 "\n", ioreq->req.operation, ioreq->req.nr_segments, - ioreq->req.handle, ioreq->req.id, ioreq->req.sector_number); + ioreq->req.handle, ioreq->req.id, ioreq->req.u.rw.sector_number); switch (ioreq->req.operation) { case BLKIF_OP_READ: ioreq->prot = PROT_WRITE; /* to memory */ @@ -205,26 +205,26 @@ static int ioreq_parse(struct ioreq *ioreq) goto err; } - ioreq->start = ioreq->req.sector_number * blkdev->file_blk; + ioreq->start = ioreq->req.u.rw.sector_number * blkdev->file_blk; for (i = 0; i < ioreq->req.nr_segments; i++) { if (i == BLKIF_MAX_SEGMENTS_PER_REQUEST) { xen_be_printf(&blkdev->xendev, 0, "error: nr_segments too big\n"); goto err; } - if (ioreq->req.seg[i].first_sect > ioreq->req.seg[i].last_sect) { + if (ioreq->req.u.rw.seg[i].first_sect > ioreq->req.u.rw.seg[i].last_sect) { xen_be_printf(&blkdev->xendev, 0, "error: first > last sector\n"); goto err; } - if (ioreq->req.seg[i].last_sect * BLOCK_SIZE >= XC_PAGE_SIZE) { + if (ioreq->req.u.rw.seg[i].last_sect * BLOCK_SIZE >= XC_PAGE_SIZE) { xen_be_printf(&blkdev->xendev, 0, "error: page crossing\n"); goto err; } ioreq->domids[i] = blkdev->xendev.dom; - ioreq->refs[i] = ioreq->req.seg[i].gref; + ioreq->refs[i] = ioreq->req.u.rw.seg[i].gref; - mem = ioreq->req.seg[i].first_sect * blkdev->file_blk; - len = (ioreq->req.seg[i].last_sect - ioreq->req.seg[i].first_sect + 1) * blkdev->file_blk; + mem = ioreq->req.u.rw.seg[i].first_sect * blkdev->file_blk; + len = (ioreq->req.u.rw.seg[i].last_sect - ioreq->req.u.rw.seg[i].first_sect + 1) * blkdev->file_blk; qemu_iovec_add(&ioreq->v, (void*)mem, len); } if (ioreq->start + ioreq->v.size > blkdev->file_size) { -- 1.5.6.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |