Message ID | 20200617213415.22417-2-dmitry.fomichev@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/block/nvme: Support Namespace Types and Zoned Namespace Command Set | expand |
On Wed, Jun 17, 2020 at 2:43 PM Dmitry Fomichev <dmitry.fomichev@wdc.com> wrote: > > In addition to the existing has_sg flag, a few more Boolean > NvmeRequest flags are going to be introduced in subsequent patches. > Convert "has_sg" variable to "flags" and define NvmeRequestFlags > enum for individual flag values. > > Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > hw/block/nvme.c | 8 +++----- > hw/block/nvme.h | 6 +++++- > 2 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/hw/block/nvme.c b/hw/block/nvme.c > index 1aee042d4c..3ed9f3d321 100644 > --- a/hw/block/nvme.c > +++ b/hw/block/nvme.c > @@ -350,7 +350,7 @@ static void nvme_rw_cb(void *opaque, int ret) > block_acct_failed(blk_get_stats(n->conf.blk), &req->acct); > req->status = NVME_INTERNAL_DEV_ERROR; > } > - if (req->has_sg) { > + if (req->flags & NVME_REQ_FLG_HAS_SG) { > qemu_sglist_destroy(&req->qsg); > } > nvme_enqueue_req_completion(cq, req); > @@ -359,7 +359,6 @@ static void nvme_rw_cb(void *opaque, int ret) > static uint16_t nvme_flush(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, > NvmeRequest *req) > { > - req->has_sg = false; > block_acct_start(blk_get_stats(n->conf.blk), &req->acct, 0, > BLOCK_ACCT_FLUSH); > req->aiocb = blk_aio_flush(n->conf.blk, nvme_rw_cb, req); > @@ -383,7 +382,6 @@ static uint16_t nvme_write_zeros(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, > return NVME_LBA_RANGE | NVME_DNR; > } > > - req->has_sg = false; > block_acct_start(blk_get_stats(n->conf.blk), &req->acct, 0, > BLOCK_ACCT_WRITE); > req->aiocb = blk_aio_pwrite_zeroes(n->conf.blk, offset, count, > @@ -422,14 +420,13 @@ static uint16_t nvme_rw(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, > > dma_acct_start(n->conf.blk, &req->acct, &req->qsg, acct); > if (req->qsg.nsg > 0) { > - req->has_sg = true; > + req->flags |= NVME_REQ_FLG_HAS_SG; > req->aiocb = is_write ? > dma_blk_write(n->conf.blk, &req->qsg, data_offset, BDRV_SECTOR_SIZE, > nvme_rw_cb, req) : > dma_blk_read(n->conf.blk, &req->qsg, data_offset, BDRV_SECTOR_SIZE, > nvme_rw_cb, req); > } else { > - req->has_sg = false; > req->aiocb = is_write ? > blk_aio_pwritev(n->conf.blk, data_offset, &req->iov, 0, nvme_rw_cb, > req) : > @@ -917,6 +914,7 @@ static void nvme_process_sq(void *opaque) > QTAILQ_REMOVE(&sq->req_list, req, entry); > QTAILQ_INSERT_TAIL(&sq->out_req_list, req, entry); > memset(&req->cqe, 0, sizeof(req->cqe)); > + req->flags = 0; > req->cqe.cid = cmd.cid; > > status = sq->sqid ? nvme_io_cmd(n, &cmd, req) : > diff --git a/hw/block/nvme.h b/hw/block/nvme.h > index 1d30c0bca2..0460cc0e62 100644 > --- a/hw/block/nvme.h > +++ b/hw/block/nvme.h > @@ -16,11 +16,15 @@ typedef struct NvmeAsyncEvent { > NvmeAerResult result; > } NvmeAsyncEvent; > > +enum NvmeRequestFlags { > + NVME_REQ_FLG_HAS_SG = 1 << 0, > +}; > + > typedef struct NvmeRequest { > struct NvmeSQueue *sq; > BlockAIOCB *aiocb; > uint16_t status; > - bool has_sg; > + uint16_t flags; > NvmeCqe cqe; > BlockAcctCookie acct; > QEMUSGList qsg; > -- > 2.21.0 > >
On Jun 18 06:33, Dmitry Fomichev wrote: > In addition to the existing has_sg flag, a few more Boolean > NvmeRequest flags are going to be introduced in subsequent patches. > Convert "has_sg" variable to "flags" and define NvmeRequestFlags > enum for individual flag values. > > Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com> Reviewed-by: Klaus Jensen <k.jensen@samsung.com> > --- > hw/block/nvme.c | 8 +++----- > hw/block/nvme.h | 6 +++++- > 2 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/hw/block/nvme.c b/hw/block/nvme.c > index 1aee042d4c..3ed9f3d321 100644 > --- a/hw/block/nvme.c > +++ b/hw/block/nvme.c > @@ -350,7 +350,7 @@ static void nvme_rw_cb(void *opaque, int ret) > block_acct_failed(blk_get_stats(n->conf.blk), &req->acct); > req->status = NVME_INTERNAL_DEV_ERROR; > } > - if (req->has_sg) { > + if (req->flags & NVME_REQ_FLG_HAS_SG) { > qemu_sglist_destroy(&req->qsg); > } > nvme_enqueue_req_completion(cq, req); > @@ -359,7 +359,6 @@ static void nvme_rw_cb(void *opaque, int ret) > static uint16_t nvme_flush(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, > NvmeRequest *req) > { > - req->has_sg = false; > block_acct_start(blk_get_stats(n->conf.blk), &req->acct, 0, > BLOCK_ACCT_FLUSH); > req->aiocb = blk_aio_flush(n->conf.blk, nvme_rw_cb, req); > @@ -383,7 +382,6 @@ static uint16_t nvme_write_zeros(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, > return NVME_LBA_RANGE | NVME_DNR; > } > > - req->has_sg = false; > block_acct_start(blk_get_stats(n->conf.blk), &req->acct, 0, > BLOCK_ACCT_WRITE); > req->aiocb = blk_aio_pwrite_zeroes(n->conf.blk, offset, count, > @@ -422,14 +420,13 @@ static uint16_t nvme_rw(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, > > dma_acct_start(n->conf.blk, &req->acct, &req->qsg, acct); > if (req->qsg.nsg > 0) { > - req->has_sg = true; > + req->flags |= NVME_REQ_FLG_HAS_SG; > req->aiocb = is_write ? > dma_blk_write(n->conf.blk, &req->qsg, data_offset, BDRV_SECTOR_SIZE, > nvme_rw_cb, req) : > dma_blk_read(n->conf.blk, &req->qsg, data_offset, BDRV_SECTOR_SIZE, > nvme_rw_cb, req); > } else { > - req->has_sg = false; > req->aiocb = is_write ? > blk_aio_pwritev(n->conf.blk, data_offset, &req->iov, 0, nvme_rw_cb, > req) : > @@ -917,6 +914,7 @@ static void nvme_process_sq(void *opaque) > QTAILQ_REMOVE(&sq->req_list, req, entry); > QTAILQ_INSERT_TAIL(&sq->out_req_list, req, entry); > memset(&req->cqe, 0, sizeof(req->cqe)); > + req->flags = 0; > req->cqe.cid = cmd.cid; > > status = sq->sqid ? nvme_io_cmd(n, &cmd, req) : > diff --git a/hw/block/nvme.h b/hw/block/nvme.h > index 1d30c0bca2..0460cc0e62 100644 > --- a/hw/block/nvme.h > +++ b/hw/block/nvme.h > @@ -16,11 +16,15 @@ typedef struct NvmeAsyncEvent { > NvmeAerResult result; > } NvmeAsyncEvent; > > +enum NvmeRequestFlags { > + NVME_REQ_FLG_HAS_SG = 1 << 0, > +}; > + > typedef struct NvmeRequest { > struct NvmeSQueue *sq; > BlockAIOCB *aiocb; > uint16_t status; > - bool has_sg; > + uint16_t flags; > NvmeCqe cqe; > BlockAcctCookie acct; > QEMUSGList qsg; > -- > 2.21.0 > >
diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 1aee042d4c..3ed9f3d321 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -350,7 +350,7 @@ static void nvme_rw_cb(void *opaque, int ret) block_acct_failed(blk_get_stats(n->conf.blk), &req->acct); req->status = NVME_INTERNAL_DEV_ERROR; } - if (req->has_sg) { + if (req->flags & NVME_REQ_FLG_HAS_SG) { qemu_sglist_destroy(&req->qsg); } nvme_enqueue_req_completion(cq, req); @@ -359,7 +359,6 @@ static void nvme_rw_cb(void *opaque, int ret) static uint16_t nvme_flush(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, NvmeRequest *req) { - req->has_sg = false; block_acct_start(blk_get_stats(n->conf.blk), &req->acct, 0, BLOCK_ACCT_FLUSH); req->aiocb = blk_aio_flush(n->conf.blk, nvme_rw_cb, req); @@ -383,7 +382,6 @@ static uint16_t nvme_write_zeros(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, return NVME_LBA_RANGE | NVME_DNR; } - req->has_sg = false; block_acct_start(blk_get_stats(n->conf.blk), &req->acct, 0, BLOCK_ACCT_WRITE); req->aiocb = blk_aio_pwrite_zeroes(n->conf.blk, offset, count, @@ -422,14 +420,13 @@ static uint16_t nvme_rw(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, dma_acct_start(n->conf.blk, &req->acct, &req->qsg, acct); if (req->qsg.nsg > 0) { - req->has_sg = true; + req->flags |= NVME_REQ_FLG_HAS_SG; req->aiocb = is_write ? dma_blk_write(n->conf.blk, &req->qsg, data_offset, BDRV_SECTOR_SIZE, nvme_rw_cb, req) : dma_blk_read(n->conf.blk, &req->qsg, data_offset, BDRV_SECTOR_SIZE, nvme_rw_cb, req); } else { - req->has_sg = false; req->aiocb = is_write ? blk_aio_pwritev(n->conf.blk, data_offset, &req->iov, 0, nvme_rw_cb, req) : @@ -917,6 +914,7 @@ static void nvme_process_sq(void *opaque) QTAILQ_REMOVE(&sq->req_list, req, entry); QTAILQ_INSERT_TAIL(&sq->out_req_list, req, entry); memset(&req->cqe, 0, sizeof(req->cqe)); + req->flags = 0; req->cqe.cid = cmd.cid; status = sq->sqid ? nvme_io_cmd(n, &cmd, req) : diff --git a/hw/block/nvme.h b/hw/block/nvme.h index 1d30c0bca2..0460cc0e62 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -16,11 +16,15 @@ typedef struct NvmeAsyncEvent { NvmeAerResult result; } NvmeAsyncEvent; +enum NvmeRequestFlags { + NVME_REQ_FLG_HAS_SG = 1 << 0, +}; + typedef struct NvmeRequest { struct NvmeSQueue *sq; BlockAIOCB *aiocb; uint16_t status; - bool has_sg; + uint16_t flags; NvmeCqe cqe; BlockAcctCookie acct; QEMUSGList qsg;
In addition to the existing has_sg flag, a few more Boolean NvmeRequest flags are going to be introduced in subsequent patches. Convert "has_sg" variable to "flags" and define NvmeRequestFlags enum for individual flag values. Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com> --- hw/block/nvme.c | 8 +++----- hw/block/nvme.h | 6 +++++- 2 files changed, 8 insertions(+), 6 deletions(-)