public inbox for qemu-devel@nongnu.org
 help / color / mirror / Atom feed
* [PATCH RFC 0/2] hw/nvme: support mdts above 9
@ 2026-03-17  8:48 Klaus Jensen
  2026-03-17  8:48 ` [PATCH RFC 1/2] dma-helpers: lift IOV_MAX limit Klaus Jensen
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Klaus Jensen @ 2026-03-17  8:48 UTC (permalink / raw)
  To: qemu-devel, Paolo Bonzini, Peter Xu, Philippe Mathieu-Daudé,
	Keith Busch, Klaus Jensen, Jesper Devantier, qemu-block
  Cc: Klaus Jensen

In commit 53493c1f836f ("hw/nvme: cap MDTS value for internal
limitation"), the max value of MDTS was restricted to ensure that the
device will not report internal device errors when hitting the internal
IOV_MAX limit of the block layer.

This series attempts to lift the IOV_MAX restrictions, by splitting I/O
in the dma helpers.

Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
Klaus Jensen (2):
      dma-helpers: lift IOV_MAX limit
      hw/nvme: allow MDTS above 9

 hw/nvme/ctrl.c       | 17 ++---------------
 system/dma-helpers.c |  5 ++++-
 2 files changed, 6 insertions(+), 16 deletions(-)
---
base-commit: 559919ce54927d59b215a4665eda7ab6118a48aa
change-id: 20260317-lift-iovmax-dma-limit-5266d83d0820

Best regards,
-- 
Klaus Jensen <k.jensen@samsung.com>



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH RFC 1/2] dma-helpers: lift IOV_MAX limit
  2026-03-17  8:48 [PATCH RFC 0/2] hw/nvme: support mdts above 9 Klaus Jensen
@ 2026-03-17  8:48 ` Klaus Jensen
  2026-03-17  8:48 ` [PATCH RFC 2/2] hw/nvme: allow MDTS above 9 Klaus Jensen
  2026-03-17 14:43 ` [PATCH RFC 0/2] hw/nvme: support mdts " Keith Busch
  2 siblings, 0 replies; 4+ messages in thread
From: Klaus Jensen @ 2026-03-17  8:48 UTC (permalink / raw)
  To: qemu-devel, Paolo Bonzini, Peter Xu, Philippe Mathieu-Daudé,
	Keith Busch, Klaus Jensen, Jesper Devantier, qemu-block
  Cc: Klaus Jensen

From: Klaus Jensen <k.jensen@samsung.com>

Split DMA if the number of vector segments hits IOV_MAX.

Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 system/dma-helpers.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/system/dma-helpers.c b/system/dma-helpers.c
index 0d592f646809..feaa50ff4e1e 100644
--- a/system/dma-helpers.c
+++ b/system/dma-helpers.c
@@ -156,8 +156,11 @@ static void dma_blk_cb(void *opaque, int ret)
                 }
             }
         }
