[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH-for-5.2 v2 14/25] block/nvme: Correctly initialize Admin Queue At
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH-for-5.2 v2 14/25] block/nvme: Correctly initialize Admin Queue Attributes |
Date: |
Thu, 29 Oct 2020 10:32:55 +0100 |
>From the specification chapter 3.1.8 "AQA - Admin Queue Attributes"
the Admin Submission Queue Size field is a 0’s based value:
Admin Submission Queue Size (ASQS):
Defines the size of the Admin Submission Queue in entries.
Enabling a controller while this field is cleared to 00h
produces undefined results. The minimum size of the Admin
Submission Queue is two entries. The maximum size of the
Admin Submission Queue is 4096 entries.
This is a 0’s based value.
This bug has never been hit because the device initialization
uses a single command synchronously :)
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Tested-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
block/nvme.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/block/nvme.c b/block/nvme.c
index 7285bd2e271..0902aa55428 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -789,9 +789,9 @@ static int nvme_init(BlockDriverState *bs, const char
*device, int namespace,
goto out;
}
s->queue_count = 1;
- QEMU_BUILD_BUG_ON(NVME_QUEUE_SIZE & 0xF000);
- regs->aqa = cpu_to_le32((NVME_QUEUE_SIZE << AQA_ACQS_SHIFT) |
- (NVME_QUEUE_SIZE << AQA_ASQS_SHIFT));
+ QEMU_BUILD_BUG_ON((NVME_QUEUE_SIZE - 1) & 0xF000);
+ regs->aqa = cpu_to_le32(((NVME_QUEUE_SIZE - 1) << AQA_ACQS_SHIFT) |
+ ((NVME_QUEUE_SIZE - 1) << AQA_ASQS_SHIFT));
regs->asq = cpu_to_le64(s->queues[INDEX_ADMIN]->sq.iova);
regs->acq = cpu_to_le64(s->queues[INDEX_ADMIN]->cq.iova);
--
2.26.2
- [PATCH-for-5.2 v2 06/25] block/nvme: Improve nvme_free_req_queue_wait() trace information, (continued)
- [PATCH-for-5.2 v2 06/25] block/nvme: Improve nvme_free_req_queue_wait() trace information, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 07/25] block/nvme: Trace queue pair creation/deletion, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 08/25] block/nvme: Move definitions before structure declarations, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 09/25] block/nvme: Use unsigned integer for queue counter/size, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 10/25] block/nvme: Make nvme_identify() return boolean indicating error, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 11/25] block/nvme: Make nvme_init_queue() return boolean indicating error, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 12/25] block/nvme: Introduce Completion Queue definitions, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 13/25] block/nvme: Use definitions instead of magic values in add_io_queue(), Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 14/25] block/nvme: Correctly initialize Admin Queue Attributes,
Philippe Mathieu-Daudé <=
- [PATCH-for-5.2 v2 15/25] block/nvme: Simplify ADMIN queue access, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 17/25] block/nvme: Set request_alignment at initialization, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 16/25] block/nvme: Simplify nvme_cmd_sync(), Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 18/25] block/nvme: Correct minimum device page size, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 19/25] block/nvme: Change size and alignment of IDENTIFY response buffer, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 20/25] block/nvme: Change size and alignment of queue, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 21/25] block/nvme: Change size and alignment of prp_list_pages, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 22/25] block/nvme: Align iov's va and size on host page size, Philippe Mathieu-Daudé, 2020/10/29
- [PATCH-for-5.2 v2 23/25] block/nvme: Fix use of write-only doorbells page on Aarch64 arch, Philippe Mathieu-Daudé, 2020/10/29