[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 4/4] hw/block/nvme: Align I/O BAR to 4 KiB
From: |
Dmitry Fomichev |
Subject: |
Re: [PATCH v3 4/4] hw/block/nvme: Align I/O BAR to 4 KiB |
Date: |
Mon, 13 Jul 2020 01:07:05 +0000 |
User-agent: |
Evolution 3.32.5 (3.32.5-1.fc30) |
On Tue, 2020-06-30 at 13:04 +0200, Philippe Mathieu-Daudé wrote:
> Simplify the NVMe emulated device by aligning the I/O BAR to 4 KiB.
>
> Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> include/block/nvme.h | 2 ++
> hw/block/nvme.c | 5 ++---
> 2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/include/block/nvme.h b/include/block/nvme.h
> index 82c384614a..4e1cea576a 100644
> --- a/include/block/nvme.h
> +++ b/include/block/nvme.h
> @@ -22,6 +22,7 @@ typedef struct QEMU_PACKED NvmeBar {
> uint32_t pmrebs;
> uint32_t pmrswtp;
> uint64_t pmrmsc;
> + uint8_t reserved[484];
> } NvmeBar;
>
> enum NvmeCapShift {
> @@ -879,6 +880,7 @@ enum NvmeIdNsDps {
>
> static inline void _nvme_check_size(void)
> {
> + QEMU_BUILD_BUG_ON(sizeof(NvmeBar) != 4096);
> QEMU_BUILD_BUG_ON(sizeof(NvmeAerResult) != 4);
> QEMU_BUILD_BUG_ON(sizeof(NvmeCqe) != 16);
> QEMU_BUILD_BUG_ON(sizeof(NvmeDsmRange) != 16);
> diff --git a/hw/block/nvme.c b/hw/block/nvme.c
> index 6628d0a4ba..2aa54bc20e 100644
> --- a/hw/block/nvme.c
> +++ b/hw/block/nvme.c
> @@ -55,7 +55,6 @@
> #include "nvme.h"
>
> #define NVME_MAX_IOQPAIRS 0xffff
> -#define NVME_REG_SIZE 0x1000
> #define NVME_DB_SIZE 4
> #define NVME_CMB_BIR 2
> #define NVME_PMR_BIR 2
> @@ -1322,7 +1321,7 @@ static void nvme_mmio_write(void *opaque, hwaddr addr,
> uint64_t data,
> NvmeCtrl *n = (NvmeCtrl *)opaque;
> if (addr < sizeof(n->bar)) {
> nvme_write_bar(n, addr, data, size);
> - } else if (addr >= 0x1000) {
> + } else {
> nvme_process_db(n, addr, data);
> }
> }
> @@ -1416,7 +1415,7 @@ static void nvme_init_state(NvmeCtrl *n)
> {
> n->num_namespaces = 1;
> /* add one to max_ioqpairs to account for the admin queue pair */
> - n->reg_size = pow2ceil(NVME_REG_SIZE +
> + n->reg_size = pow2ceil(sizeof(NvmeBar) +
> 2 * (n->params.max_ioqpairs + 1) * NVME_DB_SIZE);
> n->namespaces = g_new0(NvmeNamespace, n->num_namespaces);
> n->sq = g_new0(NvmeSQueue *, n->params.max_ioqpairs + 1);
> --
> 2.21.3
>
>
Reviewed-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v3 4/4] hw/block/nvme: Align I/O BAR to 4 KiB,
Dmitry Fomichev <=