Message ID | 159707846665.1489912.14267225652103441921.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:26PM +0200, Greg Kurz wrote: > kvm_set_one_reg() returns a negative errno on failure, use that instead > of errno. Also propagate it to callers so they can use it to check > for failures and hopefully get rid of their local_err boilerplate. > > Signed-off-by: Greg Kurz <groug@kaod.org> Applied to ppc-for-5.2. > --- > hw/intc/spapr_xive_kvm.c | 15 ++++++++++----- > include/hw/ppc/xive.h | 4 ++-- > 2 files changed, 12 insertions(+), 7 deletions(-) > > diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c > index b2a36fd59dae..5e088ccbf885 100644 > --- a/hw/intc/spapr_xive_kvm.c > +++ b/hw/intc/spapr_xive_kvm.c > @@ -73,7 +73,7 @@ static void kvm_cpu_disable_all(void) > * XIVE Thread Interrupt Management context (KVM) > */ > > -void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp) > +int kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp) > { > SpaprXive *xive = SPAPR_XIVE(tctx->xptr); > uint64_t state[2]; > @@ -86,13 +86,16 @@ void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp) > > ret = kvm_set_one_reg(tctx->cs, KVM_REG_PPC_VP_STATE, state); > if (ret != 0) { > - error_setg_errno(errp, errno, > + error_setg_errno(errp, -ret, > "XIVE: could not restore KVM state of CPU %ld", > kvm_arch_vcpu_id(tctx->cs)); > + return ret; > } > + > + return 0; > } > > -void kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp) > +int kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp) > { > SpaprXive *xive = SPAPR_XIVE(tctx->xptr); > uint64_t state[2] = { 0 }; > @@ -102,14 +105,16 @@ void kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp) > > ret = kvm_get_one_reg(tctx->cs, KVM_REG_PPC_VP_STATE, state); > if (ret != 0) { > - error_setg_errno(errp, errno, > + error_setg_errno(errp, -ret, > "XIVE: could not capture KVM state of CPU %ld", > kvm_arch_vcpu_id(tctx->cs)); > - return; > + return ret; > } > > /* word0 and word1 of the OS ring. */ > *((uint64_t *) &tctx->regs[TM_QW1_OS]) = state[0]; > + > + return 0; > } > > typedef struct { > diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h > index 2d87ed43728a..785c905357dc 100644 > --- a/include/hw/ppc/xive.h > +++ b/include/hw/ppc/xive.h > @@ -489,7 +489,7 @@ int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp); > void kvmppc_xive_source_set_irq(void *opaque, int srcno, int val); > 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); > +int kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp); > +int kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp); > > #endif /* PPC_XIVE_H */ > >
diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c index b2a36fd59dae..5e088ccbf885 100644 --- a/hw/intc/spapr_xive_kvm.c +++ b/hw/intc/spapr_xive_kvm.c @@ -73,7 +73,7 @@ static void kvm_cpu_disable_all(void) * XIVE Thread Interrupt Management context (KVM) */ -void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp) +int kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp) { SpaprXive *xive = SPAPR_XIVE(tctx->xptr); uint64_t state[2]; @@ -86,13 +86,16 @@ void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp) ret = kvm_set_one_reg(tctx->cs, KVM_REG_PPC_VP_STATE, state); if (ret != 0) { - error_setg_errno(errp, errno, + error_setg_errno(errp, -ret, "XIVE: could not restore KVM state of CPU %ld", kvm_arch_vcpu_id(tctx->cs)); + return ret; } + + return 0; } -void kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp) +int kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp) { SpaprXive *xive = SPAPR_XIVE(tctx->xptr); uint64_t state[2] = { 0 }; @@ -102,14 +105,16 @@ void kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp) ret = kvm_get_one_reg(tctx->cs, KVM_REG_PPC_VP_STATE, state); if (ret != 0) { - error_setg_errno(errp, errno, + error_setg_errno(errp, -ret, "XIVE: could not capture KVM state of CPU %ld", kvm_arch_vcpu_id(tctx->cs)); - return; + return ret; } /* word0 and word1 of the OS ring. */ *((uint64_t *) &tctx->regs[TM_QW1_OS]) = state[0]; + + return 0; } typedef struct { diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index 2d87ed43728a..785c905357dc 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -489,7 +489,7 @@ int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp); void kvmppc_xive_source_set_irq(void *opaque, int srcno, int val); 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); +int kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp); +int kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp); #endif /* PPC_XIVE_H */
kvm_set_one_reg() returns a negative errno on failure, use that instead of errno. Also propagate it to callers so they can use it to check for failures and hopefully get rid of their local_err boilerplate. Signed-off-by: Greg Kurz <groug@kaod.org> --- hw/intc/spapr_xive_kvm.c | 15 ++++++++++----- include/hw/ppc/xive.h | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-)