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
@ -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);
|
||||
unsigned long vcpu_id;
|
||||
int ret;
|
||||
@ -154,7 +155,7 @@ void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp)
|
||||
|
||||
/* Check if CPU was hot unplugged and replugged. */
|
||||
if (kvm_cpu_is_enabled(tctx->cs)) {
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
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,
|
||||
vcpu_id, 0);
|
||||
if (ret < 0) {
|
||||
Error *local_err = NULL;
|
||||
|
||||
error_setg(&local_err,
|
||||
"XIVE: unable to connect CPU%ld to KVM device: %s",
|
||||
vcpu_id, strerror(errno));
|
||||
if (errno == ENOSPC) {
|
||||
error_append_hint(&local_err, "Try -smp maxcpus=N with N < %u\n",
|
||||
error_setg_errno(errp, -ret,
|
||||
"XIVE: unable to connect CPU%ld to KVM device",
|
||||
vcpu_id);
|
||||
if (ret == -ENOSPC) {
|
||||
error_append_hint(errp, "Try -smp maxcpus=N with N < %u\n",
|
||||
MACHINE(qdev_get_machine())->smp.max_cpus);
|
||||
}
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
return ret;
|
||||
}
|
||||
|
||||
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);
|
||||
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_get_state(XiveTCTX *tctx, Error **errp);
|
||||
void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp);
|
||||
|
Loading…
Reference in New Issue
Block a user