From: Greg Kurz <groug@kaod.org>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Cc: "Kevin Wolf" <kwolf@redhat.com>,
"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
qemu-devel@nongnu.org, armbru@redhat.com,
"Hervé Poussineau" <hpoussin@reactos.org>,
"Cédric Le Goater" <clg@kaod.org>,
qemu-ppc@nongnu.org, "David Gibson" <david@gibson.dropbear.id.au>
Subject: Re: [RFC v5 035/126] PowerPC Machines: introduce ERRP_AUTO_PROPAGATE
Date: Tue, 19 Nov 2019 19:00:49 +0100 [thread overview]
Message-ID: <20191119190049.183dbbf9@bahia.lan> (raw)
In-Reply-To: <20191011160552.22907-36-vsementsov@virtuozzo.com>
On Fri, 11 Oct 2019 19:04:21 +0300
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> wrote:
> If we want to add some info to errp (by error_prepend() or
> error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro.
> Otherwise, this info will not be added when errp == &fatal_err
> (the program will exit prior to the error_append_hint() or
> error_prepend() call). Fix such cases.
>
> If we want to check error after errp-function call, we need to
> introduce local_err and than propagate it to errp. Instead, use
> ERRP_AUTO_PROPAGATE macro, benefits are:
> 1. No need of explicit error_propagate call
> 2. No need of explicit local_err variable: use errp directly
> 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or
> &error_fatel, this means that we don't break error_abort
> (we'll abort on error_set, not on error_propagate)
>
> This commit (together with its neighbors) was generated by
>
> for f in $(git grep -l errp \*.[ch]); do \
> spatch --sp-file scripts/coccinelle/auto-propagated-errp.cocci \
> --macro-file scripts/cocci-macro-file.h --in-place --no-show-diff $f; \
> done;
>
> then fix a bit of compilation problems: coccinelle for some reason
> leaves several
> f() {
> ...
> goto out;
> ...
> out:
> }
> patterns, with "out:" at function end.
>
> then
> ./python/commit-per-subsystem.py MAINTAINERS "$(< auto-msg)"
>
> (auto-msg was a file with this commit message)
>
> Still, for backporting it may be more comfortable to use only the first
> command and then do one huge commit.
>
> Reported-by: Kevin Wolf <kwolf@redhat.com>
> Reported-by: Greg Kurz <groug@kaod.org>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
Reviewing such a big patch looks a frightening... PowerPC Machines covers
a lot of files. If this has to be automated, it would be better to split
according to each individual machine type IMHO. Or alternatively, come up
with a manual split, eg. sPAPR machine, PowerNV machine, XICS stuff, other
PowerPC machines.
> hw/intc/pnv_xive.c | 15 ++---
This gets caught because of hw/intc/pnv* but it would probably better
placed in the XIVE patch (065/126 in this series). Maybe we should
patch MAINTAINERS to be more precise.
> hw/intc/xics.c | 28 ++++-----
> hw/intc/xics_kvm.c | 30 +++++----
> hw/intc/xics_pnv.c | 7 +--
> hw/intc/xics_spapr.c | 7 +--
> hw/isa/pc87312.c | 7 +--
> hw/misc/macio/macio.c | 68 +++++++++-----------
> hw/ppc/e500.c | 7 +--
> hw/ppc/mac_newworld.c | 1 +
> hw/ppc/pnv.c | 109 ++++++++++++++------------------
> hw/ppc/pnv_core.c | 23 +++----
> hw/ppc/pnv_homer.c | 5 +-
> hw/ppc/pnv_lpc.c | 26 ++++----
> hw/ppc/pnv_occ.c | 5 +-
> hw/ppc/pnv_psi.c | 23 +++----
> hw/ppc/spapr.c | 133 ++++++++++++++++++----------------------
> hw/ppc/spapr_caps.c | 57 ++++++++---------
> hw/ppc/spapr_cpu_core.c | 36 +++++------
> hw/ppc/spapr_drc.c | 48 ++++++---------
> hw/ppc/spapr_irq.c | 98 +++++++++++++----------------
> hw/ppc/spapr_pci.c | 97 +++++++++++++----------------
> hw/ppc/spapr_vio.c | 12 ++--
> 22 files changed, 364 insertions(+), 478 deletions(-)
>
> diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c
> index ed6e9d71bb..05acec9b91 100644
> --- a/hw/intc/pnv_xive.c
> +++ b/hw/intc/pnv_xive.c
> @@ -1659,15 +1659,14 @@ static void pnv_xive_init(Object *obj)
>
> static void pnv_xive_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvXive *xive = PNV_XIVE(dev);
> XiveSource *xsrc = &xive->ipi_source;
> XiveENDSource *end_xsrc = &xive->end_source;
> - Error *local_err = NULL;
> Object *obj;
>
> - obj = object_property_get_link(OBJECT(dev), "chip", &local_err);
> + obj = object_property_get_link(OBJECT(dev), "chip", errp);
> if (!obj) {
> - error_propagate(errp, local_err);
> error_prepend(errp, "required link 'chip' not found: ");
> return;
> }
> @@ -1685,9 +1684,8 @@ static void pnv_xive_realize(DeviceState *dev, Error **errp)
> &error_fatal);
> object_property_add_const_link(OBJECT(xsrc), "xive", OBJECT(xive),
> &error_fatal);
> - object_property_set_bool(OBJECT(xsrc), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(xsrc), true, "realized", errp);
> + if (*errp) {
> return;
> }
>
> @@ -1695,9 +1693,8 @@ static void pnv_xive_realize(DeviceState *dev, Error **errp)
> &error_fatal);
> object_property_add_const_link(OBJECT(end_xsrc), "xive", OBJECT(xive),
> &error_fatal);
> - object_property_set_bool(OBJECT(end_xsrc), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(end_xsrc), true, "realized", errp);
> + if (*errp) {
> return;
> }
>
> diff --git a/hw/intc/xics.c b/hw/intc/xics.c
> index dfe7dbd254..91a3e8840a 100644
> --- a/hw/intc/xics.c
> +++ b/hw/intc/xics.c
> @@ -297,15 +297,15 @@ static void icp_reset_handler(void *dev)
>
> static void icp_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> ICPState *icp = ICP(dev);
> PowerPCCPU *cpu;
> CPUPPCState *env;
> Object *obj;
> - Error *err = NULL;
>
> - obj = object_property_get_link(OBJECT(dev), ICP_PROP_XICS, &err);
> + obj = object_property_get_link(OBJECT(dev), ICP_PROP_XICS, errp);
> if (!obj) {
> - error_propagate_prepend(errp, err,
> + error_prepend(errp,
> "required link '" ICP_PROP_XICS
> "' not found: ");
> return;
> @@ -313,9 +313,9 @@ static void icp_realize(DeviceState *dev, Error **errp)
>
> icp->xics = XICS_FABRIC(obj);
>
> - obj = object_property_get_link(OBJECT(dev), ICP_PROP_CPU, &err);
> + obj = object_property_get_link(OBJECT(dev), ICP_PROP_CPU, errp);
> if (!obj) {
> - error_propagate_prepend(errp, err,
> + error_prepend(errp,
> "required link '" ICP_PROP_CPU
> "' not found: ");
> return;
> @@ -344,9 +344,8 @@ static void icp_realize(DeviceState *dev, Error **errp)
>
> /* Connect the presenter to the VCPU (required for CPU hotplug) */
> if (kvm_irqchip_in_kernel()) {
> - icp_kvm_realize(dev, &err);
> - if (err) {
> - error_propagate(errp, err);
> + icp_kvm_realize(dev, errp);
> + if (*errp) {
> return;
> }
> }
> @@ -381,7 +380,7 @@ static const TypeInfo icp_info = {
>
> Object *icp_create(Object *cpu, const char *type, XICSFabric *xi, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> Object *obj;
>
> obj = object_new(type);
> @@ -390,10 +389,9 @@ Object *icp_create(Object *cpu, const char *type, XICSFabric *xi, Error **errp)
> object_property_add_const_link(obj, ICP_PROP_XICS, OBJECT(xi),
> &error_abort);
> object_property_add_const_link(obj, ICP_PROP_CPU, cpu, &error_abort);
> - object_property_set_bool(obj, true, "realized", &local_err);
> - if (local_err) {
> + object_property_set_bool(obj, true, "realized", errp);
> + if (*errp) {
> object_unparent(obj);
> - error_propagate(errp, local_err);
> obj = NULL;
> }
>
> @@ -587,13 +585,13 @@ static void ics_reset_handler(void *dev)
>
> static void ics_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> ICSState *ics = ICS(dev);
> - Error *local_err = NULL;
> Object *obj;
>
> - obj = object_property_get_link(OBJECT(dev), ICS_PROP_XICS, &local_err);
> + obj = object_property_get_link(OBJECT(dev), ICS_PROP_XICS, errp);
> if (!obj) {
> - error_propagate_prepend(errp, local_err,
> + error_prepend(errp,
> "required link '" ICS_PROP_XICS
> "' not found: ");
> return;
> diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c
> index ba90d6dc96..66902228e3 100644
> --- a/hw/intc/xics_kvm.c
> +++ b/hw/intc/xics_kvm.c
> @@ -294,6 +294,7 @@ int ics_set_kvm_state_one(ICSState *ics, int srcno, Error **errp)
>
> int ics_set_kvm_state(ICSState *ics, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> int i;
>
> /* The KVM XICS device is not in use */
> @@ -302,16 +303,14 @@ int ics_set_kvm_state(ICSState *ics, Error **errp)
> }
>
> for (i = 0; i < ics->nr_irqs; i++) {
> - Error *local_err = NULL;
> int ret;
>
> if (ics_irq_free(ics, i)) {
> continue;
> }
>
> - ret = ics_set_kvm_state_one(ics, i, &local_err);
> + ret = ics_set_kvm_state_one(ics, i, errp);
> if (ret < 0) {
> - error_propagate(errp, local_err);
> return ret;
> }
> }
> @@ -344,9 +343,9 @@ void ics_kvm_set_irq(ICSState *ics, int srcno, int val)
>
> int xics_kvm_connect(SpaprMachineState *spapr, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> int rc;
> CPUState *cs;
> - Error *local_err = NULL;
>
> /*
> * The KVM XICS device already in use. This is the case when
> @@ -364,28 +363,28 @@ int xics_kvm_connect(SpaprMachineState *spapr, Error **errp)
>
> rc = kvmppc_define_rtas_kernel_token(RTAS_IBM_SET_XIVE, "ibm,set-xive");
> if (rc < 0) {
> - error_setg_errno(&local_err, -rc,
> + error_setg_errno(errp, -rc,
> "kvmppc_define_rtas_kernel_token: ibm,set-xive");
> goto fail;
> }
>
> rc = kvmppc_define_rtas_kernel_token(RTAS_IBM_GET_XIVE, "ibm,get-xive");
> if (rc < 0) {
> - error_setg_errno(&local_err, -rc,
> + error_setg_errno(errp, -rc,
> "kvmppc_define_rtas_kernel_token: ibm,get-xive");
> goto fail;
> }
>
> rc = kvmppc_define_rtas_kernel_token(RTAS_IBM_INT_ON, "ibm,int-on");
> if (rc < 0) {
> - error_setg_errno(&local_err, -rc,
> + error_setg_errno(errp, -rc,
> "kvmppc_define_rtas_kernel_token: ibm,int-on");
> goto fail;
> }
>
> rc = kvmppc_define_rtas_kernel_token(RTAS_IBM_INT_OFF, "ibm,int-off");
> if (rc < 0) {
> - error_setg_errno(&local_err, -rc,
> + error_setg_errno(errp, -rc,
> "kvmppc_define_rtas_kernel_token: ibm,int-off");
> goto fail;
> }
> @@ -393,7 +392,7 @@ int xics_kvm_connect(SpaprMachineState *spapr, Error **errp)
> /* Create the KVM XICS device */
> rc = kvm_create_device(kvm_state, KVM_DEV_TYPE_XICS, false);
> if (rc < 0) {
> - error_setg_errno(&local_err, -rc, "Error on KVM_CREATE_DEVICE for XICS");
> + error_setg_errno(errp, -rc, "Error on KVM_CREATE_DEVICE for XICS");
> goto fail;
> }
>
> @@ -406,23 +405,23 @@ int xics_kvm_connect(SpaprMachineState *spapr, Error **errp)
> CPU_FOREACH(cs) {
> PowerPCCPU *cpu = POWERPC_CPU(cs);
>
> - icp_kvm_realize(DEVICE(spapr_cpu_state(cpu)->icp), &local_err);
> - if (local_err) {
> + icp_kvm_realize(DEVICE(spapr_cpu_state(cpu)->icp), errp);
> + if (*errp) {
> goto fail;
> }
> }
>
> /* Update the KVM sources */
> - ics_set_kvm_state(spapr->ics, &local_err);
> - if (local_err) {
> + ics_set_kvm_state(spapr->ics, errp);
> + if (*errp) {
> goto fail;
> }
>
> /* Connect the presenters to the initial VCPUs of the machine */
> CPU_FOREACH(cs) {
> PowerPCCPU *cpu = POWERPC_CPU(cs);
> - icp_set_kvm_state(spapr_cpu_state(cpu)->icp, &local_err);
> - if (local_err) {
> + icp_set_kvm_state(spapr_cpu_state(cpu)->icp, errp);
> + if (*errp) {
> goto fail;
> }
> }
> @@ -430,7 +429,6 @@ int xics_kvm_connect(SpaprMachineState *spapr, Error **errp)
> return 0;
>
> fail:
> - error_propagate(errp, local_err);
> xics_kvm_disconnect(spapr, NULL);
> return -1;
> }
> diff --git a/hw/intc/xics_pnv.c b/hw/intc/xics_pnv.c
> index 35f3811264..501aee21d7 100644
> --- a/hw/intc/xics_pnv.c
> +++ b/hw/intc/xics_pnv.c
> @@ -161,14 +161,13 @@ static const MemoryRegionOps pnv_icp_ops = {
>
> static void pnv_icp_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> ICPState *icp = ICP(dev);
> PnvICPState *pnv_icp = PNV_ICP(icp);
> ICPStateClass *icpc = ICP_GET_CLASS(icp);
> - Error *local_err = NULL;
>
> - icpc->parent_realize(dev, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + icpc->parent_realize(dev, errp);
> + if (*errp) {
> return;
> }
>
> diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c
> index 6e5eb24b3c..2c21ad8ea9 100644
> --- a/hw/intc/xics_spapr.c
> +++ b/hw/intc/xics_spapr.c
> @@ -285,13 +285,12 @@ static void rtas_int_on(PowerPCCPU *cpu, SpaprMachineState *spapr,
>
> static void ics_spapr_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> ICSState *ics = ICS_SPAPR(dev);
> ICSStateClass *icsc = ICS_GET_CLASS(ics);
> - Error *local_err = NULL;
>
> - icsc->parent_realize(dev, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + icsc->parent_realize(dev, errp);
> + if (*errp) {
> return;
> }
>
> diff --git a/hw/isa/pc87312.c b/hw/isa/pc87312.c
> index b9bd57471e..ac30eaed33 100644
> --- a/hw/isa/pc87312.c
> +++ b/hw/isa/pc87312.c
> @@ -291,18 +291,17 @@ static void pc87312_reset(DeviceState *d)
>
> static void pc87312_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PC87312State *s;
> ISADevice *isa;
> - Error *local_err = NULL;
>
> s = PC87312(dev);
> isa = ISA_DEVICE(dev);
> isa_register_ioport(isa, &s->io, s->iobase);
> pc87312_hard_reset(s);
>
> - ISA_SUPERIO_GET_CLASS(dev)->parent_realize(dev, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + ISA_SUPERIO_GET_CLASS(dev)->parent_realize(dev, errp);
> + if (*errp) {
> return;
> }
> }
> diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
> index 50f20d8206..612a8203d9 100644
> --- a/hw/misc/macio/macio.c
> +++ b/hw/misc/macio/macio.c
> @@ -105,13 +105,12 @@ static void macio_init_child_obj(MacIOState *s, const char *childname,
>
> static void macio_common_realize(PCIDevice *d, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> MacIOState *s = MACIO(d);
> SysBusDevice *sysbus_dev;
> - Error *err = NULL;
>
> - object_property_set_bool(OBJECT(&s->dbdma), true, "realized", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_bool(OBJECT(&s->dbdma), true, "realized", errp);
> + if (*errp) {
> return;
> }
> sysbus_dev = SYS_BUS_DEVICE(&s->dbdma);
> @@ -125,9 +124,8 @@ static void macio_common_realize(PCIDevice *d, Error **errp)
> qdev_prop_set_chr(DEVICE(&s->escc), "chrB", serial_hd(1));
> qdev_prop_set_uint32(DEVICE(&s->escc), "chnBtype", escc_serial);
> qdev_prop_set_uint32(DEVICE(&s->escc), "chnAtype", escc_serial);
> - object_property_set_bool(OBJECT(&s->escc), true, "realized", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_bool(OBJECT(&s->escc), true, "realized", errp);
> + if (*errp) {
> return;
> }
>
> @@ -153,23 +151,21 @@ static void macio_realize_ide(MacIOState *s, MACIOIDEState *ide,
>
> static void macio_oldworld_realize(PCIDevice *d, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> MacIOState *s = MACIO(d);
> OldWorldMacIOState *os = OLDWORLD_MACIO(d);
> DeviceState *pic_dev = DEVICE(os->pic);
> - Error *err = NULL;
> SysBusDevice *sysbus_dev;
>
> - macio_common_realize(d, &err);
> - if (err) {
> - error_propagate(errp, err);
> + macio_common_realize(d, errp);
> + if (*errp) {
> return;
> }
>
> qdev_prop_set_uint64(DEVICE(&s->cuda), "timebase-frequency",
> s->frequency);
> - object_property_set_bool(OBJECT(&s->cuda), true, "realized", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_bool(OBJECT(&s->cuda), true, "realized", errp);
> + if (*errp) {
> return;
> }
> sysbus_dev = SYS_BUS_DEVICE(&s->cuda);
> @@ -184,9 +180,8 @@ static void macio_oldworld_realize(PCIDevice *d, Error **errp)
> sysbus_connect_irq(sysbus_dev, 1, qdev_get_gpio_in(pic_dev,
> OLDWORLD_ESCCA_IRQ));
>
> - object_property_set_bool(OBJECT(&os->nvram), true, "realized", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_bool(OBJECT(&os->nvram), true, "realized", errp);
> + if (*errp) {
> return;
> }
> sysbus_dev = SYS_BUS_DEVICE(&os->nvram);
> @@ -203,18 +198,16 @@ static void macio_oldworld_realize(PCIDevice *d, Error **errp)
> macio_realize_ide(s, &os->ide[0],
> qdev_get_gpio_in(pic_dev, OLDWORLD_IDE0_IRQ),
> qdev_get_gpio_in(pic_dev, OLDWORLD_IDE0_DMA_IRQ),
> - 0x16, &err);
> - if (err) {
> - error_propagate(errp, err);
> + 0x16, errp);
> + if (*errp) {
> return;
> }
>
> macio_realize_ide(s, &os->ide[1],
> qdev_get_gpio_in(pic_dev, OLDWORLD_IDE1_IRQ),
> qdev_get_gpio_in(pic_dev, OLDWORLD_IDE1_DMA_IRQ),
> - 0x1a, &err);
> - if (err) {
> - error_propagate(errp, err);
> + 0x1a, errp);
> + if (*errp) {
> return;
> }
> }
> @@ -291,16 +284,15 @@ static const MemoryRegionOps timer_ops = {
>
> static void macio_newworld_realize(PCIDevice *d, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> MacIOState *s = MACIO(d);
> NewWorldMacIOState *ns = NEWWORLD_MACIO(d);
> DeviceState *pic_dev = DEVICE(ns->pic);
> - Error *err = NULL;
> SysBusDevice *sysbus_dev;
> MemoryRegion *timer_memory = NULL;
>
> - macio_common_realize(d, &err);
> - if (err) {
> - error_propagate(errp, err);
> + macio_common_realize(d, errp);
> + if (*errp) {
> return;
> }
>
> @@ -319,18 +311,16 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
> macio_realize_ide(s, &ns->ide[0],
> qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_IRQ),
> qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_DMA_IRQ),
> - 0x16, &err);
> - if (err) {
> - error_propagate(errp, err);
> + 0x16, errp);
> + if (*errp) {
> return;
> }
>
> macio_realize_ide(s, &ns->ide[1],
> qdev_get_gpio_in(pic_dev, NEWWORLD_IDE1_IRQ),
> qdev_get_gpio_in(pic_dev, NEWWORLD_IDE1_DMA_IRQ),
> - 0x1a, &err);
> - if (err) {
> - error_propagate(errp, err);
> + 0x1a, errp);
> + if (*errp) {
> return;
> }
>
> @@ -347,7 +337,7 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
> &error_abort);
> memory_region_add_subregion(&s->bar, 0x50,
> sysbus_mmio_get_region(sysbus_dev, 0));
> - object_property_set_bool(OBJECT(&ns->gpio), true, "realized", &err);
> + object_property_set_bool(OBJECT(&ns->gpio), true, "realized", errp);
>
> /* PMU */
> object_initialize_child(OBJECT(s), "pmu", &s->pmu, sizeof(s->pmu),
> @@ -357,9 +347,8 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
> qdev_prop_set_bit(DEVICE(&s->pmu), "has-adb", ns->has_adb);
> qdev_set_parent_bus(DEVICE(&s->pmu), BUS(&s->macio_bus));
>
> - object_property_set_bool(OBJECT(&s->pmu), true, "realized", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_bool(OBJECT(&s->pmu), true, "realized", errp);
> + if (*errp) {
> return;
> }
> sysbus_dev = SYS_BUS_DEVICE(&s->pmu);
> @@ -375,9 +364,8 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
> qdev_prop_set_uint64(DEVICE(&s->cuda), "timebase-frequency",
> s->frequency);
>
> - object_property_set_bool(OBJECT(&s->cuda), true, "realized", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_bool(OBJECT(&s->cuda), true, "realized", errp);
> + if (*errp) {
> return;
> }
> sysbus_dev = SYS_BUS_DEVICE(&s->cuda);
> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
> index 91cd4c26f9..468d667261 100644
> --- a/hw/ppc/e500.c
> +++ b/hw/ppc/e500.c
> @@ -764,16 +764,15 @@ static DeviceState *ppce500_init_mpic_qemu(PPCE500MachineState *pms,
> static DeviceState *ppce500_init_mpic_kvm(const PPCE500MachineClass *pmc,
> IrqLines *irqs, Error **errp)
> {
> - Error *err = NULL;
> + ERRP_AUTO_PROPAGATE();
> DeviceState *dev;
> CPUState *cs;
>
> dev = qdev_create(NULL, TYPE_KVM_OPENPIC);
> qdev_prop_set_uint32(dev, "model", pmc->mpic_version);
>
> - object_property_set_bool(OBJECT(dev), true, "realized", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_bool(OBJECT(dev), true, "realized", errp);
> + if (*errp) {
> object_unparent(OBJECT(dev));
> return NULL;
> }
> diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
> index c5bbcc7433..1a37412d31 100644
> --- a/hw/ppc/mac_newworld.c
> +++ b/hw/ppc/mac_newworld.c
> @@ -609,6 +609,7 @@ static char *core99_get_via_config(Object *obj, Error **errp)
>
> static void core99_set_via_config(Object *obj, const char *value, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> Core99MachineState *cms = CORE99_MACHINE(obj);
>
> if (!strcmp(value, "cuda")) {
> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
> index 7cf64b6d25..7155259f13 100644
> --- a/hw/ppc/pnv.c
> +++ b/hw/ppc/pnv.c
> @@ -764,14 +764,13 @@ static uint32_t pnv_chip_core_pir_p8(PnvChip *chip, uint32_t core_id)
> static void pnv_chip_power8_intc_create(PnvChip *chip, PowerPCCPU *cpu,
> Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> Object *obj;
> PnvCPUState *pnv_cpu = pnv_cpu_state(cpu);
>
> obj = icp_create(OBJECT(cpu), TYPE_PNV_ICP, XICS_FABRIC(qdev_get_machine()),
> - &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + errp);
> + if (*errp) {
> return;
> }
>
> @@ -796,8 +795,8 @@ static uint32_t pnv_chip_core_pir_p9(PnvChip *chip, uint32_t core_id)
> static void pnv_chip_power9_intc_create(PnvChip *chip, PowerPCCPU *cpu,
> Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> Pnv9Chip *chip9 = PNV9_CHIP(chip);
> - Error *local_err = NULL;
> Object *obj;
> PnvCPUState *pnv_cpu = pnv_cpu_state(cpu);
>
> @@ -806,9 +805,8 @@ static void pnv_chip_power9_intc_create(PnvChip *chip, PowerPCCPU *cpu,
> * controller object is initialized afterwards. Hopefully, it's
> * only used at runtime.
> */
> - obj = xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(&chip9->xive), &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + obj = xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(&chip9->xive), errp);
> + if (*errp) {
> return;
> }
>
> @@ -901,32 +899,29 @@ static void pnv_chip_icp_realize(Pnv8Chip *chip8, Error **errp)
>
> static void pnv_chip_power8_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvChipClass *pcc = PNV_CHIP_GET_CLASS(dev);
> PnvChip *chip = PNV_CHIP(dev);
> Pnv8Chip *chip8 = PNV8_CHIP(dev);
> Pnv8Psi *psi8 = &chip8->psi;
> - Error *local_err = NULL;
>
> /* XSCOM bridge is first */
> - pnv_xscom_realize(chip, PNV_XSCOM_SIZE, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + pnv_xscom_realize(chip, PNV_XSCOM_SIZE, errp);
> + if (*errp) {
> return;
> }
> sysbus_mmio_map(SYS_BUS_DEVICE(chip), 0, PNV_XSCOM_BASE(chip));
>
> - pcc->parent_realize(dev, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + pcc->parent_realize(dev, errp);
> + if (*errp) {
> return;
> }
>
> /* Processor Service Interface (PSI) Host Bridge */
> object_property_set_int(OBJECT(&chip8->psi), PNV_PSIHB_BASE(chip),
> "bar", &error_fatal);
> - object_property_set_bool(OBJECT(&chip8->psi), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(&chip8->psi), true, "realized", errp);
> + if (*errp) {
> return;
> }
> pnv_xscom_add_subregion(chip, PNV_XSCOM_PSIHB_BASE,
> @@ -945,16 +940,14 @@ static void pnv_chip_power8_realize(DeviceState *dev, Error **errp)
> * Interrupt Management Area. This is the memory region holding
> * all the Interrupt Control Presenter (ICP) registers
> */
> - pnv_chip_icp_realize(chip8, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + pnv_chip_icp_realize(chip8, errp);
> + if (*errp) {
> return;
> }
>
> /* Create the simplified OCC model */
> - object_property_set_bool(OBJECT(&chip8->occ), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(&chip8->occ), true, "realized", errp);
> + if (*errp) {
> return;
> }
> pnv_xscom_add_subregion(chip, PNV_XSCOM_OCC_BASE, &chip8->occ.xscom_regs);
> @@ -965,9 +958,8 @@ static void pnv_chip_power8_realize(DeviceState *dev, Error **errp)
>
> /* HOMER */
> object_property_set_bool(OBJECT(&chip8->homer), true, "realized",
> - &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + errp);
> + if (*errp) {
> return;
> }
> memory_region_add_subregion(get_system_memory(), PNV_HOMER_BASE(chip),
> @@ -1091,29 +1083,26 @@ static void pnv_chip_quad_realize(Pnv9Chip *chip9, Error **errp)
>
> static void pnv_chip_power9_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvChipClass *pcc = PNV_CHIP_GET_CLASS(dev);
> Pnv9Chip *chip9 = PNV9_CHIP(dev);
> PnvChip *chip = PNV_CHIP(dev);
> Pnv9Psi *psi9 = &chip9->psi;
> - Error *local_err = NULL;
>
> /* XSCOM bridge is first */
> - pnv_xscom_realize(chip, PNV9_XSCOM_SIZE, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + pnv_xscom_realize(chip, PNV9_XSCOM_SIZE, errp);
> + if (*errp) {
> return;
> }
> sysbus_mmio_map(SYS_BUS_DEVICE(chip), 0, PNV9_XSCOM_BASE(chip));
>
> - pcc->parent_realize(dev, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + pcc->parent_realize(dev, errp);
> + if (*errp) {
> return;
> }
>
> - pnv_chip_quad_realize(chip9, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + pnv_chip_quad_realize(chip9, errp);
> + if (*errp) {
> return;
> }
>
> @@ -1127,9 +1116,8 @@ static void pnv_chip_power9_realize(DeviceState *dev, Error **errp)
> object_property_set_int(OBJECT(&chip9->xive), PNV9_XIVE_TM_BASE(chip),
> "tm-bar", &error_fatal);
> object_property_set_bool(OBJECT(&chip9->xive), true, "realized",
> - &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + errp);
> + if (*errp) {
> return;
> }
> pnv_xscom_add_subregion(chip, PNV9_XSCOM_XIVE_BASE,
> @@ -1138,18 +1126,16 @@ static void pnv_chip_power9_realize(DeviceState *dev, Error **errp)
> /* Processor Service Interface (PSI) Host Bridge */
> object_property_set_int(OBJECT(&chip9->psi), PNV9_PSIHB_BASE(chip),
> "bar", &error_fatal);
> - object_property_set_bool(OBJECT(&chip9->psi), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(&chip9->psi), true, "realized", errp);
> + if (*errp) {
> return;
> }
> pnv_xscom_add_subregion(chip, PNV9_XSCOM_PSIHB_BASE,
> &PNV_PSI(psi9)->xscom_regs);
>
> /* LPC */
> - object_property_set_bool(OBJECT(&chip9->lpc), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(&chip9->lpc), true, "realized", errp);
> + if (*errp) {
> return;
> }
> memory_region_add_subregion(get_system_memory(), PNV9_LPCM_BASE(chip),
> @@ -1159,9 +1145,8 @@ static void pnv_chip_power9_realize(DeviceState *dev, Error **errp)
> (uint64_t) PNV9_LPCM_BASE(chip));
>
> /* Create the simplified OCC model */
> - object_property_set_bool(OBJECT(&chip9->occ), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(&chip9->occ), true, "realized", errp);
> + if (*errp) {
> return;
> }
> pnv_xscom_add_subregion(chip, PNV9_XSCOM_OCC_BASE, &chip9->occ.xscom_regs);
> @@ -1172,9 +1157,8 @@ static void pnv_chip_power9_realize(DeviceState *dev, Error **errp)
>
> /* HOMER */
> object_property_set_bool(OBJECT(&chip9->homer), true, "realized",
> - &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + errp);
> + if (*errp) {
> return;
> }
> memory_region_add_subregion(get_system_memory(), PNV9_HOMER_BASE(chip),
> @@ -1232,8 +1216,8 @@ static void pnv_chip_core_sanitize(PnvChip *chip, Error **errp)
>
> static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> MachineState *ms = MACHINE(qdev_get_machine());
> - Error *error = NULL;
> PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
> const char *typename = pnv_chip_core_typename(chip);
> size_t typesize = object_type_get_instance_size(typename);
> @@ -1245,9 +1229,8 @@ static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
> }
>
> /* Cores */
> - pnv_chip_core_sanitize(chip, &error);
> - if (error) {
> - error_propagate(errp, error);
> + pnv_chip_core_sanitize(chip, errp);
> + if (*errp) {
> return;
> }
>
> @@ -1293,13 +1276,12 @@ static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
>
> static void pnv_chip_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvChip *chip = PNV_CHIP(dev);
> - Error *error = NULL;
>
> /* Cores */
> - pnv_chip_core_realize(chip, &error);
> - if (error) {
> - error_propagate(errp, error);
> + pnv_chip_core_realize(chip, errp);
> + if (*errp) {
> return;
> }
> }
> @@ -1387,13 +1369,12 @@ static void pnv_get_num_chips(Object *obj, Visitor *v, const char *name,
> static void pnv_set_num_chips(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvMachineState *pnv = PNV_MACHINE(obj);
> uint32_t num_chips;
> - Error *local_err = NULL;
>
> - visit_type_uint32(v, name, &num_chips, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + visit_type_uint32(v, name, &num_chips, errp);
> + if (*errp) {
> return;
> }
>
> diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
> index b1a7489e7a..c45b326f78 100644
> --- a/hw/ppc/pnv_core.c
> +++ b/hw/ppc/pnv_core.c
> @@ -162,22 +162,20 @@ static const MemoryRegionOps pnv_core_power9_xscom_ops = {
>
> static void pnv_realize_vcpu(PowerPCCPU *cpu, PnvChip *chip, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> CPUPPCState *env = &cpu->env;
> int core_pir;
> int thread_index = 0; /* TODO: TCG supports only one thread */
> ppc_spr_t *pir = &env->spr_cb[SPR_PIR];
> - Error *local_err = NULL;
> PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
>
> - object_property_set_bool(OBJECT(cpu), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(cpu), true, "realized", errp);
> + if (*errp) {
> return;
> }
>
> - pcc->intc_create(chip, cpu, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + pcc->intc_create(chip, cpu, errp);
> + if (*errp) {
> return;
> }
>
> @@ -198,19 +196,19 @@ static void pnv_realize_vcpu(PowerPCCPU *cpu, PnvChip *chip, Error **errp)
>
> static void pnv_core_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvCore *pc = PNV_CORE(OBJECT(dev));
> PnvCoreClass *pcc = PNV_CORE_GET_CLASS(pc);
> CPUCore *cc = CPU_CORE(OBJECT(dev));
> const char *typename = pnv_core_cpu_typename(pc);
> - Error *local_err = NULL;
> void *obj;
> int i, j;
> char name[32];
> Object *chip;
>
> - chip = object_property_get_link(OBJECT(dev), "chip", &local_err);
> + chip = object_property_get_link(OBJECT(dev), "chip", errp);
> if (!chip) {
> - error_propagate_prepend(errp, local_err,
> + error_prepend(errp,
> "required link 'chip' not found: ");
> return;
> }
> @@ -235,8 +233,8 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
> }
>
> for (j = 0; j < cc->nr_threads; j++) {
> - pnv_realize_vcpu(pc->threads[j], PNV_CHIP(chip), &local_err);
> - if (local_err) {
> + pnv_realize_vcpu(pc->threads[j], PNV_CHIP(chip), errp);
> + if (*errp) {
> goto err;
> }
> }
> @@ -252,7 +250,6 @@ err:
> object_unparent(obj);
> }
> g_free(pc->threads);
> - error_propagate(errp, local_err);
> }
>
> static void pnv_unrealize_vcpu(PowerPCCPU *cpu)
> diff --git a/hw/ppc/pnv_homer.c b/hw/ppc/pnv_homer.c
> index cc881a3b32..80e3acf94a 100644
> --- a/hw/ppc/pnv_homer.c
> +++ b/hw/ppc/pnv_homer.c
> @@ -227,14 +227,13 @@ static const TypeInfo pnv_homer_power9_type_info = {
>
> static void pnv_homer_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvHomer *homer = PNV_HOMER(dev);
> PnvHomerClass *hmrc = PNV_HOMER_GET_CLASS(homer);
> Object *obj;
> - Error *local_err = NULL;
>
> - obj = object_property_get_link(OBJECT(dev), "chip", &local_err);
> + obj = object_property_get_link(OBJECT(dev), "chip", errp);
> if (!obj) {
> - error_propagate(errp, local_err);
> error_prepend(errp, "required link 'chip' not found: ");
> return;
> }
> diff --git a/hw/ppc/pnv_lpc.c b/hw/ppc/pnv_lpc.c
> index 9466d4a1be..7f6041cc28 100644
> --- a/hw/ppc/pnv_lpc.c
> +++ b/hw/ppc/pnv_lpc.c
> @@ -599,13 +599,12 @@ static const MemoryRegionOps opb_master_ops = {
>
> static void pnv_lpc_power8_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvLpcController *lpc = PNV_LPC(dev);
> PnvLpcClass *plc = PNV_LPC_GET_CLASS(dev);
> - Error *local_err = NULL;
>
> - plc->parent_realize(dev, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + plc->parent_realize(dev, errp);
> + if (*errp) {
> return;
> }
>
> @@ -644,13 +643,12 @@ static const TypeInfo pnv_lpc_power8_info = {
>
> static void pnv_lpc_power9_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvLpcController *lpc = PNV_LPC(dev);
> PnvLpcClass *plc = PNV_LPC_GET_CLASS(dev);
> - Error *local_err = NULL;
>
> - plc->parent_realize(dev, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + plc->parent_realize(dev, errp);
> + if (*errp) {
> return;
> }
>
> @@ -681,13 +679,12 @@ static const TypeInfo pnv_lpc_power9_info = {
>
> static void pnv_lpc_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvLpcController *lpc = PNV_LPC(dev);
> Object *obj;
> - Error *local_err = NULL;
>
> - obj = object_property_get_link(OBJECT(dev), "psi", &local_err);
> + obj = object_property_get_link(OBJECT(dev), "psi", errp);
> if (!obj) {
> - error_propagate(errp, local_err);
> error_prepend(errp, "required link 'psi' not found: ");
> return;
> }
> @@ -797,7 +794,7 @@ static void pnv_lpc_isa_irq_handler(void *opaque, int n, int level)
>
> ISABus *pnv_lpc_isa_create(PnvLpcController *lpc, bool use_cpld, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> ISABus *isa_bus;
> qemu_irq *irqs;
> qemu_irq_handler handler;
> @@ -806,9 +803,8 @@ ISABus *pnv_lpc_isa_create(PnvLpcController *lpc, bool use_cpld, Error **errp)
> * devices speficied on the command line won't find the bus and
> * will fail to create.
> */
> - isa_bus = isa_bus_new(NULL, &lpc->isa_mem, &lpc->isa_io, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + isa_bus = isa_bus_new(NULL, &lpc->isa_mem, &lpc->isa_io, errp);
> + if (*errp) {
> return NULL;
> }
>
> diff --git a/hw/ppc/pnv_occ.c b/hw/ppc/pnv_occ.c
> index 785653bb67..3306109a9b 100644
> --- a/hw/ppc/pnv_occ.c
> +++ b/hw/ppc/pnv_occ.c
> @@ -255,16 +255,15 @@ static const TypeInfo pnv_occ_power9_type_info = {
>
> static void pnv_occ_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvOCC *occ = PNV_OCC(dev);
> PnvOCCClass *poc = PNV_OCC_GET_CLASS(occ);
> Object *obj;
> - Error *local_err = NULL;
>
> occ->occmisc = 0;
>
> - obj = object_property_get_link(OBJECT(dev), "psi", &local_err);
> + obj = object_property_get_link(OBJECT(dev), "psi", errp);
> if (!obj) {
> - error_propagate(errp, local_err);
> error_prepend(errp, "required link 'psi' not found: ");
> return;
> }
> diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c
> index a997f16bb4..e96db52b82 100644
> --- a/hw/ppc/pnv_psi.c
> +++ b/hw/ppc/pnv_psi.c
> @@ -483,30 +483,28 @@ static const uint8_t irq_to_xivr[] = {
>
> static void pnv_psi_power8_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvPsi *psi = PNV_PSI(dev);
> ICSState *ics = &PNV8_PSI(psi)->ics;
> Object *obj;
> - Error *err = NULL;
> unsigned int i;
>
> - obj = object_property_get_link(OBJECT(dev), "xics", &err);
> + obj = object_property_get_link(OBJECT(dev), "xics", errp);
> if (!obj) {
> error_setg(errp, "%s: required link 'xics' not found: %s",
> - __func__, error_get_pretty(err));
> + __func__, error_get_pretty(*errp));
> return;
> }
>
> /* Create PSI interrupt control source */
> object_property_add_const_link(OBJECT(ics), ICS_PROP_XICS, obj,
> &error_abort);
> - object_property_set_int(OBJECT(ics), PSI_NUM_INTERRUPTS, "nr-irqs", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_int(OBJECT(ics), PSI_NUM_INTERRUPTS, "nr-irqs", errp);
> + if (*errp) {
> return;
> }
> - object_property_set_bool(OBJECT(ics), true, "realized", &err);
> - if (err) {
> - error_propagate(errp, err);
> + object_property_set_bool(OBJECT(ics), true, "realized", errp);
> + if (*errp) {
> return;
> }
>
> @@ -832,9 +830,9 @@ static void pnv_psi_power9_instance_init(Object *obj)
>
> static void pnv_psi_power9_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PnvPsi *psi = PNV_PSI(dev);
> XiveSource *xsrc = &PNV9_PSI(psi)->source;
> - Error *local_err = NULL;
> int i;
>
> /* This is the only device with 4k ESB pages */
> @@ -844,9 +842,8 @@ static void pnv_psi_power9_realize(DeviceState *dev, Error **errp)
> &error_fatal);
> object_property_add_const_link(OBJECT(xsrc), "xive", OBJECT(psi),
> &error_fatal);
> - object_property_set_bool(OBJECT(xsrc), true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(OBJECT(xsrc), true, "realized", errp);
> + if (*errp) {
> return;
> }
>
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 6729269aa9..7d59e53020 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -2503,31 +2503,31 @@ static CPUArchId *spapr_find_cpu_slot(MachineState *ms, uint32_t id, int *idx)
>
> static void spapr_set_vsmt_mode(SpaprMachineState *spapr, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> MachineState *ms = MACHINE(spapr);
> - Error *local_err = NULL;
> bool vsmt_user = !!spapr->vsmt;
> int kvm_smt = kvmppc_smt_threads();
> int ret;
> unsigned int smp_threads = ms->smp.threads;
>
> if (!kvm_enabled() && (smp_threads > 1)) {
> - error_setg(&local_err, "TCG cannot support more than 1 thread/core "
> + error_setg(errp, "TCG cannot support more than 1 thread/core "
> "on a pseries machine");
> - goto out;
> + return;
> }
> if (!is_power_of_2(smp_threads)) {
> - error_setg(&local_err, "Cannot support %d threads/core on a pseries "
> + error_setg(errp, "Cannot support %d threads/core on a pseries "
> "machine because it must be a power of 2", smp_threads);
> - goto out;
> + return;
> }
>
> /* Detemine the VSMT mode to use: */
> if (vsmt_user) {
> if (spapr->vsmt < smp_threads) {
> - error_setg(&local_err, "Cannot support VSMT mode %d"
> + error_setg(errp, "Cannot support VSMT mode %d"
> " because it must be >= threads/core (%d)",
> spapr->vsmt, smp_threads);
> - goto out;
> + return;
> }
> /* In this case, spapr->vsmt has been set by the command line */
> } else {
> @@ -2546,7 +2546,7 @@ static void spapr_set_vsmt_mode(SpaprMachineState *spapr, Error **errp)
> ret = kvmppc_set_smt_threads(spapr->vsmt);
> if (ret) {
> /* Looks like KVM isn't able to change VSMT mode */
> - error_setg(&local_err,
> + error_setg(errp,
> "Failed to set KVM's VSMT mode to %d (errno %d)",
> spapr->vsmt, ret);
> /* We can live with that if the default one is big enough
> @@ -2554,25 +2554,22 @@ static void spapr_set_vsmt_mode(SpaprMachineState *spapr, Error **errp)
> * we want. In this case we'll waste some vcpu ids, but
> * behaviour will be correct */
> if ((kvm_smt >= smp_threads) && ((spapr->vsmt % kvm_smt) == 0)) {
> - warn_report_err(local_err);
> - local_err = NULL;
> - goto out;
> + warn_report_errp(errp);
> + *errp = NULL;
> + return;
> } else {
> if (!vsmt_user) {
> - error_append_hint(&local_err,
> + error_append_hint(errp,
> "On PPC, a VM with %d threads/core"
> " on a host with %d threads/core"
> " requires the use of VSMT mode %d.\n",
> smp_threads, kvm_smt, spapr->vsmt);
> }
> - error_append_kvmppc_smt_possible_hint(&local_err);
> - goto out;
> + error_append_kvmppc_smt_possible_hint(errp);
> + return;
> }
> }
> }
> - /* else TCG: nothing to do currently */
> -out:
> - error_propagate(errp, local_err);
> }
>
> static void spapr_init_cpus(SpaprMachineState *spapr)
> @@ -3404,27 +3401,26 @@ int spapr_lmb_dt_populate(SpaprDrc *drc, SpaprMachineState *spapr,
> static void spapr_add_lmbs(DeviceState *dev, uint64_t addr_start, uint64_t size,
> bool dedicated_hp_event_source, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprDrc *drc;
> uint32_t nr_lmbs = size/SPAPR_MEMORY_BLOCK_SIZE;
> int i;
> uint64_t addr = addr_start;
> bool hotplugged = spapr_drc_hotplugged(dev);
> - Error *local_err = NULL;
>
> for (i = 0; i < nr_lmbs; i++) {
> drc = spapr_drc_by_id(TYPE_SPAPR_DRC_LMB,
> addr / SPAPR_MEMORY_BLOCK_SIZE);
> g_assert(drc);
>
> - spapr_drc_attach(drc, dev, &local_err);
> - if (local_err) {
> + spapr_drc_attach(drc, dev, errp);
> + if (*errp) {
> while (addr > addr_start) {
> addr -= SPAPR_MEMORY_BLOCK_SIZE;
> drc = spapr_drc_by_id(TYPE_SPAPR_DRC_LMB,
> addr / SPAPR_MEMORY_BLOCK_SIZE);
> spapr_drc_detach(drc);
> }
> - error_propagate(errp, local_err);
> return;
> }
> if (!hotplugged) {
> @@ -3452,27 +3448,27 @@ static void spapr_add_lmbs(DeviceState *dev, uint64_t addr_start, uint64_t size,
> static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> SpaprMachineState *ms = SPAPR_MACHINE(hotplug_dev);
> PCDIMMDevice *dimm = PC_DIMM(dev);
> uint64_t size, addr;
>
> size = memory_device_get_region_size(MEMORY_DEVICE(dev), &error_abort);
>
> - pc_dimm_plug(dimm, MACHINE(ms), &local_err);
> - if (local_err) {
> - goto out;
> + pc_dimm_plug(dimm, MACHINE(ms), errp);
> + if (*errp) {
> + return;
> }
>
> addr = object_property_get_uint(OBJECT(dimm),
> - PC_DIMM_ADDR_PROP, &local_err);
> - if (local_err) {
> + PC_DIMM_ADDR_PROP, errp);
> + if (*errp) {
> goto out_unplug;
> }
>
> spapr_add_lmbs(dev, addr, size, spapr_ovec_test(ms->ov5_cas, OV5_HP_EVT),
> - &local_err);
> - if (local_err) {
> + errp);
> + if (*errp) {
> goto out_unplug;
> }
>
> @@ -3480,17 +3476,15 @@ static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
>
> out_unplug:
> pc_dimm_unplug(dimm, MACHINE(ms));
> -out:
> - error_propagate(errp, local_err);
> }
>
> static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> const SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(hotplug_dev);
> SpaprMachineState *spapr = SPAPR_MACHINE(hotplug_dev);
> PCDIMMDevice *dimm = PC_DIMM(dev);
> - Error *local_err = NULL;
> uint64_t size;
> Object *memdev;
> hwaddr pagesize;
> @@ -3500,9 +3494,8 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> return;
> }
>
> - size = memory_device_get_region_size(MEMORY_DEVICE(dimm), &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + size = memory_device_get_region_size(MEMORY_DEVICE(dimm), errp);
> + if (*errp) {
> return;
> }
>
> @@ -3515,9 +3508,8 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> memdev = object_property_get_link(OBJECT(dimm), PC_DIMM_MEMDEV_PROP,
> &error_abort);
> pagesize = host_memory_backend_pagesize(MEMORY_BACKEND(memdev));
> - spapr_check_pagesize(spapr, pagesize, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_check_pagesize(spapr, pagesize, errp);
> + if (*errp) {
> return;
> }
>
> @@ -3641,8 +3633,8 @@ static void spapr_memory_unplug(HotplugHandler *hotplug_dev, DeviceState *dev)
> static void spapr_memory_unplug_request(HotplugHandler *hotplug_dev,
> DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprMachineState *spapr = SPAPR_MACHINE(hotplug_dev);
> - Error *local_err = NULL;
> PCDIMMDevice *dimm = PC_DIMM(dev);
> uint32_t nr_lmbs;
> uint64_t size, addr_start, addr;
> @@ -3653,9 +3645,9 @@ static void spapr_memory_unplug_request(HotplugHandler *hotplug_dev,
> nr_lmbs = size / SPAPR_MEMORY_BLOCK_SIZE;
>
> addr_start = object_property_get_uint(OBJECT(dimm), PC_DIMM_ADDR_PROP,
> - &local_err);
> - if (local_err) {
> - goto out;
> + errp);
> + if (*errp) {
> + return;
> }
>
> /*
> @@ -3665,10 +3657,10 @@ static void spapr_memory_unplug_request(HotplugHandler *hotplug_dev,
> * bail out to avoid detaching DRCs that were already released.
> */
> if (spapr_pending_dimm_unplugs_find(spapr, dimm)) {
> - error_setg(&local_err,
> + error_setg(errp,
> "Memory unplug already in progress for device %s",
> dev->id);
> - goto out;
> + return;
> }
>
> spapr_pending_dimm_unplugs_add(spapr, nr_lmbs, dimm);
> @@ -3687,8 +3679,6 @@ static void spapr_memory_unplug_request(HotplugHandler *hotplug_dev,
> addr_start / SPAPR_MEMORY_BLOCK_SIZE);
> spapr_hotplug_req_remove_by_count_indexed(SPAPR_DR_CONNECTOR_TYPE_LMB,
> nr_lmbs, spapr_drc_index(drc));
> -out:
> - error_propagate(errp, local_err);
> }
>
> /* Callback to be called during DRC release. */
> @@ -3776,6 +3766,7 @@ int spapr_core_dt_populate(SpaprDrc *drc, SpaprMachineState *spapr,
> static void spapr_core_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprMachineState *spapr = SPAPR_MACHINE(OBJECT(hotplug_dev));
> MachineClass *mc = MACHINE_GET_CLASS(spapr);
> SpaprMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
> @@ -3783,7 +3774,6 @@ static void spapr_core_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> CPUCore *cc = CPU_CORE(dev);
> CPUState *cs;
> SpaprDrc *drc;
> - Error *local_err = NULL;
> CPUArchId *core_slot;
> int index;
> bool hotplugged = spapr_drc_hotplugged(dev);
> @@ -3801,9 +3791,8 @@ static void spapr_core_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> g_assert(drc || !mc->has_hotpluggable_cpus);
>
> if (drc) {
> - spapr_drc_attach(drc, dev, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_drc_attach(drc, dev, errp);
> + if (*errp) {
> return;
> }
>
> @@ -3834,9 +3823,8 @@ static void spapr_core_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> if (hotplugged) {
> for (i = 0; i < cc->nr_threads; i++) {
> ppc_set_compat(core->threads[i], POWERPC_CPU(first_cpu)->compat_pvr,
> - &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + errp);
> + if (*errp) {
> return;
> }
> }
> @@ -3846,9 +3834,9 @@ static void spapr_core_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> static void spapr_core_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> MachineState *machine = MACHINE(OBJECT(hotplug_dev));
> MachineClass *mc = MACHINE_GET_CLASS(hotplug_dev);
> - Error *local_err = NULL;
> CPUCore *cc = CPU_CORE(dev);
> const char *base_core_type = spapr_get_cpu_core_type(machine->cpu_type);
> const char *type = object_get_typename(OBJECT(dev));
> @@ -3857,18 +3845,18 @@ static void spapr_core_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> unsigned int smp_threads = machine->smp.threads;
>
> if (dev->hotplugged && !mc->has_hotpluggable_cpus) {
> - error_setg(&local_err, "CPU hotplug not supported for this machine");
> - goto out;
> + error_setg(errp, "CPU hotplug not supported for this machine");
> + return;
> }
>
> if (strcmp(base_core_type, type)) {
> - error_setg(&local_err, "CPU core type should be %s", base_core_type);
> - goto out;
> + error_setg(errp, "CPU core type should be %s", base_core_type);
> + return;
> }
>
> if (cc->core_id % smp_threads) {
> - error_setg(&local_err, "invalid core id %d", cc->core_id);
> - goto out;
> + error_setg(errp, "invalid core id %d", cc->core_id);
> + return;
> }
>
> /*
> @@ -3878,26 +3866,23 @@ static void spapr_core_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> * total vcpus not a multiple of threads-per-core.
> */
> if (mc->has_hotpluggable_cpus && (cc->nr_threads != smp_threads)) {
> - error_setg(&local_err, "invalid nr-threads %d, must be %d",
> + error_setg(errp, "invalid nr-threads %d, must be %d",
> cc->nr_threads, smp_threads);
> - goto out;
> + return;
> }
>
> core_slot = spapr_find_cpu_slot(MACHINE(hotplug_dev), cc->core_id, &index);
> if (!core_slot) {
> - error_setg(&local_err, "core id %d out of range", cc->core_id);
> - goto out;
> + error_setg(errp, "core id %d out of range", cc->core_id);
> + return;
> }
>
> if (core_slot->cpu) {
> - error_setg(&local_err, "core %d already populated", cc->core_id);
> - goto out;
> + error_setg(errp, "core %d already populated", cc->core_id);
> + return;
> }
>
> - numa_cpu_pre_plug(core_slot, dev, &local_err);
> -
> -out:
> - error_propagate(errp, local_err);
> + numa_cpu_pre_plug(core_slot, dev, errp);
> }
>
> int spapr_phb_dt_populate(SpaprDrc *drc, SpaprMachineState *spapr,
> @@ -3956,12 +3941,12 @@ static void spapr_phb_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> static void spapr_phb_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprMachineState *spapr = SPAPR_MACHINE(OBJECT(hotplug_dev));
> SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr);
> SpaprPhbState *sphb = SPAPR_PCI_HOST_BRIDGE(dev);
> SpaprDrc *drc;
> bool hotplugged = spapr_drc_hotplugged(dev);
> - Error *local_err = NULL;
>
> if (!smc->dr_phb_enabled) {
> return;
> @@ -3971,9 +3956,8 @@ static void spapr_phb_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> /* hotplug hooks should check it's enabled before getting this far */
> assert(drc);
>
> - spapr_drc_attach(drc, DEVICE(dev), &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_drc_attach(drc, DEVICE(dev), errp);
> + if (*errp) {
> return;
> }
>
> @@ -4283,6 +4267,7 @@ int spapr_get_vcpu_id(PowerPCCPU *cpu)
>
> void spapr_set_vcpu_id(PowerPCCPU *cpu, int cpu_index, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
> MachineState *ms = MACHINE(spapr);
> int vcpu_id;
> diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
> index 481dfd2a27..324f5080cd 100644
> --- a/hw/ppc/spapr_caps.c
> +++ b/hw/ppc/spapr_caps.c
> @@ -83,14 +83,13 @@ static void spapr_cap_get_bool(Object *obj, Visitor *v, const char *name,
> static void spapr_cap_set_bool(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprCapabilityInfo *cap = opaque;
> SpaprMachineState *spapr = SPAPR_MACHINE(obj);
> bool value;
> - Error *local_err = NULL;
>
> - visit_type_bool(v, name, &value, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + visit_type_bool(v, name, &value, errp);
> + if (*errp) {
> return;
> }
>
> @@ -121,15 +120,14 @@ static void spapr_cap_get_string(Object *obj, Visitor *v, const char *name,
> static void spapr_cap_set_string(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprCapabilityInfo *cap = opaque;
> SpaprMachineState *spapr = SPAPR_MACHINE(obj);
> - Error *local_err = NULL;
> uint8_t i;
> char *val;
>
> - visit_type_str(v, name, &val, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + visit_type_str(v, name, &val, errp);
> + if (*errp) {
> return;
> }
>
> @@ -165,15 +163,14 @@ static void spapr_cap_get_pagesize(Object *obj, Visitor *v, const char *name,
> static void spapr_cap_set_pagesize(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprCapabilityInfo *cap = opaque;
> SpaprMachineState *spapr = SPAPR_MACHINE(obj);
> uint64_t pagesize;
> uint8_t val;
> - Error *local_err = NULL;
>
> - visit_type_size(v, name, &pagesize, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + visit_type_size(v, name, &pagesize, errp);
> + if (*errp) {
> return;
> }
>
> @@ -248,12 +245,12 @@ SpaprCapPossible cap_cfpc_possible = {
> static void cap_safe_cache_apply(SpaprMachineState *spapr, uint8_t val,
> Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> uint8_t kvm_val = kvmppc_get_cap_safe_cache();
>
> if (tcg_enabled() && val) {
> /* TCG only supports broken, allow other values and print a warning */
> - error_setg(&local_err,
> + error_setg(errp,
> "TCG doesn't support requested feature, cap-cfpc=%s",
> cap_cfpc_possible.vals[val]);
> } else if (kvm_enabled() && (val > kvm_val)) {
> @@ -263,8 +260,8 @@ static void cap_safe_cache_apply(SpaprMachineState *spapr, uint8_t val,
> cap_cfpc_possible.vals[kvm_val]);
> }
>
> - if (local_err != NULL)
> - warn_report_err(local_err);
> + if (*errp)
> + warn_report_errp(errp);
> }
>
> SpaprCapPossible cap_sbbc_possible = {
> @@ -277,12 +274,12 @@ SpaprCapPossible cap_sbbc_possible = {
> static void cap_safe_bounds_check_apply(SpaprMachineState *spapr, uint8_t val,
> Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> uint8_t kvm_val = kvmppc_get_cap_safe_bounds_check();
>
> if (tcg_enabled() && val) {
> /* TCG only supports broken, allow other values and print a warning */
> - error_setg(&local_err,
> + error_setg(errp,
> "TCG doesn't support requested feature, cap-sbbc=%s",
> cap_sbbc_possible.vals[val]);
> } else if (kvm_enabled() && (val > kvm_val)) {
> @@ -292,8 +289,8 @@ static void cap_safe_bounds_check_apply(SpaprMachineState *spapr, uint8_t val,
> cap_sbbc_possible.vals[kvm_val]);
> }
>
> - if (local_err != NULL)
> - warn_report_err(local_err);
> + if (*errp)
> + warn_report_errp(errp);
> }
>
> SpaprCapPossible cap_ibs_possible = {
> @@ -309,12 +306,12 @@ SpaprCapPossible cap_ibs_possible = {
> static void cap_safe_indirect_branch_apply(SpaprMachineState *spapr,
> uint8_t val, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> uint8_t kvm_val = kvmppc_get_cap_safe_indirect_branch();
>
> if (tcg_enabled() && val) {
> /* TCG only supports broken, allow other values and print a warning */
> - error_setg(&local_err,
> + error_setg(errp,
> "TCG doesn't support requested feature, cap-ibs=%s",
> cap_ibs_possible.vals[val]);
> } else if (kvm_enabled() && (val > kvm_val)) {
> @@ -324,8 +321,8 @@ static void cap_safe_indirect_branch_apply(SpaprMachineState *spapr,
> cap_ibs_possible.vals[kvm_val]);
> }
>
> - if (local_err != NULL) {
> - warn_report_err(local_err);
> + if (*errp) {
> + warn_report_errp(errp);
> }
> }
>
> @@ -787,7 +784,7 @@ void spapr_caps_cpu_apply(SpaprMachineState *spapr, PowerPCCPU *cpu)
>
> void spapr_caps_add_properties(SpaprMachineClass *smc, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> ObjectClass *klass = OBJECT_CLASS(smc);
> int i;
>
> @@ -798,19 +795,17 @@ void spapr_caps_add_properties(SpaprMachineClass *smc, Error **errp)
>
> object_class_property_add(klass, name, cap->type,
> cap->get, cap->set,
> - NULL, cap, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + NULL, cap, errp);
> + if (*errp) {
> g_free(name);
> return;
> }
>
> desc = g_strdup_printf("%s", cap->description);
> - object_class_property_set_description(klass, name, desc, &local_err);
> + object_class_property_set_description(klass, name, desc, errp);
> g_free(name);
> g_free(desc);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + if (*errp) {
> return;
> }
> }
> diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
> index 1d93de8161..471eaee317 100644
> --- a/hw/ppc/spapr_cpu_core.c
> +++ b/hw/ppc/spapr_cpu_core.c
> @@ -219,13 +219,13 @@ static void spapr_cpu_core_unrealize(DeviceState *dev, Error **errp)
> static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr,
> SpaprCpuCore *sc, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> CPUPPCState *env = &cpu->env;
> CPUState *cs = CPU(cpu);
> - Error *local_err = NULL;
>
> - object_property_set_bool(OBJECT(cpu), true, "realized", &local_err);
> - if (local_err) {
> - goto error;
> + object_property_set_bool(OBJECT(cpu), true, "realized", errp);
> + if (*errp) {
> + return;
> }
>
> /* Set time-base frequency to 512 MHz */
> @@ -237,8 +237,8 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr,
> qemu_register_reset(spapr_cpu_reset, cpu);
> spapr_cpu_reset(cpu);
>
> - spapr->irq->cpu_intc_create(spapr, cpu, &local_err);
> - if (local_err) {
> + spapr->irq->cpu_intc_create(spapr, cpu, errp);
> + if (*errp) {
> goto error_unregister;
> }
>
> @@ -252,36 +252,34 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr,
> error_unregister:
> qemu_unregister_reset(spapr_cpu_reset, cpu);
> cpu_remove_sync(CPU(cpu));
> -error:
> - error_propagate(errp, local_err);
> }
>
> static PowerPCCPU *spapr_create_vcpu(SpaprCpuCore *sc, int i, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprCpuCoreClass *scc = SPAPR_CPU_CORE_GET_CLASS(sc);
> CPUCore *cc = CPU_CORE(sc);
> Object *obj;
> char *id;
> CPUState *cs;
> PowerPCCPU *cpu;
> - Error *local_err = NULL;
>
> obj = object_new(scc->cpu_type);
>
> cs = CPU(obj);
> cpu = POWERPC_CPU(obj);
> cs->cpu_index = cc->core_id + i;
> - spapr_set_vcpu_id(cpu, cs->cpu_index, &local_err);
> - if (local_err) {
> + spapr_set_vcpu_id(cpu, cs->cpu_index, errp);
> + if (*errp) {
> goto err;
> }
>
> cpu->node_id = sc->node_id;
>
> id = g_strdup_printf("thread[%d]", i);
> - object_property_add_child(OBJECT(sc), id, obj, &local_err);
> + object_property_add_child(OBJECT(sc), id, obj, errp);
> g_free(id);
> - if (local_err) {
> + if (*errp) {
> goto err;
> }
>
> @@ -292,7 +290,6 @@ static PowerPCCPU *spapr_create_vcpu(SpaprCpuCore *sc, int i, Error **errp)
>
> err:
> object_unref(obj);
> - error_propagate(errp, local_err);
> return NULL;
> }
>
> @@ -307,6 +304,7 @@ static void spapr_delete_vcpu(PowerPCCPU *cpu, SpaprCpuCore *sc)
>
> static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> /* We don't use SPAPR_MACHINE() in order to exit gracefully if the user
> * tries to add a sPAPR CPU core to a non-pseries machine.
> */
> @@ -315,7 +313,6 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
> TYPE_SPAPR_MACHINE);
> SpaprCpuCore *sc = SPAPR_CPU_CORE(OBJECT(dev));
> CPUCore *cc = CPU_CORE(OBJECT(dev));
> - Error *local_err = NULL;
> int i, j;
>
> if (!spapr) {
> @@ -325,15 +322,15 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
>
> sc->threads = g_new(PowerPCCPU *, cc->nr_threads);
> for (i = 0; i < cc->nr_threads; i++) {
> - sc->threads[i] = spapr_create_vcpu(sc, i, &local_err);
> - if (local_err) {
> + sc->threads[i] = spapr_create_vcpu(sc, i, errp);
> + if (*errp) {
> goto err;
> }
> }
>
> for (j = 0; j < cc->nr_threads; j++) {
> - spapr_realize_vcpu(sc->threads[j], spapr, sc, &local_err);
> - if (local_err) {
> + spapr_realize_vcpu(sc->threads[j], spapr, sc, errp);
> + if (*errp) {
> goto err_unrealize;
> }
> }
> @@ -348,7 +345,6 @@ err:
> spapr_delete_vcpu(sc->threads[i], sc);
> }
> g_free(sc->threads);
> - error_propagate(errp, local_err);
> }
>
> static Property spapr_cpu_core_properties[] = {
> diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
> index 62f1a42592..22226939e1 100644
> --- a/hw/ppc/spapr_drc.c
> +++ b/hw/ppc/spapr_drc.c
> @@ -299,9 +299,9 @@ static void prop_get_index(Object *obj, Visitor *v, const char *name,
> static void prop_get_fdt(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprDrc *drc = SPAPR_DR_CONNECTOR(obj);
> QNull *null = NULL;
> - Error *err = NULL;
> int fdt_offset_next, fdt_offset, fdt_depth;
> void *fdt;
>
> @@ -326,19 +326,17 @@ static void prop_get_fdt(Object *obj, Visitor *v, const char *name,
> case FDT_BEGIN_NODE:
> fdt_depth++;
> name = fdt_get_name(fdt, fdt_offset, &name_len);
> - visit_start_struct(v, name, NULL, 0, &err);
> - if (err) {
> - error_propagate(errp, err);
> + visit_start_struct(v, name, NULL, 0, errp);
> + if (*errp) {
> return;
> }
> break;
> case FDT_END_NODE:
> /* shouldn't ever see an FDT_END_NODE before FDT_BEGIN_NODE */
> g_assert(fdt_depth > 0);
> - visit_check_struct(v, &err);
> + visit_check_struct(v, errp);
> visit_end_struct(v, NULL);
> - if (err) {
> - error_propagate(errp, err);
> + if (*errp) {
> return;
> }
> fdt_depth--;
> @@ -347,22 +345,19 @@ static void prop_get_fdt(Object *obj, Visitor *v, const char *name,
> int i;
> prop = fdt_get_property_by_offset(fdt, fdt_offset, &prop_len);
> name = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));
> - visit_start_list(v, name, NULL, 0, &err);
> - if (err) {
> - error_propagate(errp, err);
> + visit_start_list(v, name, NULL, 0, errp);
> + if (*errp) {
> return;
> }
> for (i = 0; i < prop_len; i++) {
> - visit_type_uint8(v, NULL, (uint8_t *)&prop->data[i], &err);
> - if (err) {
> - error_propagate(errp, err);
> + visit_type_uint8(v, NULL, (uint8_t *)&prop->data[i], errp);
> + if (*errp) {
> return;
> }
> }
> - visit_check_list(v, &err);
> + visit_check_list(v, errp);
> visit_end_list(v, NULL);
> - if (err) {
> - error_propagate(errp, err);
> + if (*errp) {
> return;
> }
> break;
> @@ -485,11 +480,11 @@ static const VMStateDescription vmstate_spapr_drc = {
>
> static void realize(DeviceState *d, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprDrc *drc = SPAPR_DR_CONNECTOR(d);
> Object *root_container;
> gchar *link_name;
> gchar *child_name;
> - Error *err = NULL;
>
> trace_spapr_drc_realize(spapr_drc_index(drc));
> /* NOTE: we do this as part of realize/unrealize due to the fact
> @@ -504,11 +499,10 @@ static void realize(DeviceState *d, Error **errp)
> child_name = object_get_canonical_path_component(OBJECT(drc));
> trace_spapr_drc_realize_child(spapr_drc_index(drc), child_name);
> object_property_add_alias(root_container, link_name,
> - drc->owner, child_name, &err);
> + drc->owner, child_name, errp);
> g_free(child_name);
> g_free(link_name);
> - if (err) {
> - error_propagate(errp, err);
> + if (*errp) {
> return;
> }
> vmstate_register(DEVICE(drc), spapr_drc_index(drc), &vmstate_spapr_drc,
> @@ -610,12 +604,11 @@ static void drc_physical_reset(void *opaque)
>
> static void realize_physical(DeviceState *d, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprDrcPhysical *drcp = SPAPR_DRC_PHYSICAL(d);
> - Error *local_err = NULL;
>
> - realize(d, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + realize(d, errp);
> + if (*errp) {
> return;
> }
>
> @@ -626,12 +619,11 @@ static void realize_physical(DeviceState *d, Error **errp)
>
> static void unrealize_physical(DeviceState *d, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprDrcPhysical *drcp = SPAPR_DRC_PHYSICAL(d);
> - Error *local_err = NULL;
>
> - unrealize(d, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + unrealize(d, errp);
> + if (*errp) {
> return;
> }
>
> diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
> index 457eabe24c..9bccc9beeb 100644
> --- a/hw/ppc/spapr_irq.c
> +++ b/hw/ppc/spapr_irq.c
> @@ -62,19 +62,18 @@ void spapr_irq_msi_free(SpaprMachineState *spapr, int irq, uint32_t num)
> static void spapr_irq_init_kvm(SpaprMachineState *spapr,
> SpaprIrq *irq, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> MachineState *machine = MACHINE(spapr);
> - Error *local_err = NULL;
>
> if (kvm_enabled() && machine_kernel_irqchip_allowed(machine)) {
> - irq->init_kvm(spapr, &local_err);
> - if (local_err && machine_kernel_irqchip_required(machine)) {
> - error_prepend(&local_err,
> + irq->init_kvm(spapr, errp);
> + if (*errp && machine_kernel_irqchip_required(machine)) {
> + error_prepend(errp,
> "kernel_irqchip requested but unavailable: ");
> - error_propagate(errp, local_err);
> return;
> }
>
> - if (!local_err) {
> + if (!*errp) {
> return;
> }
>
> @@ -82,9 +81,9 @@ static void spapr_irq_init_kvm(SpaprMachineState *spapr,
> * We failed to initialize the KVM device, fallback to
> * emulated mode
> */
> - error_prepend(&local_err, "kernel_irqchip allowed but unavailable: ");
> - error_append_hint(&local_err, "Falling back to kernel-irqchip=off\n");
> - warn_report_err(local_err);
> + error_prepend(errp, "kernel_irqchip allowed but unavailable: ");
> + error_append_hint(errp, "Falling back to kernel-irqchip=off\n");
> + warn_report_errp(errp);
> }
> }
>
> @@ -135,14 +134,13 @@ static void spapr_irq_print_info_xics(SpaprMachineState *spapr, Monitor *mon)
> static void spapr_irq_cpu_intc_create_xics(SpaprMachineState *spapr,
> PowerPCCPU *cpu, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> Object *obj;
> SpaprCpuState *spapr_cpu = spapr_cpu_state(cpu);
>
> obj = icp_create(OBJECT(cpu), TYPE_ICP, XICS_FABRIC(spapr),
> - &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + errp);
> + if (*errp) {
> return;
> }
>
> @@ -171,11 +169,10 @@ static void spapr_irq_set_irq_xics(void *opaque, int irq, int val)
>
> static void spapr_irq_reset_xics(SpaprMachineState *spapr, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
>
> - spapr_irq_init_kvm(spapr, &spapr_irq_xics, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_irq_init_kvm(spapr, &spapr_irq_xics, errp);
> + if (*errp) {
> return;
> }
> }
> @@ -236,13 +233,12 @@ static void spapr_irq_print_info_xive(SpaprMachineState *spapr,
> static void spapr_irq_cpu_intc_create_xive(SpaprMachineState *spapr,
> PowerPCCPU *cpu, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> Object *obj;
> SpaprCpuState *spapr_cpu = spapr_cpu_state(cpu);
>
> - obj = xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(spapr->xive), &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + obj = xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(spapr->xive), errp);
> + if (*errp) {
> return;
> }
>
> @@ -262,8 +258,8 @@ static int spapr_irq_post_load_xive(SpaprMachineState *spapr, int version_id)
>
> static void spapr_irq_reset_xive(SpaprMachineState *spapr, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> CPUState *cs;
> - Error *local_err = NULL;
>
> CPU_FOREACH(cs) {
> PowerPCCPU *cpu = POWERPC_CPU(cs);
> @@ -272,9 +268,8 @@ static void spapr_irq_reset_xive(SpaprMachineState *spapr, Error **errp)
> spapr_xive_set_tctx_os_cam(spapr_cpu_state(cpu)->tctx);
> }
>
> - spapr_irq_init_kvm(spapr, &spapr_irq_xive, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_irq_init_kvm(spapr, &spapr_irq_xive, errp);
> + if (*errp) {
> return;
> }
>
> @@ -339,18 +334,16 @@ static SpaprIrq *spapr_irq_current(SpaprMachineState *spapr)
> static int spapr_irq_claim_dual(SpaprMachineState *spapr, int irq, bool lsi,
> Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> int ret;
>
> - ret = spapr_irq_xics.claim(spapr, irq, lsi, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + ret = spapr_irq_xics.claim(spapr, irq, lsi, errp);
> + if (*errp) {
> return ret;
> }
>
> - ret = spapr_irq_xive.claim(spapr, irq, lsi, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + ret = spapr_irq_xive.claim(spapr, irq, lsi, errp);
> + if (*errp) {
> return ret;
> }
>
> @@ -378,11 +371,10 @@ static void spapr_irq_dt_populate_dual(SpaprMachineState *spapr,
> static void spapr_irq_cpu_intc_create_dual(SpaprMachineState *spapr,
> PowerPCCPU *cpu, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
>
> - spapr_irq_xive.cpu_intc_create(spapr, cpu, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_irq_xive.cpu_intc_create(spapr, cpu, errp);
> + if (*errp) {
> return;
> }
>
> @@ -407,7 +399,7 @@ static int spapr_irq_post_load_dual(SpaprMachineState *spapr, int version_id)
>
> static void spapr_irq_reset_dual(SpaprMachineState *spapr, Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
>
> /*
> * Deactivate the XIVE MMIOs. The XIVE backend will reenable them
> @@ -417,15 +409,13 @@ static void spapr_irq_reset_dual(SpaprMachineState *spapr, Error **errp)
>
> /* Destroy all KVM devices */
> if (kvm_irqchip_in_kernel()) {
> - xics_kvm_disconnect(spapr, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + xics_kvm_disconnect(spapr, errp);
> + if (*errp) {
> error_prepend(errp, "KVM XICS disconnect failed: ");
> return;
> }
> - kvmppc_xive_disconnect(spapr->xive, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + kvmppc_xive_disconnect(spapr->xive, errp);
> + if (*errp) {
> error_prepend(errp, "KVM XIVE disconnect failed: ");
> return;
> }
> @@ -523,6 +513,7 @@ static int spapr_irq_check(SpaprMachineState *spapr, Error **errp)
> */
> void spapr_irq_init(SpaprMachineState *spapr, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> MachineState *machine = MACHINE(spapr);
>
> if (machine_kernel_irqchip_split(machine)) {
> @@ -546,33 +537,28 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **errp)
> }
>
> if (spapr->irq->xics) {
> - Error *local_err = NULL;
> Object *obj;
>
> obj = object_new(TYPE_ICS_SPAPR);
> - object_property_add_child(OBJECT(spapr), "ics", obj, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_add_child(OBJECT(spapr), "ics", obj, errp);
> + if (*errp) {
> return;
> }
>
> object_property_add_const_link(obj, ICS_PROP_XICS, OBJECT(spapr),
> - &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + errp);
> + if (*errp) {
> return;
> }
>
> object_property_set_int(obj, spapr->irq->nr_xirqs, "nr-irqs",
> - &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + errp);
> + if (*errp) {
> return;
> }
>
> - object_property_set_bool(obj, true, "realized", &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + object_property_set_bool(obj, true, "realized", errp);
> + if (*errp) {
> return;
> }
>
> diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> index 01ff41d4c4..2022af1ce6 100644
> --- a/hw/ppc/spapr_pci.c
> +++ b/hw/ppc/spapr_pci.c
> @@ -1229,18 +1229,17 @@ static SpaprDrc *drc_from_dev(SpaprPhbState *phb, PCIDevice *dev)
>
> static void add_drcs(SpaprPhbState *phb, PCIBus *bus, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> Object *owner;
> int i;
> uint8_t chassis;
> - Error *local_err = NULL;
>
> if (!phb->dr_enabled) {
> return;
> }
>
> - chassis = chassis_from_bus(bus, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + chassis = chassis_from_bus(bus, errp);
> + if (*errp) {
> return;
> }
>
> @@ -1258,17 +1257,16 @@ static void add_drcs(SpaprPhbState *phb, PCIBus *bus, Error **errp)
>
> static void remove_drcs(SpaprPhbState *phb, PCIBus *bus, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> int i;
> uint8_t chassis;
> - Error *local_err = NULL;
>
> if (!phb->dr_enabled) {
> return;
> }
>
> - chassis = chassis_from_bus(bus, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + chassis = chassis_from_bus(bus, errp);
> + if (*errp) {
> return;
> }
>
> @@ -1491,12 +1489,11 @@ static void spapr_pci_bridge_plug(SpaprPhbState *phb,
> PCIBridge *bridge,
> Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> PCIBus *bus = pci_bridge_get_sec_bus(bridge);
>
> - add_drcs(phb, bus, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + add_drcs(phb, bus, errp);
> + if (*errp) {
> return;
> }
> }
> @@ -1504,11 +1501,11 @@ static void spapr_pci_bridge_plug(SpaprPhbState *phb,
> static void spapr_pci_plug(HotplugHandler *plug_handler,
> DeviceState *plugged_dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler));
> PCIDevice *pdev = PCI_DEVICE(plugged_dev);
> PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev);
> SpaprDrc *drc = drc_from_dev(phb, pdev);
> - Error *local_err = NULL;
> PCIBus *bus = PCI_BUS(qdev_get_parent_bus(DEVICE(pdev)));
> uint32_t slotnr = PCI_SLOT(pdev->devfn);
>
> @@ -1520,18 +1517,17 @@ static void spapr_pci_plug(HotplugHandler *plug_handler,
> * we need to let them know it's not enabled
> */
> if (plugged_dev->hotplugged) {
> - error_setg(&local_err, QERR_BUS_NO_HOTPLUG,
> + error_setg(errp, QERR_BUS_NO_HOTPLUG,
> object_get_typename(OBJECT(phb)));
> }
> - goto out;
> + return;
> }
>
> g_assert(drc);
>
> if (pc->is_bridge) {
> - spapr_pci_bridge_plug(phb, PCI_BRIDGE(plugged_dev), &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_pci_bridge_plug(phb, PCI_BRIDGE(plugged_dev), errp);
> + if (*errp) {
> return;
> }
> }
> @@ -1542,15 +1538,15 @@ static void spapr_pci_plug(HotplugHandler *plug_handler,
> */
> if (plugged_dev->hotplugged && bus->devices[PCI_DEVFN(slotnr, 0)] &&
> PCI_FUNC(pdev->devfn) != 0) {
> - error_setg(&local_err, "PCI: slot %d function 0 already ocuppied by %s,"
> + error_setg(errp, "PCI: slot %d function 0 already ocuppied by %s,"
> " additional functions can no longer be exposed to guest.",
> slotnr, bus->devices[PCI_DEVFN(slotnr, 0)]->name);
> - goto out;
> + return;
> }
>
> - spapr_drc_attach(drc, DEVICE(pdev), &local_err);
> - if (local_err) {
> - goto out;
> + spapr_drc_attach(drc, DEVICE(pdev), errp);
> + if (*errp) {
> + return;
> }
>
> /* If this is function 0, signal hotplug for all the device functions.
> @@ -1560,10 +1556,9 @@ static void spapr_pci_plug(HotplugHandler *plug_handler,
> spapr_drc_reset(drc);
> } else if (PCI_FUNC(pdev->devfn) == 0) {
> int i;
> - uint8_t chassis = chassis_from_bus(pci_get_bus(pdev), &local_err);
> + uint8_t chassis = chassis_from_bus(pci_get_bus(pdev), errp);
>
> - if (local_err) {
> - error_propagate(errp, local_err);
> + if (*errp) {
> return;
> }
>
> @@ -1581,21 +1576,17 @@ static void spapr_pci_plug(HotplugHandler *plug_handler,
> }
> }
> }
> -
> -out:
> - error_propagate(errp, local_err);
> }
>
> static void spapr_pci_bridge_unplug(SpaprPhbState *phb,
> PCIBridge *bridge,
> Error **errp)
> {
> - Error *local_err = NULL;
> + ERRP_AUTO_PROPAGATE();
> PCIBus *bus = pci_bridge_get_sec_bus(bridge);
>
> - remove_drcs(phb, bus, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + remove_drcs(phb, bus, errp);
> + if (*errp) {
> return;
> }
> }
> @@ -1603,6 +1594,7 @@ static void spapr_pci_bridge_unplug(SpaprPhbState *phb,
> static void spapr_pci_unplug(HotplugHandler *plug_handler,
> DeviceState *plugged_dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev);
> SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler));
>
> @@ -1619,10 +1611,8 @@ static void spapr_pci_unplug(HotplugHandler *plug_handler,
> pci_device_reset(PCI_DEVICE(plugged_dev));
>
> if (pc->is_bridge) {
> - Error *local_err = NULL;
> - spapr_pci_bridge_unplug(phb, PCI_BRIDGE(plugged_dev), &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_pci_bridge_unplug(phb, PCI_BRIDGE(plugged_dev), errp);
> + if (*errp) {
> }
> return;
> }
> @@ -1633,6 +1623,7 @@ static void spapr_pci_unplug(HotplugHandler *plug_handler,
> static void spapr_pci_unplug_request(HotplugHandler *plug_handler,
> DeviceState *plugged_dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler));
> PCIDevice *pdev = PCI_DEVICE(plugged_dev);
> SpaprDrc *drc = drc_from_dev(phb, pdev);
> @@ -1653,11 +1644,9 @@ static void spapr_pci_unplug_request(HotplugHandler *plug_handler,
> SpaprDrcClass *func_drck;
> SpaprDREntitySense state;
> int i;
> - Error *local_err = NULL;
> - uint8_t chassis = chassis_from_bus(pci_get_bus(pdev), &local_err);
> + uint8_t chassis = chassis_from_bus(pci_get_bus(pdev), errp);
>
> - if (local_err) {
> - error_propagate(errp, local_err);
> + if (*errp) {
> return;
> }
>
> @@ -1712,6 +1701,7 @@ static void spapr_phb_finalizefn(Object *obj)
>
> static void spapr_phb_unrealize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
> SysBusDevice *s = SYS_BUS_DEVICE(dev);
> PCIHostState *phb = PCI_HOST_BRIDGE(s);
> @@ -1719,7 +1709,6 @@ static void spapr_phb_unrealize(DeviceState *dev, Error **errp)
> SpaprTceTable *tcet;
> int i;
> const unsigned windows_supported = spapr_phb_windows_supported(sphb);
> - Error *local_err = NULL;
>
> spapr_phb_nvgpu_free(sphb);
>
> @@ -1740,9 +1729,8 @@ static void spapr_phb_unrealize(DeviceState *dev, Error **errp)
> }
> }
>
> - remove_drcs(sphb, phb->bus, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + remove_drcs(sphb, phb->bus, errp);
> + if (*errp) {
> return;
> }
>
> @@ -1790,6 +1778,7 @@ static void spapr_phb_destroy_msi(gpointer opaque)
>
> static void spapr_phb_realize(DeviceState *dev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> /* We don't use SPAPR_MACHINE() in order to exit gracefully if the user
> * tries to add a sPAPR PHB to a non-pseries machine.
> */
> @@ -1807,7 +1796,6 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
> uint64_t msi_window_size = 4096;
> SpaprTceTable *tcet;
> const unsigned windows_supported = spapr_phb_windows_supported(sphb);
> - Error *local_err = NULL;
>
> if (!spapr) {
> error_setg(errp, TYPE_SPAPR_PCI_HOST_BRIDGE " needs a pseries machine");
> @@ -1961,9 +1949,9 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
> uint32_t irq = SPAPR_IRQ_PCI_LSI + sphb->index * PCI_NUM_PINS + i;
>
> if (smc->legacy_irq_allocation) {
> - irq = spapr_irq_findone(spapr, &local_err);
> - if (local_err) {
> - error_propagate_prepend(errp, local_err,
> + irq = spapr_irq_findone(spapr, errp);
> + if (*errp) {
> + error_prepend(errp,
> "can't allocate LSIs: ");
> /*
> * Older machines will never support PHB hotplug, ie, this is an
> @@ -1973,9 +1961,9 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
> }
> }
>
> - spapr_irq_claim(spapr, irq, true, &local_err);
> - if (local_err) {
> - error_propagate_prepend(errp, local_err, "can't allocate LSIs: ");
> + spapr_irq_claim(spapr, irq, true, errp);
> + if (*errp) {
> + error_prepend(errp, "can't allocate LSIs: ");
> goto unrealize;
> }
>
> @@ -1983,9 +1971,8 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
> }
>
> /* allocate connectors for child PCI devices */
> - add_drcs(sphb, phb->bus, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + add_drcs(sphb, phb->bus, errp);
> + if (*errp) {
> goto unrealize;
> }
>
> diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c
> index 554de9930d..cae3e99412 100644
> --- a/hw/ppc/spapr_vio.c
> +++ b/hw/ppc/spapr_vio.c
> @@ -463,11 +463,11 @@ static inline uint32_t spapr_vio_reg_to_irq(uint32_t reg)
>
> static void spapr_vio_busdev_realize(DeviceState *qdev, Error **errp)
> {
> + ERRP_AUTO_PROPAGATE();
> SpaprMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
> SpaprVioDevice *dev = (SpaprVioDevice *)qdev;
> SpaprVioDeviceClass *pc = VIO_SPAPR_DEVICE_GET_CLASS(dev);
> char *id;
> - Error *local_err = NULL;
>
> if (dev->reg != -1) {
> /*
> @@ -503,16 +503,14 @@ static void spapr_vio_busdev_realize(DeviceState *qdev, Error **errp)
> dev->irq = spapr_vio_reg_to_irq(dev->reg);
>
> if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) {
> - dev->irq = spapr_irq_findone(spapr, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + dev->irq = spapr_irq_findone(spapr, errp);
> + if (*errp) {
> return;
> }
> }
>
> - spapr_irq_claim(spapr, dev->irq, false, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + spapr_irq_claim(spapr, dev->irq, false, errp);
> + if (*errp) {
> return;
> }
>
next prev parent reply other threads:[~2019-11-19 18:02 UTC|newest]
Thread overview: 311+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-11 16:03 [RFC v5 000/126] error: auto propagated local_err Vladimir Sementsov-Ogievskiy
2019-10-11 16:03 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-10-11 16:03 ` Vladimir Sementsov-Ogievskiy
2019-10-11 16:03 ` [RFC v5 001/126] hw/core/loader-fit: fix freeing errp in fit_load_fdt Vladimir Sementsov-Ogievskiy
2019-10-11 16:03 ` [RFC v5 002/126] net/net: Clean up variable shadowing in net_client_init() Vladimir Sementsov-Ogievskiy
2019-10-12 6:04 ` Philippe Mathieu-Daudé
2019-10-11 16:03 ` [RFC v5 003/126] error: rename errp to errp_in where it is IN-argument Vladimir Sementsov-Ogievskiy
2019-10-11 18:29 ` Eric Blake
2019-10-11 16:03 ` [RFC v5 004/126] hmp: drop Error pointer indirection in hmp_handle_error Vladimir Sementsov-Ogievskiy
2019-10-11 16:33 ` Dr. David Alan Gilbert
2019-10-11 18:32 ` Eric Blake
2019-10-11 18:35 ` Dr. David Alan Gilbert
2019-10-11 16:03 ` [RFC v5 005/126] vnc: drop Error pointer indirection in vnc_client_io_error Vladimir Sementsov-Ogievskiy
2019-10-11 16:03 ` [RFC v5 006/126] qdev-monitor: well form error hint helpers Vladimir Sementsov-Ogievskiy
2019-11-08 20:49 ` Marc-André Lureau
2019-10-11 16:03 ` [RFC v5 007/126] nbd: well form nbd_iter_channel_error errp handler Vladimir Sementsov-Ogievskiy
2019-10-11 16:48 ` Eric Blake
2019-10-11 16:03 ` [RFC v5 008/126] ppc: well form kvmppc_hint_smt_possible error hint helper Vladimir Sementsov-Ogievskiy
2019-11-08 20:50 ` Marc-André Lureau
2019-10-11 16:03 ` [RFC v5 009/126] 9pfs: well form error hint helpers Vladimir Sementsov-Ogievskiy
2019-10-12 14:59 ` Greg Kurz
2019-10-11 16:03 ` [RFC v5 010/126] hw/core/qdev: cleanup Error ** variables Vladimir Sementsov-Ogievskiy
2019-10-11 16:52 ` Eric Blake
2019-11-08 20:55 ` Marc-André Lureau
2019-10-11 16:03 ` [RFC v5 011/126] block/snapshot: rename Error ** parameter to more common errp Vladimir Sementsov-Ogievskiy
2019-10-11 16:52 ` Eric Blake
2019-10-11 16:03 ` [RFC v5 012/126] hw/i386/amd_iommu: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:03 ` [RFC v5 013/126] qga: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 014/126] monitor/qmp-cmds: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 015/126] hw/s390x: " Vladimir Sementsov-Ogievskiy
2019-11-12 13:01 ` Cornelia Huck
2019-10-11 16:04 ` [RFC v5 016/126] hw/sd: " Vladimir Sementsov-Ogievskiy
2019-10-11 18:12 ` Eric Blake
2019-10-11 16:04 ` [RFC v5 017/126] hw/tpm: " Vladimir Sementsov-Ogievskiy
2019-10-11 17:00 ` Stefan Berger
2019-10-11 16:04 ` [RFC v5 018/126] hw/usb: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 019/126] include/block/snapshot.h: " Vladimir Sementsov-Ogievskiy
2019-10-11 18:13 ` Eric Blake
2019-10-11 16:04 ` [RFC v5 020/126] include/qom/object.h: " Vladimir Sementsov-Ogievskiy
2019-10-12 6:07 ` Philippe Mathieu-Daudé
2019-10-11 16:04 ` [RFC v5 021/126] qapi/error: add (Error **errp) cleaning APIs Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 022/126] backends/cryptodev: drop local_err from cryptodev_backend_complete() Vladimir Sementsov-Ogievskiy
2019-10-12 6:08 ` Philippe Mathieu-Daudé
2019-11-08 20:59 ` Marc-André Lureau
2019-10-11 16:04 ` [RFC v5 023/126] hw/vfio/ap: drop local_err from vfio_ap_realize Vladimir Sementsov-Ogievskiy
2019-11-08 21:00 ` Marc-André Lureau
2019-11-12 13:06 ` Cornelia Huck
2019-11-12 15:29 ` Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 024/126] error: auto propagated local_err Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` Vladimir Sementsov-Ogievskiy
2019-11-08 21:10 ` Marc-André Lureau
2019-11-08 21:10 ` Marc-André Lureau
2019-11-08 21:10 ` [Xen-devel] " Marc-André Lureau
2019-11-08 21:10 ` Marc-André Lureau
2019-11-08 22:45 ` Eric Blake
2019-11-08 22:45 ` Eric Blake
2019-11-08 22:45 ` [Xen-devel] " Eric Blake
2019-11-08 22:45 ` Eric Blake
2019-12-04 14:59 ` Markus Armbruster
2019-12-04 14:59 ` Markus Armbruster
2019-12-04 14:59 ` [Xen-devel] " Markus Armbruster
2019-12-04 14:59 ` Markus Armbruster
2019-12-05 9:38 ` Vladimir Sementsov-Ogievskiy
2019-12-05 9:38 ` Vladimir Sementsov-Ogievskiy
2019-12-05 9:38 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-12-05 9:38 ` Vladimir Sementsov-Ogievskiy
2019-12-05 12:36 ` Markus Armbruster
2019-12-05 12:36 ` [Xen-devel] " Markus Armbruster
2019-12-05 12:36 ` Markus Armbruster
2019-12-05 14:58 ` Vladimir Sementsov-Ogievskiy
2019-12-05 14:58 ` Vladimir Sementsov-Ogievskiy
2019-12-05 14:58 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-12-05 14:58 ` Vladimir Sementsov-Ogievskiy
2019-12-05 16:36 ` Vladimir Sementsov-Ogievskiy
2019-12-05 16:36 ` Vladimir Sementsov-Ogievskiy
2019-12-05 16:36 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-12-05 16:36 ` Vladimir Sementsov-Ogievskiy
2019-12-06 8:13 ` Markus Armbruster
2019-12-06 8:13 ` [Xen-devel] " Markus Armbruster
2019-12-06 8:13 ` Markus Armbruster
2019-12-05 17:32 ` Eric Blake
2019-12-05 17:32 ` Eric Blake
2019-12-05 17:32 ` [Xen-devel] " Eric Blake
2019-12-05 17:32 ` Eric Blake
2019-10-11 16:04 ` [RFC v5 025/126] scripts: add coccinelle script to use auto propagated errp Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` Vladimir Sementsov-Ogievskiy
2019-10-11 17:12 ` Eric Blake
2019-10-11 17:12 ` [Xen-devel] " Eric Blake
2019-10-11 17:12 ` Eric Blake
2019-10-11 18:15 ` Eric Blake
2019-10-11 18:15 ` [Xen-devel] " Eric Blake
2019-10-11 18:15 ` Eric Blake
2019-10-14 8:19 ` Vladimir Sementsov-Ogievskiy
2019-10-14 8:19 ` Vladimir Sementsov-Ogievskiy
2019-10-14 8:19 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-10-14 8:19 ` Vladimir Sementsov-Ogievskiy
2019-10-14 14:00 ` Eric Blake
2019-10-14 14:00 ` Eric Blake
2019-10-14 14:00 ` [Xen-devel] " Eric Blake
2019-10-14 14:00 ` Eric Blake
2019-10-11 16:04 ` [RFC v5 026/126] python: add commit-per-subsystem.py Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` Vladimir Sementsov-Ogievskiy
2019-11-08 21:18 ` Marc-André Lureau
2019-11-08 21:18 ` Marc-André Lureau
2019-11-08 21:18 ` [Xen-devel] " Marc-André Lureau
2019-11-08 21:18 ` Marc-André Lureau
2019-11-11 16:37 ` Aleksandar Markovic
2019-11-11 16:37 ` [Xen-devel] " Aleksandar Markovic
2019-11-11 16:37 ` Aleksandar Markovic
2019-11-12 13:08 ` Cornelia Huck
2019-11-12 13:08 ` Cornelia Huck
2019-11-12 13:08 ` [Xen-devel] " Cornelia Huck
2019-11-12 13:08 ` Cornelia Huck
2019-10-11 16:04 ` [RFC v5 027/126] misc: introduce ERRP_AUTO_PROPAGATE Vladimir Sementsov-Ogievskiy
2019-10-11 18:44 ` Eric Blake
2019-10-14 8:51 ` Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 028/126] s390x: " Vladimir Sementsov-Ogievskiy
2019-11-12 13:20 ` Cornelia Huck
2019-10-11 16:04 ` [RFC v5 029/126] tcg: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 030/126] kvm: " Vladimir Sementsov-Ogievskiy
2019-11-12 13:31 ` Cornelia Huck
2019-10-11 16:04 ` [Xen-devel] [RFC v5 031/126] xen: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` Vladimir Sementsov-Ogievskiy
2019-11-20 15:38 ` [Xen-devel] " Anthony PERARD
2019-11-20 15:38 ` Anthony PERARD
2019-10-11 16:04 ` [RFC v5 032/126] Hosts: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 033/126] ARM Machines: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 034/126] MIPS " Vladimir Sementsov-Ogievskiy
2019-10-12 6:22 ` Philippe Mathieu-Daudé
2019-10-14 8:55 ` Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 035/126] PowerPC " Vladimir Sementsov-Ogievskiy
2019-11-19 18:00 ` Greg Kurz [this message]
2019-10-11 16:04 ` [RFC v5 036/126] SPARC " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 037/126] S390 " Vladimir Sementsov-Ogievskiy
2019-11-12 13:33 ` Cornelia Huck
2019-10-11 16:04 ` [RFC v5 038/126] X86 " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 039/126] IDE: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 040/126] Floppy: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 041/126] IPack: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 042/126] PCI: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 043/126] ACPI/SMBIOS: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 044/126] Network devices: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 045/126] pflash: " Vladimir Sementsov-Ogievskiy
2019-10-12 6:11 ` Philippe Mathieu-Daudé
2019-10-11 16:04 ` [RFC v5 046/126] SCSI: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 047/126] SD (Secure Card): " Vladimir Sementsov-Ogievskiy
2019-10-12 6:13 ` Philippe Mathieu-Daudé
2019-10-11 16:04 ` [RFC v5 048/126] USB: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 049/126] USB (serial adapter): " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 050/126] VFIO: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 051/126] vfio-ccw: " Vladimir Sementsov-Ogievskiy
2019-11-12 13:35 ` Cornelia Huck
2019-10-11 16:04 ` [RFC v5 052/126] vhost: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 053/126] virtio: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 054/126] virtio-9p: " Vladimir Sementsov-Ogievskiy
2019-11-19 16:56 ` Greg Kurz
2019-11-19 16:59 ` Vladimir Sementsov-Ogievskiy
2019-11-19 17:08 ` Greg Kurz
2019-10-11 16:04 ` [RFC v5 055/126] virtio-blk: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 056/126] virtio-ccw: " Vladimir Sementsov-Ogievskiy
2019-11-12 13:37 ` Cornelia Huck
2019-10-11 16:04 ` [RFC v5 057/126] virtio-input: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 058/126] virtio-serial: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 059/126] virtio-rng: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 060/126] megasas: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 061/126] NVDIMM: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 062/126] eepro100: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 063/126] virtio-gpu: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 064/126] fw_cfg: " Vladimir Sementsov-Ogievskiy
2019-10-12 6:13 ` Philippe Mathieu-Daudé
2019-10-11 16:04 ` [RFC v5 065/126] XIVE: " Vladimir Sementsov-Ogievskiy
2019-11-19 18:14 ` Greg Kurz
2019-10-11 16:04 ` [RFC v5 066/126] Audio: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 067/126] block: " Vladimir Sementsov-Ogievskiy
2019-10-11 19:15 ` Eric Blake
2019-10-11 16:04 ` [RFC v5 068/126] scsi: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 069/126] chardev: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 070/126] cmdline: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 071/126] Dump: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 072/126] Memory API: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:04 ` [RFC v5 073/126] SPICE: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 074/126] Graphics: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 075/126] Main loop: " Vladimir Sementsov-Ogievskiy
2019-10-12 6:24 ` Philippe Mathieu-Daudé
2019-10-11 16:05 ` [RFC v5 076/126] Human Monitor (HMP): " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 077/126] net: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 078/126] hostmem: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 079/126] cryptodev: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 080/126] QAPI: " Vladimir Sementsov-Ogievskiy
2019-10-11 19:22 ` Eric Blake
2019-10-11 16:05 ` [RFC v5 081/126] qga: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 082/126] QOM: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 083/126] QMP: " Vladimir Sementsov-Ogievskiy
2019-10-11 19:25 ` Eric Blake
2019-10-11 16:05 ` [RFC v5 084/126] SLIRP: " Vladimir Sementsov-Ogievskiy
2019-10-12 6:26 ` Philippe Mathieu-Daudé
2019-10-11 16:05 ` [RFC v5 085/126] Tracing: " Vladimir Sementsov-Ogievskiy
2019-10-12 6:26 ` Philippe Mathieu-Daudé
2019-10-11 16:05 ` [RFC v5 086/126] TPM: " Vladimir Sementsov-Ogievskiy
2019-10-16 14:35 ` Stefan Berger
2019-10-11 16:05 ` [RFC v5 087/126] Migration: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 088/126] Cryptography: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 089/126] I/O Channels: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 090/126] Sockets: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 091/126] colo: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 092/126] Record/replay: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 093/126] VMDK: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 094/126] RBD: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 095/126] Sheepdog: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 096/126] VHDX: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 097/126] VDI: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 098/126] iSCSI: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 099/126] nbd: " Vladimir Sementsov-Ogievskiy
2019-10-11 19:39 ` Eric Blake
2019-10-11 16:05 ` [RFC v5 100/126] NFS: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 101/126] SSH: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 102/126] CURL: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 103/126] GLUSTER: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 104/126] NVMe Block Driver: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 105/126] Bootdevice: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 106/126] Quorum: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 107/126] blklogwrites: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 108/126] blkverify: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 109/126] parallels: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 110/126] qed: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 111/126] raw: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 112/126] qcow2: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 113/126] qcow: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 114/126] blkdebug: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 115/126] vpc: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 116/126] vvfat: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 117/126] Replication: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 118/126] PVRDMA: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 119/126] hw/core/bus.c: " Vladimir Sementsov-Ogievskiy
2019-10-12 6:29 ` Philippe Mathieu-Daudé
2019-10-11 16:05 ` [RFC v5 120/126] hw/cpu/core.c: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 121/126] hw/sd/ssi-sd.c: " Vladimir Sementsov-Ogievskiy
2019-10-12 6:33 ` Philippe Mathieu-Daudé
2019-10-14 9:07 ` Vladimir Sementsov-Ogievskiy
2019-10-14 9:14 ` Philippe Mathieu-Daudé
2019-10-14 9:15 ` Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 122/126] iothread.c: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 123/126] memory_mapping.c: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 124/126] target/tilegx/cpu.c: " Vladimir Sementsov-Ogievskiy
2019-10-12 7:13 ` Philippe Mathieu-Daudé
2019-10-11 16:05 ` [RFC v5 125/126] tests/test-image-locking.c: " Vladimir Sementsov-Ogievskiy
2019-10-11 16:05 ` [RFC v5 126/126] util/qemu-config.c: " Vladimir Sementsov-Ogievskiy
2019-10-11 17:02 ` [RFC v5 000/126] error: auto propagated local_err Eric Blake
2019-10-11 17:02 ` Eric Blake
2019-10-11 17:02 ` [Xen-devel] " Eric Blake
2019-10-11 17:02 ` Eric Blake
2019-10-14 8:37 ` Vladimir Sementsov-Ogievskiy
2019-10-14 8:37 ` Vladimir Sementsov-Ogievskiy
2019-10-14 8:37 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-10-14 8:37 ` Vladimir Sementsov-Ogievskiy
2019-10-12 2:10 ` no-reply
2019-10-12 2:10 ` no-reply
2019-10-12 2:10 ` no-reply
2019-10-14 9:14 ` Vladimir Sementsov-Ogievskiy
2019-10-14 9:14 ` Vladimir Sementsov-Ogievskiy
2019-10-14 9:14 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-10-14 9:14 ` Vladimir Sementsov-Ogievskiy
2019-10-12 2:52 ` no-reply
2019-10-12 2:52 ` no-reply
2019-10-14 9:11 ` Vladimir Sementsov-Ogievskiy
2019-10-14 9:11 ` Vladimir Sementsov-Ogievskiy
2019-10-14 9:11 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-10-14 9:11 ` Vladimir Sementsov-Ogievskiy
2019-11-08 15:30 ` Vladimir Sementsov-Ogievskiy
2019-11-08 15:30 ` Vladimir Sementsov-Ogievskiy
2019-11-08 15:30 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-11-08 15:30 ` Vladimir Sementsov-Ogievskiy
2019-11-08 18:57 ` Marc-André Lureau
2019-11-08 18:57 ` [Xen-devel] " Marc-André Lureau
2019-11-08 18:57 ` Marc-André Lureau
2019-11-12 13:46 ` Cornelia Huck
2019-11-12 13:46 ` Cornelia Huck
2019-11-12 13:46 ` [Xen-devel] " Cornelia Huck
2019-11-12 13:46 ` Cornelia Huck
2019-11-12 15:33 ` Vladimir Sementsov-Ogievskiy
2019-11-12 15:33 ` Vladimir Sementsov-Ogievskiy
2019-11-12 15:33 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-11-12 15:33 ` Vladimir Sementsov-Ogievskiy
2019-11-20 9:50 ` Vladimir Sementsov-Ogievskiy
2019-11-20 9:50 ` Vladimir Sementsov-Ogievskiy
2019-11-20 9:50 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-11-20 9:50 ` Vladimir Sementsov-Ogievskiy
2019-11-20 11:34 ` Greg Kurz
2019-11-20 12:12 ` Vladimir Sementsov-Ogievskiy
2019-11-20 12:59 ` Eric Blake
2019-11-20 12:59 ` [Xen-devel] " Eric Blake
2019-11-20 12:59 ` Eric Blake
2019-11-20 13:13 ` Kevin Wolf
2019-11-20 13:13 ` [Xen-devel] " Kevin Wolf
2019-11-20 13:13 ` Kevin Wolf
2019-11-28 8:54 ` Markus Armbruster
2019-11-28 8:54 ` Markus Armbruster
2019-11-28 8:54 ` [Xen-devel] " Markus Armbruster
2019-11-28 8:54 ` Markus Armbruster
2019-11-28 9:20 ` Vladimir Sementsov-Ogievskiy
2019-11-28 9:20 ` Vladimir Sementsov-Ogievskiy
2019-11-28 9:20 ` [Xen-devel] " Vladimir Sementsov-Ogievskiy
2019-11-28 9:20 ` Vladimir Sementsov-Ogievskiy
2019-11-28 12:21 ` Markus Armbruster
2019-11-28 12:21 ` [Xen-devel] " Markus Armbruster
2019-11-28 12:21 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191119190049.183dbbf9@bahia.lan \
--to=groug@kaod.org \
--cc=armbru@redhat.com \
--cc=clg@kaod.org \
--cc=david@gibson.dropbear.id.au \
--cc=hpoussin@reactos.org \
--cc=kwolf@redhat.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.