-        if (!mem)
+
+        if (!mem || dbs->iov.niov == IOV_MAX) {
             break;
+        }
+
         qemu_iovec_add(&dbs->iov, mem, cur_len);
         dbs->sg_cur_byte += cur_len;
         if (dbs->sg_cur_byte == dbs->sg->sg[dbs->sg_cur_index].len) {

-- 
2.51.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH RFC 2/2] hw/nvme: allow MDTS above 9
  2026-03-17  8:48 [PATCH RFC 0/2] hw/nvme: support mdts above 9 Klaus Jensen
  2026-03-17  8:48 ` [PATCH RFC 1/2] dma-helpers: lift IOV_MAX limit Klaus Jensen
@ 2026-03-17  8:48 ` Klaus Jensen
  2026-03-17 14:43 ` [PATCH RFC 0/2] hw/nvme: support mdts " Keith Busch
  2 siblings, 0 replies; 4+ messages in thread
From: Klaus Jensen @ 2026-03-17  8:48 UTC (permalink / raw)
  To: qemu-devel, Paolo Bonzini, Peter Xu, Philippe Mathieu-Daudé,
	Keith Busch, Klaus Jensen, Jesper Devantier, qemu-block
  Cc: Klaus Jensen

From: Klaus Jensen <k.jensen@samsung.com>

With the IOV_MAX restriction lifted at the dma-helpers level, remove the
restriction on MDTS.

Still require mdts to be set (i.e., non-zero) since it has a direct
impact on how much many may be used internally.

Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index cc4593cd427a..480694cc2e14 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -851,10 +851,6 @@ static uint16_t nvme_map_addr(NvmeCtrl *n, NvmeSg *sg, hwaddr addr, size_t len)
             return NVME_INVALID_USE_OF_CMB | NVME_DNR;
         }
 
-        if (sg->iov.niov + 1 > IOV_MAX) {
-            goto max_mappings_exceeded;
-        }
-
         if (cmb) {
             return nvme_map_addr_cmb(n, &sg->iov, addr, len);
         } else {
@@ -866,18 +862,9 @@ static uint16_t nvme_map_addr(NvmeCtrl *n, NvmeSg *sg, hwaddr addr, size_t len)
         return NVME_INVALID_USE_OF_CMB | NVME_DNR;
     }
 
-    if (sg->qsg.nsg + 1 > IOV_MAX) {
-        goto max_mappings_exceeded;
-    }
-
     qemu_sglist_add(&sg->qsg, addr, len);
 
     return NVME_SUCCESS;
-
-max_mappings_exceeded:
-    NVME_GUEST_ERR(pci_nvme_ub_too_many_mappings,
-                   "number of mappings exceed 1024");
-    return NVME_INTERNAL_DEV_ERROR | NVME_DNR;
 }
 
 static inline bool nvme_addr_is_dma(NvmeCtrl *n, hwaddr addr)
@@ -8626,8 +8613,8 @@ static bool nvme_check_params(NvmeCtrl *n, Error **errp)
         host_memory_backend_set_mapped(n->pmr.dev, true);
     }
 
-    if (!n->params.mdts || ((1 << n->params.mdts) + 1) > IOV_MAX) {
-        error_setg(errp, "mdts exceeds IOV_MAX");
+    if (!n->params.mdts) {
+        error_setg(errp, "mdts must be set");
         return false;
     }
 

-- 
2.51.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH RFC 0/2] hw/nvme: support mdts above 9
  2026-03-17  8:48 [PATCH RFC 0/2] hw/nvme: support mdts above 9 Klaus Jensen
  2026-03-17  8:48 ` [PATCH RFC 1/2] dma-helpers: lift IOV_MAX limit Klaus Jensen
  2026-03-17  8:48 ` [PATCH RFC 2/2] hw/nvme: allow MDTS above 9 Klaus Jensen
@ 2026-03-17 14:43 ` Keith Busch
  2 siblings, 0 replies; 4+ messages in thread
From: Keith Busch @ 2026-03-17 14:43 UTC (permalink / raw)
  To: Klaus Jensen
  Cc: qemu-devel, Paolo Bonzini, Peter Xu, Philippe Mathieu-Daudé,
	Jesper Devantier, qemu-block, Klaus Jensen

On Tue, Mar 17, 2026 at 09:48:56AM +0100, Klaus Jensen wrote:
> In commit 53493c1f836f ("hw/nvme: cap MDTS value for internal
> limitation"), the max value of MDTS was restricted to ensure that the
> device will not report internal device errors when hitting the internal
> IOV_MAX limit of the block layer.
> 
> This series attempts to lift the IOV_MAX restrictions, by splitting I/O
> in the dma helpers.

Nice, this was simpler than I thought! Looks good to me:

Acked-by: Keith Busch <kbusch@kernel.org>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-03-17 14:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-17  8:48 [PATCH RFC 0/2] hw/nvme: support mdts above 9 Klaus Jensen
2026-03-17  8:48 ` [PATCH RFC 1/2] dma-helpers: lift IOV_MAX limit Klaus Jensen
2026-03-17  8:48 ` [PATCH RFC 2/2] hw/nvme: allow MDTS above 9 Klaus Jensen
2026-03-17 14:43 ` [PATCH RFC 0/2] hw/nvme: support mdts " Keith Busch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox