[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/14] spapr/xive: Rework error handling of kvmppc_xive_mmap()
From: |
Greg Kurz |
Subject: |
[PATCH 04/14] spapr/xive: Rework error handling of kvmppc_xive_mmap() |
Date: |
Mon, 10 Aug 2020 18:54:19 +0200 |
User-agent: |
StGit/0.21 |
Callers currently check failures of kvmppc_xive_mmap() through the
@errp argument, which isn't a recommanded practice. It is preferred
to use a return value when possible.
Since NULL isn't an invalid address in theory, it seems better to
return MAP_FAILED and to teach callers to handle it.
Signed-off-by: Greg Kurz <groug@kaod.org>
---
hw/intc/spapr_xive_kvm.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c
index d801bf5cd11c..b2a36fd59dae 100644
--- a/hw/intc/spapr_xive_kvm.c
+++ b/hw/intc/spapr_xive_kvm.c
@@ -698,6 +698,7 @@ int kvmppc_xive_post_load(SpaprXive *xive, int version_id)
return 0;
}
+/* Returns MAP_FAILED on error and sets errno */
static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len,
Error **errp)
{
@@ -708,7 +709,6 @@ static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff,
size_t len,
pgoff << page_shift);
if (addr == MAP_FAILED) {
error_setg_errno(errp, errno, "XIVE: unable to set memory mapping");
- return NULL;
}
return addr;
@@ -728,6 +728,7 @@ int kvmppc_xive_connect(SpaprInterruptController *intc,
uint32_t nr_servers,
size_t tima_len = 4ull << TM_SHIFT;
CPUState *cs;
int fd;
+ void *addr;
/*
* The KVM XIVE device already in use. This is the case when
@@ -763,11 +764,12 @@ int kvmppc_xive_connect(SpaprInterruptController *intc,
uint32_t nr_servers,
/*
* 1. Source ESB pages - KVM mapping
*/
- xsrc->esb_mmap = kvmppc_xive_mmap(xive, KVM_XIVE_ESB_PAGE_OFFSET, esb_len,
- &local_err);
- if (local_err) {
+ addr = kvmppc_xive_mmap(xive, KVM_XIVE_ESB_PAGE_OFFSET, esb_len,
+ &local_err);
+ if (addr == MAP_FAILED) {
goto fail;
}
+ xsrc->esb_mmap = addr;
memory_region_init_ram_device_ptr(&xsrc->esb_mmio_kvm, OBJECT(xsrc),
"xive.esb-kvm", esb_len, xsrc->esb_mmap);
@@ -781,11 +783,13 @@ int kvmppc_xive_connect(SpaprInterruptController *intc,
uint32_t nr_servers,
/*
* 3. TIMA pages - KVM mapping
*/
- xive->tm_mmap = kvmppc_xive_mmap(xive, KVM_XIVE_TIMA_PAGE_OFFSET, tima_len,
- &local_err);
- if (local_err) {
+ addr = kvmppc_xive_mmap(xive, KVM_XIVE_TIMA_PAGE_OFFSET, tima_len,
+ &local_err);
+ if (addr == MAP_FAILED) {
goto fail;
}
+ xive->tm_mmap = addr;
+
memory_region_init_ram_device_ptr(&xive->tm_mmio_kvm, OBJECT(xive),
"xive.tima", tima_len, xive->tm_mmap);
memory_region_add_subregion_overlap(&xive->tm_mmio, 0,
- [PATCH 00/14] ppc/spapr: Error handling fixes and cleanups, Greg Kurz, 2020/08/10
- [PATCH 02/14] spapr/xive: Rework error handling of kvmppc_xive_cpu_connect(), Greg Kurz, 2020/08/10
- [PATCH 03/14] spapr/xive: Rework error handling of kvmppc_xive_source_reset(), Greg Kurz, 2020/08/10
- [PATCH 04/14] spapr/xive: Rework error handling of kvmppc_xive_mmap(),
Greg Kurz <=
- [PATCH 05/14] spapr/xive: Rework error handling of kvmppc_xive_cpu_[gs]et_state(), Greg Kurz, 2020/08/10
- [PATCH 06/14] spapr/xive: Rework error handling of kvmppc_xive_[gs]et_queue_config(), Greg Kurz, 2020/08/10
- [PATCH 07/14] spapr/xive: Rework error handling in kvmppc_xive_get_queues(), Greg Kurz, 2020/08/10
- [PATCH 08/14] spapr/xive: Rework error handling of kvmppc_xive_set_source_config(), Greg Kurz, 2020/08/10
- [PATCH 09/14] spapr/kvm: Fix error handling in kvmppc_xive_pre_save(), Greg Kurz, 2020/08/10