On 7/3/20 11:08 AM, Vladimir Sementsov-Ogievskiy 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 == &error_fatal > (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 then 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_fatal, this means that we don't break error_abort > (we'll abort on error_set, not on error_propagate) > > This commit is generated by command > > sed -n '/^SD (Secure Card)$/,/^$/{s/^F: //p}' \ > MAINTAINERS | \ > xargs git ls-files | grep '\.[hc]$' | \ > xargs spatch \ > --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ > --macro-file scripts/cocci-macro-file.h \ > --in-place --no-show-diff --max-width 80 > > Reported-by: Kevin Wolf <kw...@redhat.com> > Reported-by: Greg Kurz <gr...@kaod.org> > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com>
If possible 's/SD (Secure Card)/sd/' in subject. Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> > --- > hw/sd/sdhci-pci.c | 7 +++---- > hw/sd/sdhci.c | 21 +++++++++------------ > hw/sd/ssi-sd.c | 10 +++++----- > 3 files changed, 17 insertions(+), 21 deletions(-) > > diff --git a/hw/sd/sdhci-pci.c b/hw/sd/sdhci-pci.c > index 4f5977d487..38ec572fc6 100644 > --- a/hw/sd/sdhci-pci.c > +++ b/hw/sd/sdhci-pci.c > @@ -29,13 +29,12 @@ static Property sdhci_pci_properties[] = { > > static void sdhci_pci_realize(PCIDevice *dev, Error **errp) > { > + ERRP_AUTO_PROPAGATE(); > SDHCIState *s = PCI_SDHCI(dev); > - Error *local_err = NULL; > > sdhci_initfn(s); > - sdhci_common_realize(s, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > + sdhci_common_realize(s, errp); > + if (*errp) { > return; > } > > diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c > index eb2be6529e..be1928784d 100644 > --- a/hw/sd/sdhci.c > +++ b/hw/sd/sdhci.c > @@ -1288,7 +1288,7 @@ static const MemoryRegionOps sdhci_mmio_ops = { > > static void sdhci_init_readonly_registers(SDHCIState *s, Error **errp) > { > - Error *local_err = NULL; > + ERRP_AUTO_PROPAGATE(); > > switch (s->sd_spec_version) { > case 2 ... 3: > @@ -1299,9 +1299,8 @@ static void sdhci_init_readonly_registers(SDHCIState > *s, Error **errp) > } > s->version = (SDHC_HCVER_VENDOR << 8) | (s->sd_spec_version - 1); > > - sdhci_check_capareg(s, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > + sdhci_check_capareg(s, errp); > + if (*errp) { > return; > } > } > @@ -1332,11 +1331,10 @@ void sdhci_uninitfn(SDHCIState *s) > > void sdhci_common_realize(SDHCIState *s, Error **errp) > { > - Error *local_err = NULL; > + ERRP_AUTO_PROPAGATE(); > > - sdhci_init_readonly_registers(s, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > + sdhci_init_readonly_registers(s, errp); > + if (*errp) { > return; > } > s->buf_maxsz = sdhci_get_fifolen(s); > @@ -1456,13 +1454,12 @@ static void sdhci_sysbus_finalize(Object *obj) > > static void sdhci_sysbus_realize(DeviceState *dev, Error **errp) > { > + ERRP_AUTO_PROPAGATE(); > SDHCIState *s = SYSBUS_SDHCI(dev); > SysBusDevice *sbd = SYS_BUS_DEVICE(dev); > - Error *local_err = NULL; > > - sdhci_common_realize(s, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > + sdhci_common_realize(s, errp); > + if (*errp) { > return; > } > > diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c > index e0fb9f3093..43e5730b00 100644 > --- a/hw/sd/ssi-sd.c > +++ b/hw/sd/ssi-sd.c > @@ -241,10 +241,10 @@ static const VMStateDescription vmstate_ssi_sd = { > > static void ssi_sd_realize(SSISlave *d, Error **errp) > { > + ERRP_AUTO_PROPAGATE(); > ssi_sd_state *s = FROM_SSI_SLAVE(ssi_sd_state, d); > DeviceState *carddev; > DriveInfo *dinfo; > - Error *err = NULL; > > qbus_create_inplace(&s->sdbus, sizeof(s->sdbus), TYPE_SD_BUS, > DEVICE(d), "sd-bus"); > @@ -255,23 +255,23 @@ static void ssi_sd_realize(SSISlave *d, Error **errp) > carddev = qdev_new(TYPE_SD_CARD); > if (dinfo) { > if (!qdev_prop_set_drive_err(carddev, "drive", > - blk_by_legacy_dinfo(dinfo), &err)) { > + blk_by_legacy_dinfo(dinfo), errp)) { > goto fail; > } > } > > - if (!object_property_set_bool(OBJECT(carddev), "spi", true, &err)) { > + if (!object_property_set_bool(OBJECT(carddev), "spi", true, errp)) { > goto fail; > } > > - if (!qdev_realize_and_unref(carddev, BUS(&s->sdbus), &err)) { > + if (!qdev_realize_and_unref(carddev, BUS(&s->sdbus), errp)) { > goto fail; > } > > return; > > fail: > - error_propagate_prepend(errp, err, "failed to init SD card: "); > + error_prepend(errp, "failed to init SD card: "); > } > > static void ssi_sd_reset(DeviceState *dev) >