[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v2 04/17] block/nvme: Drop NVMeRegs structure, directly use NvmeBa
From: |
Stefan Hajnoczi |
Subject: |
[PULL v2 04/17] block/nvme: Drop NVMeRegs structure, directly use NvmeBar |
Date: |
Mon, 5 Oct 2020 16:43:10 +0100 |
From: Philippe Mathieu-Daudé <philmd@redhat.com>
NVMeRegs only contains NvmeBar. Simplify the code by using NvmeBar
directly.
This triggers a checkpatch.pl error:
ERROR: Use of volatile is usually wrong, please add a comment
#30: FILE: block/nvme.c:691:
+ volatile NvmeBar *regs;
This is a false positive as in our case we are using I/O registers,
so the 'volatile' use is justified.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20200922083821.578519-5-philmd@redhat.com>
---
block/nvme.c | 23 +++++++++--------------
1 file changed, 9 insertions(+), 14 deletions(-)
diff --git a/block/nvme.c b/block/nvme.c
index e517c7539f..bd82990b66 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -81,11 +81,6 @@ typedef struct {
QEMUBH *completion_bh;
} NVMeQueuePair;
-/* Memory mapped registers */
-typedef volatile struct {
- NvmeBar ctrl;
-} NVMeRegs;
-
#define INDEX_ADMIN 0
#define INDEX_IO(n) (1 + n)
@@ -694,7 +689,7 @@ static int nvme_init(BlockDriverState *bs, const char
*device, int namespace,
uint64_t timeout_ms;
uint64_t deadline, now;
Error *local_err = NULL;
- NVMeRegs *regs;
+ volatile NvmeBar *regs = NULL;
qemu_co_mutex_init(&s->dma_map_lock);
qemu_co_queue_init(&s->dma_flush_queue);
@@ -722,7 +717,7 @@ static int nvme_init(BlockDriverState *bs, const char
*device, int namespace,
/* Perform initialize sequence as described in NVMe spec "7.6.1
* Initialization". */
- cap = le64_to_cpu(regs->ctrl.cap);
+ cap = le64_to_cpu(regs->cap);
if (!(cap & (1ULL << 37))) {
error_setg(errp, "Device doesn't support NVMe command set");
ret = -EINVAL;
@@ -735,10 +730,10 @@ static int nvme_init(BlockDriverState *bs, const char
*device, int namespace,
timeout_ms = MIN(500 * ((cap >> 24) & 0xFF), 30000);
/* Reset device to get a clean state. */
- regs->ctrl.cc = cpu_to_le32(le32_to_cpu(regs->ctrl.cc) & 0xFE);
+ regs->cc = cpu_to_le32(le32_to_cpu(regs->cc) & 0xFE);
/* Wait for CSTS.RDY = 0. */
deadline = qemu_clock_get_ns(QEMU_CLOCK_REALTIME) + timeout_ms * SCALE_MS;
- while (le32_to_cpu(regs->ctrl.csts) & 0x1) {
+ while (le32_to_cpu(regs->csts) & 0x1) {
if (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) > deadline) {
error_setg(errp, "Timeout while waiting for device to reset (%"
PRId64 " ms)",
@@ -766,18 +761,18 @@ static int nvme_init(BlockDriverState *bs, const char
*device, int namespace,
}
s->nr_queues = 1;
QEMU_BUILD_BUG_ON(NVME_QUEUE_SIZE & 0xF000);
- regs->ctrl.aqa = cpu_to_le32((NVME_QUEUE_SIZE << 16) | NVME_QUEUE_SIZE);
- regs->ctrl.asq = cpu_to_le64(s->queues[INDEX_ADMIN]->sq.iova);
- regs->ctrl.acq = cpu_to_le64(s->queues[INDEX_ADMIN]->cq.iova);
+ regs->aqa = cpu_to_le32((NVME_QUEUE_SIZE << 16) | NVME_QUEUE_SIZE);
+ regs->asq = cpu_to_le64(s->queues[INDEX_ADMIN]->sq.iova);
+ regs->acq = cpu_to_le64(s->queues[INDEX_ADMIN]->cq.iova);
/* After setting up all control registers we can enable device now. */
- regs->ctrl.cc = cpu_to_le32((ctz32(NVME_CQ_ENTRY_BYTES) << 20) |
+ regs->cc = cpu_to_le32((ctz32(NVME_CQ_ENTRY_BYTES) << 20) |
(ctz32(NVME_SQ_ENTRY_BYTES) << 16) |
0x1);
/* Wait for CSTS.RDY = 1. */
now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
deadline = now + timeout_ms * 1000000;
- while (!(le32_to_cpu(regs->ctrl.csts) & 0x1)) {
+ while (!(le32_to_cpu(regs->csts) & 0x1)) {
if (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) > deadline) {
error_setg(errp, "Timeout while waiting for device to start (%"
PRId64 " ms)",
--
2.26.2
- [PULL v2 00/17] Block patches, Stefan Hajnoczi, 2020/10/05
- [PULL v2 01/17] util/vfio-helpers: Pass page protections to qemu_vfio_pci_map_bar(), Stefan Hajnoczi, 2020/10/05
- [PULL v2 02/17] block/nvme: Map doorbells pages write-only, Stefan Hajnoczi, 2020/10/05
- [PULL v2 03/17] block/nvme: Reduce I/O registers scope, Stefan Hajnoczi, 2020/10/05
- [PULL v2 04/17] block/nvme: Drop NVMeRegs structure, directly use NvmeBar,
Stefan Hajnoczi <=
- [PULL v2 05/17] block/nvme: Use register definitions from 'block/nvme.h', Stefan Hajnoczi, 2020/10/05
- [PULL v2 07/17] block: return error-code from bdrv_invalidate_cache, Stefan Hajnoczi, 2020/10/05
- [PULL v2 09/17] block: declare some coroutine functions in block/coroutines.h, Stefan Hajnoczi, 2020/10/05
- [PULL v2 06/17] block/nvme: Replace magic value by SCALE_MS definition, Stefan Hajnoczi, 2020/10/05
- [PULL v2 08/17] block/io: refactor coroutine wrappers, Stefan Hajnoczi, 2020/10/05
- [PULL v2 10/17] scripts: add block-coroutine-wrapper.py, Stefan Hajnoczi, 2020/10/05
- [PULL v2 12/17] block: drop bdrv_prwv, Stefan Hajnoczi, 2020/10/05
- [PULL v2 11/17] block: generate coroutine-wrapper code, Stefan Hajnoczi, 2020/10/05
- [PULL v2 13/17] block/io: refactor save/load vmstate, Stefan Hajnoczi, 2020/10/05
- [PULL v2 14/17] include/block/block.h: drop non-ascii quotation mark, Stefan Hajnoczi, 2020/10/05