[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 11/11] block/nvme: Only report VFIO error on failed retry
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH v3 11/11] block/nvme: Only report VFIO error on failed retry |
Date: |
Thu, 2 Sep 2021 09:00:25 +0200 |
We expect the first qemu_vfio_dma_map() to fail (indicating
DMA mappings exhaustion, see commit 15a730e7a3a). Do not
report the first failure as error, since we are going to
flush the mappings and retry.
This removes spurious error message displayed on the monitor:
(qemu) c
(qemu) qemu-kvm: VFIO_MAP_DMA failed: No space left on device
(qemu) info status
VM status: running
Reported-by: Tingting Mao <timao@redhat.com>
Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
block/nvme.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/block/nvme.c b/block/nvme.c
index 80546b0babd..abfe305baf2 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -1019,6 +1019,7 @@ static coroutine_fn int
nvme_cmd_map_qiov(BlockDriverState *bs, NvmeCmd *cmd,
uint64_t *pagelist = req->prp_list_page;
int i, j, r;
int entries = 0;
+ Error *local_err = NULL, **errp = NULL;
assert(qiov->size);
assert(QEMU_IS_ALIGNED(qiov->size, s->page_size));
@@ -1031,7 +1032,7 @@ static coroutine_fn int
nvme_cmd_map_qiov(BlockDriverState *bs, NvmeCmd *cmd,
try_map:
r = qemu_vfio_dma_map(s->vfio,
qiov->iov[i].iov_base,
- len, true, &iova, NULL);
+ len, true, &iova, errp);
if (r == -ENOSPC) {
/*
* In addition to the -ENOMEM error, the VFIO_IOMMU_MAP_DMA
@@ -1066,6 +1067,8 @@ try_map:
goto fail;
}
}
+ errp = &local_err;
+
goto try_map;
}
if (r) {
@@ -1109,6 +1112,9 @@ fail:
* because they are already mapped before calling this function; for
* temporary mappings, a later nvme_cmd_(un)map_qiov will reclaim by
* calling qemu_vfio_dma_reset_temporary when necessary. */
+ if (local_err) {
+ error_reportf_err(local_err, "Cannot map buffer for DMA: ");
+ }
return r;
}
--
2.31.1
- [PATCH v3 01/11] block/nvme: Use safer trace format string, (continued)
- [PATCH v3 01/11] block/nvme: Use safer trace format string, Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 03/11] util/vfio-helpers: Replace qemu_mutex_lock() calls with QEMU_LOCK_GUARD, Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 04/11] util/vfio-helpers: Remove unreachable code in qemu_vfio_dma_map(), Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 05/11] block/nvme: Have nvme_create_queue_pair() report errors consistently, Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 07/11] util/vfio-helpers: Extract qemu_vfio_water_mark_reached(), Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 06/11] util/vfio-helpers: Pass Error handle to qemu_vfio_dma_map(), Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 08/11] util/vfio-helpers: Use error_setg in qemu_vfio_find_[fixed/temp]_iova, Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 09/11] util/vfio-helpers: Simplify qemu_vfio_dma_map() returning directly, Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 10/11] util/vfio-helpers: Let qemu_vfio_do_mapping() propagate Error, Philippe Mathieu-Daudé, 2021/09/02
- [PATCH v3 11/11] block/nvme: Only report VFIO error on failed retry,
Philippe Mathieu-Daudé <=
- Re: [PATCH v3 00/11] block/nvme: Rework error reporting, Stefan Hajnoczi, 2021/09/02