mirror of https://github.com/xemu-project/xemu.git
spapr/xive: Rework error handling of kvmppc_xive_mmap()
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> Message-Id: <159707845972.1489912.719896767746375765.stgit@bahia.lan> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
46407a2531
commit
b14adb4a27
|
@ -698,6 +698,7 @@ int kvmppc_xive_post_load(SpaprXive *xive, int version_id)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns MAP_FAILED on error and sets errno */
|
||||||
static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len,
|
static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
@ -708,7 +709,6 @@ static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len,
|
||||||
pgoff << page_shift);
|
pgoff << page_shift);
|
||||||
if (addr == MAP_FAILED) {
|
if (addr == MAP_FAILED) {
|
||||||
error_setg_errno(errp, errno, "XIVE: unable to set memory mapping");
|
error_setg_errno(errp, errno, "XIVE: unable to set memory mapping");
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return addr;
|
return addr;
|
||||||
|
@ -728,6 +728,7 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers,
|
||||||
size_t tima_len = 4ull << TM_SHIFT;
|
size_t tima_len = 4ull << TM_SHIFT;
|
||||||
CPUState *cs;
|
CPUState *cs;
|
||||||
int fd;
|
int fd;
|
||||||
|
void *addr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The KVM XIVE device already in use. This is the case when
|
* 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
|
* 1. Source ESB pages - KVM mapping
|
||||||
*/
|
*/
|
||||||
xsrc->esb_mmap = kvmppc_xive_mmap(xive, KVM_XIVE_ESB_PAGE_OFFSET, esb_len,
|
addr = kvmppc_xive_mmap(xive, KVM_XIVE_ESB_PAGE_OFFSET, esb_len,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (local_err) {
|
if (addr == MAP_FAILED) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
xsrc->esb_mmap = addr;
|
||||||
|
|
||||||
memory_region_init_ram_device_ptr(&xsrc->esb_mmio_kvm, OBJECT(xsrc),
|
memory_region_init_ram_device_ptr(&xsrc->esb_mmio_kvm, OBJECT(xsrc),
|
||||||
"xive.esb-kvm", esb_len, xsrc->esb_mmap);
|
"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
|
* 3. TIMA pages - KVM mapping
|
||||||
*/
|
*/
|
||||||
xive->tm_mmap = kvmppc_xive_mmap(xive, KVM_XIVE_TIMA_PAGE_OFFSET, tima_len,
|
addr = kvmppc_xive_mmap(xive, KVM_XIVE_TIMA_PAGE_OFFSET, tima_len,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (local_err) {
|
if (addr == MAP_FAILED) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
xive->tm_mmap = addr;
|
||||||
|
|
||||||
memory_region_init_ram_device_ptr(&xive->tm_mmio_kvm, OBJECT(xive),
|
memory_region_init_ram_device_ptr(&xive->tm_mmio_kvm, OBJECT(xive),
|
||||||
"xive.tima", tima_len, xive->tm_mmap);
|
"xive.tima", tima_len, xive->tm_mmap);
|
||||||
memory_region_add_subregion_overlap(&xive->tm_mmio, 0,
|
memory_region_add_subregion_overlap(&xive->tm_mmio, 0,
|
||||||
|
|
Loading…
Reference in New Issue