From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, vsementsov@virtuozzo.com,
berrange@redhat.com, ehabkost@redhat.com, qemu-block@nongnu.org,
pbonzini@redhat.com
Subject: [PATCH 24/46] qapi: Smooth error checking manually
Date: Wed, 24 Jun 2020 18:43:22 +0200 [thread overview]
Message-ID: <20200624164344.3778251-25-armbru@redhat.com> (raw)
In-Reply-To: <20200624164344.3778251-1-armbru@redhat.com>
When foo(..., &err) is followed by error_propagate(errp, err), we can
often just as well do foo(..., errp). The previous commit did that
for simple cases with Coccinelle. Do it for a few more manually.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
accel/kvm/kvm-all.c | 50 ++++++++++++++++++---------------------
block/throttle-groups.c | 5 ++--
bootdevice.c | 4 ++--
hw/core/qdev-properties.c | 12 +++++-----
hw/ide/qdev.c | 4 ++--
hw/mem/nvdimm.c | 9 +++----
hw/net/ne2000-isa.c | 4 ++--
hw/usb/dev-storage.c | 4 ++--
net/net.c | 8 ++-----
qom/object.c | 30 +++++++++++------------
10 files changed, 59 insertions(+), 71 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index be02b8e07a..0b921cd24c 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -3119,37 +3119,33 @@ static void kvm_set_kernel_irqchip(Object *obj, Visitor *v,
const char *name, void *opaque,
Error **errp)
{
- Error *err = NULL;
KVMState *s = KVM_STATE(obj);
OnOffSplit mode;
- visit_type_OnOffSplit(v, name, &mode, &err);
- if (err) {
- error_propagate(errp, err);
+ if (!visit_type_OnOffSplit(v, name, &mode, errp)) {
return;
- } else {
- switch (mode) {
- case ON_OFF_SPLIT_ON:
- s->kernel_irqchip_allowed = true;
- s->kernel_irqchip_required = true;
- s->kernel_irqchip_split = ON_OFF_AUTO_OFF;
- break;
- case ON_OFF_SPLIT_OFF:
- s->kernel_irqchip_allowed = false;
- s->kernel_irqchip_required = false;
- s->kernel_irqchip_split = ON_OFF_AUTO_OFF;
- break;
- case ON_OFF_SPLIT_SPLIT:
- s->kernel_irqchip_allowed = true;
- s->kernel_irqchip_required = true;
- s->kernel_irqchip_split = ON_OFF_AUTO_ON;
- break;
- default:
- /* The value was checked in visit_type_OnOffSplit() above. If
- * we get here, then something is wrong in QEMU.
- */
- abort();
- }
+ }
+ switch (mode) {
+ case ON_OFF_SPLIT_ON:
+ s->kernel_irqchip_allowed = true;
+ s->kernel_irqchip_required = true;
+ s->kernel_irqchip_split = ON_OFF_AUTO_OFF;
+ break;
+ case ON_OFF_SPLIT_OFF:
+ s->kernel_irqchip_allowed = false;
+ s->kernel_irqchip_required = false;
+ s->kernel_irqchip_split = ON_OFF_AUTO_OFF;
+ break;
+ case ON_OFF_SPLIT_SPLIT:
+ s->kernel_irqchip_allowed = true;
+ s->kernel_irqchip_required = true;
+ s->kernel_irqchip_split = ON_OFF_AUTO_ON;
+ break;
+ default:
+ /* The value was checked in visit_type_OnOffSplit() above. If
+ * we get here, then something is wrong in QEMU.
+ */
+ abort();
}
}
diff --git a/block/throttle-groups.c b/block/throttle-groups.c
index dba2bb6451..03a53c89ea 100644
--- a/block/throttle-groups.c
+++ b/block/throttle-groups.c
@@ -889,8 +889,8 @@ static void throttle_group_set_limits(Object *obj, Visitor *v,
ThrottleLimits *argp;
Error *local_err = NULL;
- if (!visit_type_ThrottleLimits(v, name, &argp, &local_err)) {
- goto ret;
+ if (!visit_type_ThrottleLimits(v, name, &argp, errp)) {
+ return;
}
qemu_mutex_lock(&tg->lock);
throttle_get_config(&tg->ts, &cfg);
@@ -902,7 +902,6 @@ static void throttle_group_set_limits(Object *obj, Visitor *v,
unlock:
qemu_mutex_unlock(&tg->lock);
-ret:
qapi_free_ThrottleLimits(argp);
error_propagate(errp, local_err);
return;
diff --git a/bootdevice.c b/bootdevice.c
index fb09d3c668..769f40c77d 100644
--- a/bootdevice.c
+++ b/bootdevice.c
@@ -297,8 +297,8 @@ static void device_set_bootindex(Object *obj, Visitor *v, const char *name,
int32_t boot_index;
Error *local_err = NULL;
- if (!visit_type_int32(v, name, &boot_index, &local_err)) {
- goto out;
+ if (!visit_type_int32(v, name, &boot_index, errp)) {
+ return;
}
/* check whether bootindex is present in fw_boot_order list */
check_boot_index(boot_index, &local_err);
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index fa88a8885c..11e7d27ccc 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -664,15 +664,15 @@ static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
if (!visit_type_str(v, name, &str, &local_err)) {
error_free(local_err);
local_err = NULL;
- visit_type_int32(v, name, &value, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- } else if (value < -1 || value > 255) {
+ if (!visit_type_int32(v, name, &value, errp)) {
+ return;
+ }
+ if (value < -1 || value > 255) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
name ? name : "null", "pci_devfn");
- } else {
- *ptr = value;
+ return;
}
+ *ptr = value;
return;
}
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index 358f10a92e..ba8b0d7f02 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -245,8 +245,8 @@ static void ide_dev_set_bootindex(Object *obj, Visitor *v, const char *name,
int32_t boot_index;
Error *local_err = NULL;
- if (!visit_type_int32(v, name, &boot_index, &local_err)) {
- goto out;
+ if (!visit_type_int32(v, name, &boot_index, errp)) {
+ return;
}
/* check whether bootindex is present in fw_boot_order list */
check_boot_index(boot_index, &local_err);
diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c
index e6fdf6ccc3..d0d6e553cf 100644
--- a/hw/mem/nvdimm.c
+++ b/hw/mem/nvdimm.c
@@ -82,21 +82,18 @@ static void nvdimm_set_uuid(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
NVDIMMDevice *nvdimm = NVDIMM(obj);
- Error *local_err = NULL;
char *value;
- if (!visit_type_str(v, name, &value, &local_err)) {
- goto out;
+ if (!visit_type_str(v, name, &value, errp)) {
+ return;
}
if (qemu_uuid_parse(value, &nvdimm->uuid) != 0) {
error_setg(errp, "Property '%s.%s' has invalid value",
object_get_typename(obj), name);
}
- g_free(value);
-out:
- error_propagate(errp, local_err);
+ g_free(value);
}
diff --git a/hw/net/ne2000-isa.c b/hw/net/ne2000-isa.c
index 765bcd1f0b..0594abd93a 100644
--- a/hw/net/ne2000-isa.c
+++ b/hw/net/ne2000-isa.c
@@ -113,8 +113,8 @@ static void isa_ne2000_set_bootindex(Object *obj, Visitor *v,
int32_t boot_index;
Error *local_err = NULL;
- if (!visit_type_int32(v, name, &boot_index, &local_err)) {
- goto out;
+ if (!visit_type_int32(v, name, &boot_index, errp)) {
+ return;
}
/* check whether bootindex is present in fw_boot_order list */
check_boot_index(boot_index, &local_err);
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 1c3bd2578c..721665191e 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -736,8 +736,8 @@ static void usb_msd_set_bootindex(Object *obj, Visitor *v, const char *name,
int32_t boot_index;
Error *local_err = NULL;
- if (!visit_type_int32(v, name, &boot_index, &local_err)) {
- goto out;
+ if (!visit_type_int32(v, name, &boot_index, errp)) {
+ return;
}
/* check whether bootindex is present in fw_boot_order list */
check_boot_index(boot_index, &local_err);
diff --git a/net/net.c b/net/net.c
index d1130296e1..e1f45d3b36 100644
--- a/net/net.c
+++ b/net/net.c
@@ -1052,7 +1052,6 @@ static int net_client_init(QemuOpts *opts, bool is_netdev, Error **errp)
{
gchar **substrings = NULL;
Netdev *object = NULL;
- Error *err = NULL;
int ret = -1;
Visitor *v = opts_visitor_new(opts);
@@ -1100,16 +1099,13 @@ static int net_client_init(QemuOpts *opts, bool is_netdev, Error **errp)
qemu_opts_set_id(opts, g_strdup_printf("__org.qemu.net%i", idx++));
}
- visit_type_Netdev(v, NULL, &object, &err);
-
- if (!err) {
- ret = net_client_init1(object, is_netdev, &err);
+ if (visit_type_Netdev(v, NULL, &object, errp)) {
+ ret = net_client_init1(object, is_netdev, errp);
}
qapi_free_Netdev(object);
out:
- error_propagate(errp, err);
g_strfreev(substrings);
visit_free(v);
return ret;
diff --git a/qom/object.c b/qom/object.c
index 780a700542..b8aac074c2 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1766,9 +1766,11 @@ static void object_set_link_property(Object *obj, Visitor *v,
Object *new_target = NULL;
char *path = NULL;
- visit_type_str(v, name, &path, &local_err);
+ if (!visit_type_str(v, name, &path, errp)) {
+ return;
+ }
- if (!local_err && strcmp(path, "") != 0) {
+ if (strcmp(path, "") != 0) {
new_target = object_resolve_link(obj, name, path, &local_err);
}
@@ -2293,36 +2295,34 @@ static void property_get_tm(Object *obj, Visitor *v, const char *name,
prop->get(obj, &value, &err);
if (err) {
- goto out;
+ error_propagate(errp, err);
+ return;
}
- if (!visit_start_struct(v, name, NULL, 0, &err)) {
- goto out;
+ if (!visit_start_struct(v, name, NULL, 0, errp)) {
+ return;
}
- if (!visit_type_int32(v, "tm_year", &value.tm_year, &err)) {
+ if (!visit_type_int32(v, "tm_year", &value.tm_year, errp)) {
goto out_end;
}
- if (!visit_type_int32(v, "tm_mon", &value.tm_mon, &err)) {
+ if (!visit_type_int32(v, "tm_mon", &value.tm_mon, errp)) {
goto out_end;
}
- if (!visit_type_int32(v, "tm_mday", &value.tm_mday, &err)) {
+ if (!visit_type_int32(v, "tm_mday", &value.tm_mday, errp)) {
goto out_end;
}
- if (!visit_type_int32(v, "tm_hour", &value.tm_hour, &err)) {
+ if (!visit_type_int32(v, "tm_hour", &value.tm_hour, errp)) {
goto out_end;
}
- if (!visit_type_int32(v, "tm_min", &value.tm_min, &err)) {
+ if (!visit_type_int32(v, "tm_min", &value.tm_min, errp)) {
goto out_end;
}
- if (!visit_type_int32(v, "tm_sec", &value.tm_sec, &err)) {
+ if (!visit_type_int32(v, "tm_sec", &value.tm_sec, errp)) {
goto out_end;
}
- visit_check_struct(v, &err);
+ visit_check_struct(v, errp);
out_end:
visit_end_struct(v, NULL);
-out:
- error_propagate(errp, err);
-
}
static void property_release_tm(Object *obj, const char *name,
--
2.26.2
next prev parent reply other threads:[~2020-06-24 16:53 UTC|newest]
Thread overview: 157+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-24 16:42 [PATCH 00/46] Less clumsy error checking Markus Armbruster
2020-06-24 16:42 ` [PATCH 01/46] error: Improve examples in error.h's big comment Markus Armbruster
2020-06-24 16:59 ` Eric Blake
2020-06-25 14:43 ` Vladimir Sementsov-Ogievskiy
2020-06-25 14:44 ` Greg Kurz
2020-06-25 15:28 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 02/46] error: Document Error API usage rules Markus Armbruster
2020-06-24 17:51 ` Eric Blake
2020-06-25 7:16 ` Vladimir Sementsov-Ogievskiy
2020-06-25 11:23 ` Markus Armbruster
2020-06-25 11:46 ` Vladimir Sementsov-Ogievskiy
2020-06-25 15:17 ` Greg Kurz
2020-06-25 15:30 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 03/46] qdev: Smooth error checking of qdev_realize() & friends Markus Armbruster
2020-06-24 18:03 ` Eric Blake
2020-06-25 11:36 ` Markus Armbruster
2020-06-25 12:39 ` Markus Armbruster
2020-06-25 19:00 ` Vladimir Sementsov-Ogievskiy
2020-06-26 6:19 ` Markus Armbruster
2020-07-02 14:56 ` Markus Armbruster
2020-07-03 10:41 ` Markus Armbruster
2020-06-29 10:40 ` Greg Kurz
2020-06-24 16:43 ` [PATCH 04/46] macio: Tidy up error handling in macio_newworld_realize() Markus Armbruster
2020-06-24 21:52 ` Eric Blake
2020-06-24 23:54 ` David Gibson
2020-06-25 19:09 ` Vladimir Sementsov-Ogievskiy
2020-06-24 16:43 ` [PATCH 05/46] virtio-crypto-pci: Tidy up virtio_crypto_pci_realize() Markus Armbruster
2020-06-24 21:52 ` Eric Blake
2020-06-25 19:12 ` Vladimir Sementsov-Ogievskiy
2020-06-28 0:50 ` Gonglei (Arei)
2020-06-24 16:43 ` [PATCH 06/46] error: Avoid error_propagate() when error is not used here Markus Armbruster
2020-06-24 18:17 ` Eric Blake
2020-06-25 12:39 ` Markus Armbruster
2020-06-26 14:36 ` Vladimir Sementsov-Ogievskiy
2020-06-27 11:57 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 07/46] error: Avoid more " Markus Armbruster
2020-06-24 18:21 ` Eric Blake
2020-06-25 12:50 ` Markus Armbruster
2020-06-25 14:41 ` Eric Blake
2020-06-26 17:21 ` Vladimir Sementsov-Ogievskiy
2020-06-27 12:18 ` Markus Armbruster
2020-07-02 12:54 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 08/46] error: Avoid unnecessary error_propagate() after error_setg() Markus Armbruster
2020-06-24 18:32 ` Eric Blake
2020-06-25 13:05 ` Markus Armbruster
2020-06-26 18:22 ` Vladimir Sementsov-Ogievskiy
2020-06-27 11:56 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 09/46] error: Avoid error_propagate() after migrate_add_blocker() Markus Armbruster
2020-06-24 19:34 ` Eric Blake
2020-06-29 8:29 ` Vladimir Sementsov-Ogievskiy
2020-06-24 16:43 ` [PATCH 10/46] qemu-option: Check return value instead of @err where convenient Markus Armbruster
2020-06-24 19:36 ` Eric Blake
2020-06-29 9:11 ` Vladimir Sementsov-Ogievskiy
2020-07-01 8:02 ` Markus Armbruster
2020-07-02 9:28 ` Vladimir Sementsov-Ogievskiy
2020-06-24 16:43 ` [PATCH 11/46] qemu-option: Make uses of find_desc_by_name() more similar Markus Armbruster
2020-06-24 19:37 ` Eric Blake
2020-06-29 9:25 ` Vladimir Sementsov-Ogievskiy
2020-06-29 9:36 ` Vladimir Sementsov-Ogievskiy
2020-06-29 9:47 ` Vladimir Sementsov-Ogievskiy
2020-07-01 8:07 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 12/46] qemu-option: Factor out helper find_default_by_name() Markus Armbruster
2020-06-24 19:38 ` Eric Blake
2020-06-29 9:46 ` Vladimir Sementsov-Ogievskiy
2020-06-24 16:43 ` [PATCH 13/46] qemu-option: Simplify around find_default_by_name() Markus Armbruster
2020-06-24 19:46 ` Eric Blake
2020-06-25 13:12 ` Markus Armbruster
2020-06-29 10:02 ` Vladimir Sementsov-Ogievskiy
2020-06-24 16:43 ` [PATCH 14/46] qemu-option: Factor out helper opt_create() Markus Armbruster
2020-06-24 19:47 ` Eric Blake
2020-06-29 10:09 ` Vladimir Sementsov-Ogievskiy
2020-07-01 8:13 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 15/46] qemu-option: Tidy up opt_set() not to free arguments on failure Markus Armbruster
2020-06-24 19:50 ` Eric Blake
2020-06-29 10:37 ` Vladimir Sementsov-Ogievskiy
2020-07-01 9:01 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 16/46] qemu-option: Make functions taking Error ** return bool, not void Markus Armbruster
2020-06-24 19:55 ` Eric Blake
2020-06-29 11:15 ` Vladimir Sementsov-Ogievskiy
2020-06-24 16:43 ` [PATCH 17/46] qemu-option: Smooth error checking with Coccinelle Markus Armbruster
2020-06-24 20:08 ` Eric Blake
2020-06-25 13:33 ` Markus Armbruster
2020-06-29 13:58 ` Vladimir Sementsov-Ogievskiy
2020-06-24 16:43 ` [PATCH 18/46] qemu-option: Smooth error checking manually Markus Armbruster
2020-06-24 20:10 ` Eric Blake
2020-06-25 13:46 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 19/46] block: Avoid unnecessary error_propagate() after error_setg() Markus Armbruster
2020-06-24 20:12 ` Eric Blake
2020-06-24 16:43 ` [PATCH 20/46] block: Avoid error accumulation in bdrv_img_create() Markus Armbruster
2020-06-24 20:14 ` Eric Blake
2020-06-25 13:47 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 21/46] hmp: Eliminate a variable in hmp_migrate_set_parameter() Markus Armbruster
2020-06-24 20:15 ` Eric Blake
2020-06-24 16:43 ` [PATCH 22/46] qapi: Make visitor functions taking Error ** return bool, not void Markus Armbruster
2020-06-24 20:43 ` Eric Blake
2020-06-25 14:56 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 23/46] qapi: Smooth error checking with Coccinelle Markus Armbruster
2020-06-24 20:50 ` Eric Blake
2020-06-25 15:03 ` Markus Armbruster
2020-06-24 16:43 ` Markus Armbruster [this message]
2020-06-24 20:53 ` [PATCH 24/46] qapi: Smooth error checking manually Eric Blake
2020-06-24 16:43 ` [PATCH 25/46] qapi: Smooth visitor error checking in generated code Markus Armbruster
2020-06-24 20:58 ` Eric Blake
2020-06-24 16:43 ` [PATCH 26/46] qapi: Smooth another visitor error checking pattern Markus Armbruster
2020-06-24 21:02 ` Eric Blake
2020-06-24 16:43 ` [PATCH 27/46] qapi: Purge error_propagate() from QAPI core Markus Armbruster
2020-06-24 21:03 ` Eric Blake
2020-06-24 16:43 ` [PATCH 28/46] block/parallels: Simplify parallels_open() after previous commit Markus Armbruster
2020-06-24 21:03 ` Eric Blake
2020-06-24 16:43 ` [PATCH 29/46] acpi: Avoid unnecessary error_propagate() after error_setg() Markus Armbruster
2020-06-24 21:04 ` Eric Blake
2020-06-24 16:43 ` [PATCH 30/46] s390x/pci: Fix harmless mistake in zpci's property fid's setter Markus Armbruster
2020-06-24 19:31 ` Matthew Rosato
2020-06-25 7:03 ` Cornelia Huck
2020-06-24 16:43 ` [PATCH 31/46] qom: Use error_reportf_err() instead of g_printerr() in examples Markus Armbruster
2020-06-24 21:05 ` Eric Blake
2020-06-24 16:43 ` [PATCH 32/46] qom: Rename qdev_get_type() to object_get_type() Markus Armbruster
2020-06-24 21:06 ` Eric Blake
2020-06-25 6:33 ` Philippe Mathieu-Daudé
2020-06-24 16:43 ` [PATCH 33/46] qom: Crash more nicely on object_property_get_link() failure Markus Armbruster
2020-06-24 21:07 ` Eric Blake
2020-06-25 15:05 ` Markus Armbruster
2020-07-02 12:11 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 34/46] qom: Don't handle impossible " Markus Armbruster
2020-06-24 21:13 ` Eric Blake
2020-06-25 6:36 ` Philippe Mathieu-Daudé
2020-06-25 15:09 ` Markus Armbruster
2020-06-29 14:38 ` Philippe Mathieu-Daudé
2020-07-01 9:15 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 35/46] qom: Use return values to check for error where that's simpler Markus Armbruster
2020-06-24 21:24 ` Eric Blake
2020-06-24 16:43 ` [PATCH 36/46] qom: Put name parameter before value / visitor parameter Markus Armbruster
2020-06-24 21:27 ` Eric Blake
2020-06-25 15:14 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 37/46] qom: Make functions taking Error ** return bool, not void Markus Armbruster
2020-06-24 21:32 ` Eric Blake
2020-06-25 15:14 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 38/46] qom: Smooth error checking with Coccinelle Markus Armbruster
2020-06-24 21:35 ` Eric Blake
2020-06-24 16:43 ` [PATCH 39/46] qom: Smooth error checking manually Markus Armbruster
2020-06-24 21:38 ` Eric Blake
2020-06-24 16:43 ` [PATCH 40/46] qom: Make functions taking Error ** return bool, not 0/-1 Markus Armbruster
2020-06-24 21:40 ` Eric Blake
2020-06-24 16:43 ` [PATCH 41/46] qdev: Make functions taking Error ** return bool, not void Markus Armbruster
2020-06-24 21:40 ` Eric Blake
2020-06-24 16:43 ` [PATCH 42/46] qdev: Smooth error checking with Coccinelle Markus Armbruster
2020-06-24 21:41 ` Eric Blake
2020-06-24 16:43 ` [PATCH 43/46] qdev: Smooth error checking manually Markus Armbruster
2020-06-24 21:42 ` Eric Blake
2020-06-25 15:15 ` Markus Armbruster
2020-06-24 16:43 ` [PATCH 44/46] qemu-img: Ignore Error objects where the return value suffices Markus Armbruster
2020-06-24 21:49 ` Eric Blake
2020-06-24 16:43 ` [PATCH 45/46] qdev: " Markus Armbruster
2020-06-24 21:50 ` Eric Blake
2020-06-24 16:43 ` [PATCH 46/46] hmp: " Markus Armbruster
2020-06-24 21:51 ` Eric Blake
2020-06-24 16:58 ` [PATCH 00/46] Less clumsy error checking Paolo Bonzini
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=20200624164344.3778251-25-armbru@redhat.com \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=ehabkost@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).