[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 21/25] block/nvme: Change size and alignment of IDENTIFY response
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH 21/25] block/nvme: Change size and alignment of IDENTIFY response buffer |
Date: |
Tue, 27 Oct 2020 14:55:43 +0100 |
From: Eric Auger <eric.auger@redhat.com>
In preparation of 64kB host page support, let's change the size
and alignment of the IDENTIFY command response buffer so that
the VFIO DMA MAP succeeds. We align on the host page size.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
block/nvme.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/block/nvme.c b/block/nvme.c
index d2d57a287cc..ad70303c5c1 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -521,19 +521,20 @@ static bool nvme_identify(BlockDriverState *bs, int
namespace, Error **errp)
.opcode = NVME_ADM_CMD_IDENTIFY,
.cdw10 = cpu_to_le32(0x1),
};
+ size_t id_size = QEMU_ALIGN_UP(sizeof(*id), qemu_real_host_page_size);
- id = qemu_try_memalign(s->page_size, sizeof(*id));
+ id = qemu_try_memalign(qemu_real_host_page_size, id_size);
if (!id) {
error_setg(errp, "Cannot allocate buffer for identify response");
goto out;
}
- r = qemu_vfio_dma_map(s->vfio, id, sizeof(*id), true, &iova);
+ r = qemu_vfio_dma_map(s->vfio, id, id_size, true, &iova);
if (r) {
error_setg(errp, "Cannot map buffer for DMA");
goto out;
}
- memset(id, 0, sizeof(*id));
+ memset(id, 0, id_size);
cmd.dptr.prp1 = cpu_to_le64(iova);
if (nvme_cmd_sync(bs, &cmd)) {
error_setg(errp, "Failed to identify controller");
@@ -555,7 +556,7 @@ static bool nvme_identify(BlockDriverState *bs, int
namespace, Error **errp)
s->supports_write_zeroes = !!(oncs & NVME_ONCS_WRITE_ZEROES);
s->supports_discard = !!(oncs & NVME_ONCS_DSM);
- memset(id, 0, sizeof(*id));
+ memset(id, 0, id_size);
cmd.cdw10 = 0;
cmd.nsid = cpu_to_le32(namespace);
if (nvme_cmd_sync(bs, &cmd)) {
--
2.26.2
- Re: [PATCH 17/25] block/nvme: Simplify nvme_cmd_sync(), (continued)
- [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é <=
- [PATCH 22/25] block/nvme: Change size and alignment of queue, Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 23/25] block/nvme: Change size and alignment of prp_list_pages, Philippe Mathieu-Daudé, 2020/10/27
- [PATCH 24/25] block/nvme: Align iov's va and size on host page size, Philippe Mathieu-Daudé, 2020/10/27
- [RFC PATCH 25/25] block/nvme: Fix use of write-only doorbells page on Aarch64 arch, Philippe Mathieu-Daudé, 2020/10/27