[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 15/25] block/nvme: Correctly initialize Admin Queue Attribute
From: |
Auger Eric |
Subject: |
Re: [PATCH 15/25] block/nvme: Correctly initialize Admin Queue Attributes |
Date: |
Wed, 28 Oct 2020 15:21:00 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 |
On 10/27/20 2:55 PM, Philippe Mathieu-Daudé wrote:
> 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 :)
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Eric
> ---
> block/nvme.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/block/nvme.c b/block/nvme.c
> index 2dfcf8c41d7..d5df30ec074 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);
>
>
- [PATCH 14/25] block/nvme: Use definitions instead of magic values in add_io_queue(), (continued)
- [PATCH 14/25] block/nvme: Use definitions instead of magic values in add_io_queue(), Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 16/25] block/nvme: Simplify ADMIN queue access, Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 17/25] block/nvme: Simplify nvme_cmd_sync(), Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 15/25] block/nvme: Correctly initialize Admin Queue Attributes, Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 18/25] block/nvme: Pass AioContext argument to nvme_add_io_queue(), Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 19/25] block/nvme: Set request_alignment at initialization, Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 20/25] block/nvme: Correct minimum device page size, Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 21/25] block/nvme: Change size and alignment of IDENTIFY response buffer, Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 22/25] block/nvme: Change size and alignment of queue, Philippe Mathieu-Daudé, 2020/10/27