All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>, "Fam Zheng" <fam@euphon.net>,
	qemu-block@nongnu.org, "Max Reitz" <mreitz@redhat.com>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: [PATCH 03/16] util/vfio-helpers: Pass minimum page size to qemu_vfio_open_pci()
Date: Tue, 20 Oct 2020 19:24:15 +0200	[thread overview]
Message-ID: <20201020172428.2220726-4-philmd@redhat.com> (raw)
In-Reply-To: <20201020172428.2220726-1-philmd@redhat.com>

The block driver asks for a minimum page size, but it might not
match the minimum IOMMU requirement.
In the next commit qemu_vfio_init_pci() will be able to report
the minimum IOMMU page size back to the block driver.
In preparation, pass the minimum page size as argument to
qemu_vfio_open_pci().

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 include/qemu/vfio-helpers.h | 3 ++-
 block/nvme.c                | 5 +++--
 util/vfio-helpers.c         | 8 +++++++-
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/include/qemu/vfio-helpers.h b/include/qemu/vfio-helpers.h
index 4491c8e1a6e..5cb346d8e67 100644
--- a/include/qemu/vfio-helpers.h
+++ b/include/qemu/vfio-helpers.h
@@ -15,7 +15,8 @@
 
 typedef struct QEMUVFIOState QEMUVFIOState;
 
-QEMUVFIOState *qemu_vfio_open_pci(const char *device, Error **errp);
+QEMUVFIOState *qemu_vfio_open_pci(const char *device, size_t *min_page_size,
+                                  Error **errp);
 void qemu_vfio_close(QEMUVFIOState *s);
 int qemu_vfio_dma_map(QEMUVFIOState *s, void *host, size_t size,
                       bool temporary, uint64_t *iova_list);
diff --git a/block/nvme.c b/block/nvme.c
index 029694975b9..8335f5d70dd 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -690,6 +690,7 @@ static int nvme_init(BlockDriverState *bs, const char *device, int namespace,
     uint64_t deadline, now;
     Error *local_err = NULL;
     volatile NvmeBar *regs = NULL;
+    size_t min_page_size = 4096;
 
     qemu_co_mutex_init(&s->dma_map_lock);
     qemu_co_queue_init(&s->dma_flush_queue);
@@ -702,7 +703,7 @@ static int nvme_init(BlockDriverState *bs, const char *device, int namespace,
         return ret;
     }
 
-    s->vfio = qemu_vfio_open_pci(device, errp);
+    s->vfio = qemu_vfio_open_pci(device, &min_page_size, errp);
     if (!s->vfio) {
         ret = -EINVAL;
         goto out;
@@ -724,7 +725,7 @@ static int nvme_init(BlockDriverState *bs, const char *device, int namespace,
         goto out;
     }
 
-    s->page_size = MAX(4096, 1u << (12 + NVME_CAP_MPSMIN(cap)));
+    s->page_size = MAX(min_page_size, 1u << (12 + NVME_CAP_MPSMIN(cap)));
     s->doorbell_scale = (4 << NVME_CAP_DSTRD(cap)) / sizeof(uint32_t);
     bs->bl.opt_mem_alignment = s->page_size;
     timeout_ms = MIN(500 * NVME_CAP_TO(cap), 30000);
diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c
index 14a549510fe..a2b084c69c1 100644
--- a/util/vfio-helpers.c
+++ b/util/vfio-helpers.c
@@ -488,8 +488,14 @@ static void qemu_vfio_open_common(QEMUVFIOState *s)
 
 /**
  * Open a PCI device, e.g. "0000:00:01.0".
+ *
+ * @min_page_size: Pointer holding the minimum page size requested
+ *
+ * If the IOMMU can not be configured with @min_page_size, the minimum
+ * page size is stored in @min_page_size and -EINVAL is returned.
  */
-QEMUVFIOState *qemu_vfio_open_pci(const char *device, Error **errp)
+QEMUVFIOState *qemu_vfio_open_pci(const char *device, size_t *min_page_size,
+                                  Error **errp)
 {
     int r;
     QEMUVFIOState *s = g_new0(QEMUVFIOState, 1);
-- 
2.26.2



  parent reply	other threads:[~2020-10-20 17:26 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-20 17:24 [PATCH 00/16] util/vfio-helpers: Allow using multiple MSIX IRQs Philippe Mathieu-Daudé
2020-10-20 17:24 ` [PATCH 01/16] block/nvme: Correct minimum device page size Philippe Mathieu-Daudé
2020-10-22 13:52   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 02/16] util/vfio-helpers: Improve reporting unsupported IOMMU type Philippe Mathieu-Daudé
2020-10-22 13:53   ` Stefan Hajnoczi
2020-10-20 17:24 ` Philippe Mathieu-Daudé [this message]
2020-10-22 14:00   ` [PATCH 03/16] util/vfio-helpers: Pass minimum page size to qemu_vfio_open_pci() Stefan Hajnoczi
2020-10-24 19:52     ` Philippe Mathieu-Daudé
2020-10-20 17:24 ` [PATCH 04/16] util/vfio-helpers: Report error when IOMMU page size is not supported Philippe Mathieu-Daudé
2020-10-22 15:21   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 05/16] util/vfio-helpers: Trace PCI I/O config accesses Philippe Mathieu-Daudé
2020-10-22 14:13   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 06/16] util/vfio-helpers: Trace PCI BAR region info Philippe Mathieu-Daudé
2020-10-22 14:13   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 07/16] util/vfio-helpers: Trace where BARs are mapped Philippe Mathieu-Daudé
2020-10-22 14:13   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 08/16] util/vfio-helpers: Improve DMA trace events Philippe Mathieu-Daudé
2020-10-22 14:17   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 09/16] util/vfio-helpers: Convert vfio_dump_mapping to " Philippe Mathieu-Daudé
2020-10-22 14:20   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 10/16] util/vfio-helpers: Let qemu_vfio_dma_map() propagate Error Philippe Mathieu-Daudé
2020-10-22 14:23   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 11/16] util/vfio-helpers: Let qemu_vfio_do_mapping() " Philippe Mathieu-Daudé
2020-10-22 14:24   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 12/16] util/vfio-helpers: Let qemu_vfio_verify_mappings() use error_report() Philippe Mathieu-Daudé
2020-10-22 14:25   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 13/16] util/vfio-helpers: Introduce qemu_vfio_pci_msix_init_irqs() Philippe Mathieu-Daudé
2020-10-22 14:34   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 14/16] util/vfio-helpers: Introduce qemu_vfio_pci_msix_set_irq() Philippe Mathieu-Daudé
2020-10-22 14:47   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 15/16] block/nvme: Switch to using the MSIX API Philippe Mathieu-Daudé
2020-10-22 14:49   ` Stefan Hajnoczi
2020-10-20 17:24 ` [PATCH 16/16] util/vfio-helpers: Remove now unused qemu_vfio_pci_init_irq() Philippe Mathieu-Daudé
2020-10-22 14:50   ` Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201020172428.2220726-4-philmd@redhat.com \
    --to=philmd@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=fam@euphon.net \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.