mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
spapr/xive: Rework error handling of kvmppc_xive_cpu_connect()
Use error_setg_errno() instead of error_setg(strerror()). While here, use -ret instead of errno since kvm_vcpu_enable_cap() returns a negative errno on failure. Use ERRP_GUARD() to ensure that errp can be passed to error_append_hint(), and get rid of the local_err boilerplate. Propagate the return value so that callers may use it as well to check failures. Signed-off-by: Greg Kurz <groug@kaod.org> Message-Id: <159707844549.1489912.4862921680328017645.stgit@bahia.lan> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
4a6891b838
commit
3885ca6688
2 changed files with 11 additions and 12 deletions
|
@ -144,8 +144,9 @@ void kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp)
|
int kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
SpaprXive *xive = SPAPR_XIVE(tctx->xptr);
|
SpaprXive *xive = SPAPR_XIVE(tctx->xptr);
|
||||||
unsigned long vcpu_id;
|
unsigned long vcpu_id;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -154,7 +155,7 @@ void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp)
|
||||||
|
|
||||||
/* Check if CPU was hot unplugged and replugged. */
|
/* Check if CPU was hot unplugged and replugged. */
|
||||||
if (kvm_cpu_is_enabled(tctx->cs)) {
|
if (kvm_cpu_is_enabled(tctx->cs)) {
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vcpu_id = kvm_arch_vcpu_id(tctx->cs);
|
vcpu_id = kvm_arch_vcpu_id(tctx->cs);
|
||||||
|
@ -162,20 +163,18 @@ void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp)
|
||||||
ret = kvm_vcpu_enable_cap(tctx->cs, KVM_CAP_PPC_IRQ_XIVE, 0, xive->fd,
|
ret = kvm_vcpu_enable_cap(tctx->cs, KVM_CAP_PPC_IRQ_XIVE, 0, xive->fd,
|
||||||
vcpu_id, 0);
|
vcpu_id, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
Error *local_err = NULL;
|
error_setg_errno(errp, -ret,
|
||||||
|
"XIVE: unable to connect CPU%ld to KVM device",
|
||||||
error_setg(&local_err,
|
vcpu_id);
|
||||||
"XIVE: unable to connect CPU%ld to KVM device: %s",
|
if (ret == -ENOSPC) {
|
||||||
vcpu_id, strerror(errno));
|
error_append_hint(errp, "Try -smp maxcpus=N with N < %u\n",
|
||||||
if (errno == ENOSPC) {
|
|
||||||
error_append_hint(&local_err, "Try -smp maxcpus=N with N < %u\n",
|
|
||||||
MACHINE(qdev_get_machine())->smp.max_cpus);
|
MACHINE(qdev_get_machine())->smp.max_cpus);
|
||||||
}
|
}
|
||||||
error_propagate(errp, local_err);
|
return ret;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kvm_cpu_enable(tctx->cs);
|
kvm_cpu_enable(tctx->cs);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -487,7 +487,7 @@ void xive_tctx_ipb_update(XiveTCTX *tctx, uint8_t ring, uint8_t ipb);
|
||||||
|
|
||||||
int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp);
|
int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp);
|
||||||
void kvmppc_xive_source_set_irq(void *opaque, int srcno, int val);
|
void kvmppc_xive_source_set_irq(void *opaque, int srcno, int val);
|
||||||
void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp);
|
int kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp);
|
||||||
void kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp);
|
void kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp);
|
||||||
void kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp);
|
void kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp);
|
||||||
void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp);
|
void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue