Message ID | 159707844549.1489912.4862921680328017645.stgit@bahia.lan (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ppc/spapr: Error handling fixes and cleanups | expand |
On Mon, Aug 10, 2020 at 06:54:05PM +0200, Greg Kurz wrote: > 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> Applied to ppc-for-5.2. > --- > hw/intc/spapr_xive_kvm.c | 21 ++++++++++----------- > include/hw/ppc/xive.h | 2 +- > 2 files changed, 11 insertions(+), 12 deletions(-) > > diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c > index 82a6f99f022d..aa1a2f915363 100644 > --- a/hw/intc/spapr_xive_kvm.c > +++ b/hw/intc/spapr_xive_kvm.c > @@ -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; > } > > /* > diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h > index 2f3c5af810bb..2d87ed43728a 100644 > --- a/include/hw/ppc/xive.h > +++ b/include/hw/ppc/xive.h > @@ -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); > >
diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c index 82a6f99f022d..aa1a2f915363 100644 --- a/hw/intc/spapr_xive_kvm.c +++ b/hw/intc/spapr_xive_kvm.c @@ -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; } /* diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index 2f3c5af810bb..2d87ed43728a 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -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);
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> --- hw/intc/spapr_xive_kvm.c | 21 ++++++++++----------- include/hw/ppc/xive.h | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-)