[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 06/11] pseries: Improve error handling in find_u
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH 06/11] pseries: Improve error handling in find_unknown_sysbus_device() |
Date: |
Fri, 11 Dec 2015 08:15:39 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 |
On 12/10/2015 05:11 PM, David Gibson wrote:
> Use error_setg() to return an error instead of using an explicit exit().
>
> Signed-off-by: David Gibson <address@hidden>
> ---
> hw/ppc/spapr.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> +++ b/hw/ppc/spapr.c
> @@ -1107,6 +1107,7 @@ static void spapr_reset_htab(sPAPRMachineState *spapr,
> Error **errp)
>
> static int find_unknown_sysbus_device(SysBusDevice *sbdev, void *opaque)
> {
> if (!matched) {
> - error_report("Device %s is not supported by this machine yet.",
> - qdev_fw_name(DEVICE(sbdev)));
> - exit(1);
> + error_setg(errp,
> + "Device %s is not supported by this machine yet",
> + qdev_fw_name(DEVICE(sbdev)));
> }
>
> return 0;
It looks like find_unknown_sysbus_device is designed to be called in a
loop, and that returning 0 lets the loop continue.
> @@ -1151,7 +1152,7 @@ static void ppc_spapr_reset(void)
> uint32_t rtas_limit;
>
> /* Check for unknown sysbus devices */
> - foreach_dynamic_sysbus_device(find_unknown_sysbus_device, NULL);
> + foreach_dynamic_sysbus_device(find_unknown_sysbus_device, &error_abort);
If a caller passes something other than &error_abort as the opaque, AND
the error condition occurs more than once in the loop iteration, then
you really need to change find_unknown_sysbus_device() to return
non-zero after raising error on the first failure, so that the loop
doesn't continue on to a second pass and attempt an error_setg() onto an
already-set error.
Of course, since _this_ patch uses &error_abort as the only client, the
loop will never continue after the first failure, but it's more robust
to be clean without having to audit the callers.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
- Re: [Qemu-devel] [PATCH 03/11] pseries: Clean up hash page table allocation error handling, (continued)