From nobody Sun Feb 8 21:47:38 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; t=1570811840; cv=none; d=zoho.com; s=zohoarc; b=f8DpaOHyy3yDa34RyC+7fnqbrI0MjBUm2OehN/qYSmavlqen4CN1Ee7ePgsd+/0GfVBfhhRpHCKF1ZfH8wKLMjNFKrlU9/jjr5+o5MsJWDRNJ7RxMq2jE0hClIFvo8gPsybqB4D0XcIV0guHqxg5B3AKFh3r/8aFClVFKfgASVw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1570811840; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=GyPI6HwU0Vdh5+oFN/bJpFCgmyi1j9p1984WPpPaEBM=; b=kjB6dJpnyD18YZl4kkEMDKVz1bIKCwY3hePgEpp9x40C30seP+k7AFTL9pg9UkYHsHSS8vBk26C9HUbrz8jb13TdCmFYNEuE19/PToefBPLmKel7pX4hOKN2HjnsVJg2rJsRqpg+tbMkANktcPwsHJlhwPcbmcdLHsTldbeUr+k= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 157081184030871.4468323388528; Fri, 11 Oct 2019 09:37:20 -0700 (PDT) Received: from localhost ([::1]:53990 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iIxun-0007n5-Ax for importer@patchew.org; Fri, 11 Oct 2019 12:37:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36635) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iIxR2-0006RG-Na for qemu-devel@nongnu.org; Fri, 11 Oct 2019 12:06:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iIxR0-0004dZ-TX for qemu-devel@nongnu.org; Fri, 11 Oct 2019 12:06:32 -0400 Received: from relay.sw.ru ([185.231.240.75]:47964) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iIxR0-0004Ar-JU; Fri, 11 Oct 2019 12:06:30 -0400 Received: from [10.94.3.0] (helo=kvm.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.92.2) (envelope-from ) id 1iIxQf-0003XG-79; Fri, 11 Oct 2019 19:06:09 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [RFC v5 037/126] S390 Machines: introduce ERRP_AUTO_PROPAGATE Date: Fri, 11 Oct 2019 19:04:23 +0300 Message-Id: <20191011160552.22907-38-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191011160552.22907-1-vsementsov@virtuozzo.com> References: <20191011160552.22907-1-vsementsov@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Thomas Huth , vsementsov@virtuozzo.com, Matthew Rosato , David Hildenbrand , Cornelia Huck , armbru@redhat.com, Greg Kurz , Halil Pasic , Christian Borntraeger , qemu-s390x@nongnu.org, Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" 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 =3D=3D &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 Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Cornelia Huck --- 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, uin= t64_t srcaddr) =20 static void s390_ipl_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); S390IPLState *ipl =3D S390_IPL(dev); uint32_t *ipl_psw; uint64_t pentry; char *magic; int kernel_size; - Error *err =3D NULL; =20 int bios_size; char *bios_filename; @@ -133,8 +133,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **= errp) =20 bios_filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); if (bios_filename =3D=3D NULL) { - error_setg(&err, "could not find stage1 bootloader"); - goto error; + error_setg(errp, "could not find stage1 bootloader"); + return; } =20 bios_size =3D load_elf(bios_filename, NULL, @@ -153,8 +153,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **= errp) g_free(bios_filename); =20 if (bios_size =3D=3D -1) { - error_setg(&err, "could not load bootloader '%s'", bios_name); - goto error; + error_setg(errp, "could not load bootloader '%s'", bios_name); + return; } =20 /* 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 =3D 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 =3D rom_ptr(LINUX_MAGIC_ADDR, 6); @@ -181,8 +181,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **= errp) if (ipl_psw) { pentry =3D 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 =3D load_image_targphys(ipl->initrd, initrd_offset, ram_size - initrd_offset); if (initrd_size =3D=3D -1) { - error_setg(&err, "could not load initrd '%s'", ipl->initrd= ); - goto error; + error_setg(errp, "could not load initrd '%s'", ipl->initrd= ); + return; } =20 /* @@ -238,8 +238,6 @@ static void s390_ipl_realize(DeviceState *dev, Error **= errp) ipl->compat_start_addr =3D ipl->start_addr; ipl->compat_bios_start_addr =3D ipl->bios_start_addr; qemu_register_reset(qdev_reset_all_fn, dev); -error: - error_propagate(errp, err); } =20 static Property s390_ipl_properties[] =3D { 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, PCIB= us *bus, int32_t devfn) =20 static void s390_pcihost_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); PCIBus *b; BusState *bus; PCIHostState *phb =3D PCI_HOST_BRIDGE(dev); S390pciState *s =3D S390_PCI_HOST_BRIDGE(dev); - Error *local_err =3D NULL; =20 DPRINTF("host_init\n"); =20 @@ -751,17 +751,15 @@ static void s390_pcihost_realize(DeviceState *dev, Er= ror **errp) pci_setup_iommu(b, s390_pci_dma_iommu, s); =20 bus =3D 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 =3D b; =20 s->bus =3D 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; } =20 @@ -773,8 +771,7 @@ static void s390_pcihost_realize(DeviceState *dev, Erro= r **errp) QTAILQ_INIT(&s->zpci_devs); =20 css_register_io_adapters(CSS_IO_ADAPTER_PCI, true, false, - S390_ADAPTER_SUPPRESSIBLE, &local_err); - error_propagate(errp, local_err); + S390_ADAPTER_SUPPRESSIBLE, errp); } =20 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 **e= rrp) { - Error *local_err =3D NULL; + ERRP_AUTO_PROPAGATE(); DeviceState *dev; =20 dev =3D qdev_try_create(BUS(s->bus), TYPE_S390_PCI_DEVICE); @@ -830,17 +827,17 @@ static S390PCIBusDevice *s390_pci_device_new(S390pciS= tate *s, return NULL; } =20 - 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) =20 static void s390_pci_device_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); S390PCIBusDevice *zpci =3D S390_PCI_DEVICE(dev); S390pciState *s =3D s390_get_phb(); =20 @@ -1213,11 +1211,8 @@ static void s390_pci_device_realize(DeviceState *dev= , Error **errp) } =20 if (!zpci->fid_defined) { - Error *local_error =3D NULL; - - zpci->fid =3D s390_pci_generate_fid(s, &local_error); - if (local_error) { - error_propagate(errp, local_error); + zpci->fid =3D s390_pci_generate_fid(s, errp); + if (*errp) { return; } } else if (s390_pci_find_dev_by_fid(s, zpci->fid)) { --=20 2.21.0