* [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