[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v5 037/126] S390 Machines: introduce ERRP_AUTO_PROPAGATE
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[RFC v5 037/126] S390 Machines: introduce ERRP_AUTO_PROPAGATE |
Date: |
Fri, 11 Oct 2019 19:04:23 +0300 |
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 <address@hidden>
Reported-by: Greg Kurz <address@hidden>
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
hw/s390x/ipl.c | 24 +++++++++++-------------
hw/s390x/s390-pci-bus.c | 37 ++++++++++++++++---------------------
2 files changed, 27 insertions(+), 34 deletions(-)
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index ca544d64c5..46b0a413cf 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -110,12 +110,12 @@ static uint64_t bios_translate_addr(void *opaque,
uint64_t srcaddr)
static void s390_ipl_realize(DeviceState *dev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
S390IPLState *ipl = S390_IPL(dev);
uint32_t *ipl_psw;
uint64_t pentry;
char *magic;
int kernel_size;
- Error *err = NULL;
int bios_size;
char *bios_filename;
@@ -133,8 +133,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
bios_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
if (bios_filename == NULL) {
- error_setg(&err, "could not find stage1 bootloader");
- goto error;
+ error_setg(errp, "could not find stage1 bootloader");
+ return;
}
bios_size = load_elf(bios_filename, NULL,
@@ -153,8 +153,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
g_free(bios_filename);
if (bios_size == -1) {
- error_setg(&err, "could not load bootloader '%s'", bios_name);
- goto error;
+ error_setg(errp, "could not load bootloader '%s'", bios_name);
+ return;
}
/* default boot target is the bios */
@@ -168,8 +168,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
if (kernel_size < 0) {
kernel_size = load_image_targphys(ipl->kernel, 0, ram_size);
if (kernel_size < 0) {
- error_setg(&err, "could not load kernel '%s'", ipl->kernel);
- goto error;
+ error_setg(errp, "could not load kernel '%s'", ipl->kernel);
+ return;
}
/* if this is Linux use KERN_IMAGE_START */
magic = rom_ptr(LINUX_MAGIC_ADDR, 6);
@@ -181,8 +181,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
if (ipl_psw) {
pentry = be32_to_cpu(*ipl_psw) & 0x7fffffffUL;
} else {
- error_setg(&err, "Could not get IPL PSW");
- goto error;
+ error_setg(errp, "Could not get IPL PSW");
+ return;
}
}
}
@@ -215,8 +215,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
initrd_size = load_image_targphys(ipl->initrd, initrd_offset,
ram_size - initrd_offset);
if (initrd_size == -1) {
- error_setg(&err, "could not load initrd '%s'", ipl->initrd);
- goto error;
+ error_setg(errp, "could not load initrd '%s'", ipl->initrd);
+ return;
}
/*
@@ -238,8 +238,6 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
ipl->compat_start_addr = ipl->start_addr;
ipl->compat_bios_start_addr = ipl->bios_start_addr;
qemu_register_reset(qdev_reset_all_fn, dev);
-error:
- error_propagate(errp, err);
}
static Property s390_ipl_properties[] = {
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 2d2f4a7c41..273e32d4ae 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -737,11 +737,11 @@ static void s390_pci_iommu_free(S390pciState *s, PCIBus
*bus, int32_t devfn)
static void s390_pcihost_realize(DeviceState *dev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
PCIBus *b;
BusState *bus;
PCIHostState *phb = PCI_HOST_BRIDGE(dev);
S390pciState *s = S390_PCI_HOST_BRIDGE(dev);
- Error *local_err = NULL;
DPRINTF("host_init\n");
@@ -751,17 +751,15 @@ static void s390_pcihost_realize(DeviceState *dev, Error
**errp)
pci_setup_iommu(b, s390_pci_dma_iommu, s);
bus = BUS(b);
- qbus_set_hotplug_handler(bus, OBJECT(dev), &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
+ qbus_set_hotplug_handler(bus, OBJECT(dev), errp);
+ if (*errp) {
return;
}
phb->bus = b;
s->bus = S390_PCI_BUS(qbus_create(TYPE_S390_PCI_BUS, dev, NULL));
- qbus_set_hotplug_handler(BUS(s->bus), OBJECT(dev), &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
+ qbus_set_hotplug_handler(BUS(s->bus), OBJECT(dev), errp);
+ if (*errp) {
return;
}
@@ -773,8 +771,7 @@ static void s390_pcihost_realize(DeviceState *dev, Error
**errp)
QTAILQ_INIT(&s->zpci_devs);
css_register_io_adapters(CSS_IO_ADAPTER_PCI, true, false,
- S390_ADAPTER_SUPPRESSIBLE, &local_err);
- error_propagate(errp, local_err);
+ S390_ADAPTER_SUPPRESSIBLE, errp);
}
static int s390_pci_msix_init(S390PCIBusDevice *pbdev)
@@ -821,7 +818,7 @@ static void s390_pci_msix_free(S390PCIBusDevice *pbdev)
static S390PCIBusDevice *s390_pci_device_new(S390pciState *s,
const char *target, Error **errp)
{
- Error *local_err = NULL;
+ ERRP_AUTO_PROPAGATE();
DeviceState *dev;
dev = qdev_try_create(BUS(s->bus), TYPE_S390_PCI_DEVICE);
@@ -830,17 +827,17 @@ static S390PCIBusDevice *s390_pci_device_new(S390pciState
*s,
return NULL;
}
- object_property_set_str(OBJECT(dev), target, "target", &local_err);
- if (local_err) {
+ object_property_set_str(OBJECT(dev), target, "target", errp);
+ if (*errp) {
object_unparent(OBJECT(dev));
- error_propagate_prepend(errp, local_err,
+ error_prepend(errp,
"zPCI device could not be created: ");
return NULL;
}
- object_property_set_bool(OBJECT(dev), true, "realized", &local_err);
- if (local_err) {
+ object_property_set_bool(OBJECT(dev), true, "realized", errp);
+ if (*errp) {
object_unparent(OBJECT(dev));
- error_propagate_prepend(errp, local_err,
+ error_prepend(errp,
"zPCI device could not be created: ");
return NULL;
}
@@ -1187,6 +1184,7 @@ static uint32_t s390_pci_generate_fid(S390pciState *s,
Error **errp)
static void s390_pci_device_realize(DeviceState *dev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
S390PCIBusDevice *zpci = S390_PCI_DEVICE(dev);
S390pciState *s = s390_get_phb();
@@ -1213,11 +1211,8 @@ static void s390_pci_device_realize(DeviceState *dev,
Error **errp)
}
if (!zpci->fid_defined) {
- Error *local_error = NULL;
-
- zpci->fid = s390_pci_generate_fid(s, &local_error);
- if (local_error) {
- error_propagate(errp, local_error);
+ zpci->fid = s390_pci_generate_fid(s, errp);
+ if (*errp) {
return;
}
} else if (s390_pci_find_dev_by_fid(s, zpci->fid)) {
--
2.21.0
- [RFC v5 000/126] error: auto propagated local_err, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 015/126] hw/s390x: rename Error ** parameter to more common errp, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 023/126] hw/vfio/ap: drop local_err from vfio_ap_realize, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 028/126] s390x: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 051/126] vfio-ccw: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 056/126] virtio-ccw: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 037/126] S390 Machines: introduce ERRP_AUTO_PROPAGATE,
Vladimir Sementsov-Ogievskiy <=
- [RFC v5 030/126] kvm: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 024/126] error: auto propagated local_err, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 025/126] scripts: add coccinelle script to use auto propagated errp, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 026/126] python: add commit-per-subsystem.py, Vladimir Sementsov-Ogievskiy, 2019/10/11
- Re: [RFC v5 000/126] error: auto propagated local_err, Eric Blake, 2019/10/11