* [Qemu-devel] [PATCH v2 0/6] Add error_abort and associated cleanups
@ 2013-12-05 0:47 Peter Crosthwaite
2013-12-05 0:48 ` [Qemu-devel] [PATCH v2 1/6] error: Add error_abort Peter Crosthwaite
` (5 more replies)
0 siblings, 6 replies; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-05 0:47 UTC (permalink / raw)
To: qemu-devel; +Cc: imammedo, afaerber, armbru, pbonzini
Following our discussion RE self asserting API calls, here is a spin of
my proposal. This series obsoletes the need for _nofail variants for
Error ** accepting APIs. Is also greatly reduces the verbosity of calls
sites that are currently asserting against errors.
Patch 1 is the main event - addition of error_abort. The following
patches then cleanup uses of _nofail and assert_no_error().
To give it a smoke test, I introduce a (critical) bug into QOM:
--- a/qom/object.c
+++ b/qom/object.c
@@ -797,7 +797,7 @@ void object_property_set(Object *obj, Visitor *v,
const char *name,
return;
}
- if (!prop->set) {
+ if (prop->set) {
error_set(errp, QERR_PERMISSION_DENIED);
} else {
prop->set(obj, v, prop->opaque, name, errp);
And run QEMU:
$ gdb --args ./microblazeel-softmmu/qemu-system-microblazeel -M petalogix-ml605 -nographic
Without application of this series, the bug manifests as:
qemu-system-microblazeel: Insufficient permission to perform this operation
Program received signal SIGABRT, Aborted.
(gdb) bt
0 0x00007ffff55f7425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
1 0x00007ffff55fab8b in __GI_abort () at abort.c:91
2 0x00005555557073da in assert_no_error (err=<optimized out>) at qobject/qerror.c:128
3 0x0000555555615159 in qdev_property_add_static (dev=0x555555e9e6a0, prop=0x5555559ea4c0, errp=0x7fffffffe3c0) at hw/core/qdev.c:666
4 0x0000555555615355 in device_initfn (obj=<optimized out>) at hw/core/qdev.c:744
With this series, we now get a the full backtrace into the QOM API when
the assertion occurs (note stack frames 2-4 giving visibility into the
broken QOM API):
qemu-system-microblazeel: Insufficient permission to perform this operation
Program received signal SIGABRT, Aborted.
(gdb) bt
0 0x00007ffff55f7425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
1 0x00007ffff55fab8b in __GI_abort () at abort.c:91
2 0x000055555570c5a4 in error_set (errp=0x555555e1b5f0, err_class=ERROR_CLASS_GENERIC_ERROR, fmt=0x55555571f5c0 "Insufficient permission to perform this operation") at util/error.c:47
3 0x00005555556778e5 in object_property_set_qobject (obj=0x555555e9e6a0, value=<optimized out>, name=0x55555574e7a6 "xlnx.base-vectors", errp=0x555555e1b5f0) at qom/qom-qobject.c:24
4 0x000055555567674d in object_property_set_int (obj=0x555555e9e6a0, value=<optimized out>, name=0x55555574e7a6 "xlnx.base-vectors", errp=0x555555e1b5f0) at qom/object.c:898
5 0x0000555555615192 in qdev_property_add_static (dev=0x555555e9e6a0, prop=0x5555559ea4c0, errp=0x555555e1b5f0) at hw/core/qdev.c:664
6 0x000055555561534f in device_initfn (obj=<optimized out>) at hw/core/qdev.c:741
Changed since v1:
Addressed Markus review.
Guarded against erroneous setting of error_abort != NULL.
Peter Crosthwaite (6):
error: Add error_abort
hw/core/qdev: Delete dead code
hw: Remove assert_no_error usages
target-i386: Remove assert_no_error usage
qemu-option: Remove qemu_opts_create_nofail
qerror: Remove assert_no_error()
block/blkdebug.c | 2 +-
block/blkverify.c | 2 +-
block/curl.c | 2 +-
block/gluster.c | 2 +-
block/iscsi.c | 2 +-
block/nbd.c | 3 ++-
block/qcow2.c | 2 +-
block/raw-posix.c | 2 +-
block/raw-win32.c | 5 +++--
block/rbd.c | 2 +-
block/sheepdog.c | 2 +-
block/vvfat.c | 2 +-
blockdev.c | 6 ++++--
hw/core/qdev-properties-system.c | 8 ++------
hw/core/qdev-properties.c | 40 ++++++++++------------------------------
hw/core/qdev.c | 28 +++++++---------------------
hw/dma/xilinx_axidma.c | 13 ++++---------
hw/net/xilinx_axienet.c | 13 ++++---------
hw/watchdog/watchdog.c | 3 ++-
include/hw/xilinx.h | 14 ++++----------
include/qapi/error.h | 6 ++++++
include/qapi/qmp/qerror.h | 1 -
include/qemu/option.h | 1 -
qdev-monitor.c | 2 +-
qemu-img.c | 2 +-
qobject/qerror.c | 8 --------
target-i386/cpu.c | 4 +---
util/error.c | 28 ++++++++++++++++++++++++----
util/qemu-config.c | 2 +-
util/qemu-option.c | 9 ---------
util/qemu-sockets.c | 18 +++++++++---------
vl.c | 15 +++++++++------
32 files changed, 104 insertions(+), 145 deletions(-)
--
1.8.4.4
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v2 1/6] error: Add error_abort
2013-12-05 0:47 [Qemu-devel] [PATCH v2 0/6] Add error_abort and associated cleanups Peter Crosthwaite
@ 2013-12-05 0:48 ` Peter Crosthwaite
2013-12-05 10:13 ` Markus Armbruster
2013-12-05 0:49 ` [Qemu-devel] [PATCH v2 2/6] hw/core/qdev: Delete dead code Peter Crosthwaite
` (4 subsequent siblings)
5 siblings, 1 reply; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-05 0:48 UTC (permalink / raw)
To: qemu-devel; +Cc: imammedo, afaerber, armbru, pbonzini
Add a special Error * that can be passed to error handling APIs to
signal that any errors are fatal and should abort QEMU. There are two
advantages to this:
- allows for brevity when wishing to assert success of Error **
accepting APIs. No need for this pattern:
Error * local_err = NULL;
api_call(foo, bar, &local_err);
assert_no_error(local_err);
This also removes the need for _nofail variants of APIs with
asserting call sites now reduced to 1LOC.
- SIGABRT happens from within the offending API. When a fatal error
occurs in an API call (when the caller is asserting sucess) failure
often means the API itself is broken. With the abort happening in the
API call now, the stack frames into the call are available at debug
time. In the assert_no_error scheme the abort happens after the fact.
The exact semantic is that when an error is raised, if the argument
Error ** matches &error_abort, then the abort occurs immediately. The
error messaged is reported.
For error_propagate, if the destination error is &error_abort, then
the abort happens at propagation time.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
changed since v1:
Delayed assertions that *errp == NULL.
include/qapi/error.h | 6 ++++++
util/error.c | 28 ++++++++++++++++++++++++----
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/include/qapi/error.h b/include/qapi/error.h
index 7d4c696..c0f0c3b 100644
--- a/include/qapi/error.h
+++ b/include/qapi/error.h
@@ -95,4 +95,10 @@ void error_propagate(Error **dst_err, Error *local_err);
*/
void error_free(Error *err);
+/**
+ * If passed to error_set and friends, abort().
+ */
+
+extern Error *error_abort;
+
#endif
diff --git a/util/error.c b/util/error.c
index ec0faa6..129bc1e 100644
--- a/util/error.c
+++ b/util/error.c
@@ -23,6 +23,8 @@ struct Error
ErrorClass err_class;
};
+Error *error_abort;
+
void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
{
Error *err;
@@ -31,7 +33,6 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
if (errp == NULL) {
return;
}
- assert(*errp == NULL);
err = g_malloc0(sizeof(*err));
@@ -40,6 +41,12 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
va_end(ap);
err->err_class = err_class;
+ if (errp == &error_abort) {
+ error_report("%s", error_get_pretty(err));
+ abort();
+ }
+
+ assert(*errp == NULL);
*errp = err;
}
@@ -53,7 +60,6 @@ void error_set_errno(Error **errp, int os_errno, ErrorClass err_class,
if (errp == NULL) {
return;
}
- assert(*errp == NULL);
err = g_malloc0(sizeof(*err));
@@ -68,6 +74,12 @@ void error_set_errno(Error **errp, int os_errno, ErrorClass err_class,
va_end(ap);
err->err_class = err_class;
+ if (errp == &error_abort) {
+ error_report("%s", error_get_pretty(err));
+ abort();
+ }
+
+ assert(*errp == NULL);
*errp = err;
}
@@ -88,7 +100,6 @@ void error_set_win32(Error **errp, int win32_err, ErrorClass err_class,
if (errp == NULL) {
return;
}
- assert(*errp == NULL);
err = g_malloc0(sizeof(*err));
@@ -106,6 +117,12 @@ void error_set_win32(Error **errp, int win32_err, ErrorClass err_class,
va_end(ap);
err->err_class = err_class;
+ if (errp == &error_abort) {
+ error_report("%s", error_get_pretty(err));
+ abort();
+ }
+
+ assert(*errp == NULL);
*errp = err;
}
@@ -147,7 +164,10 @@ void error_free(Error *err)
void error_propagate(Error **dst_err, Error *local_err)
{
- if (dst_err && !*dst_err) {
+ if (local_err && dst_err == &error_abort) {
+ error_report("%s", error_get_pretty(local_err));
+ abort();
+ } else if (dst_err && !*dst_err) {
*dst_err = local_err;
} else if (local_err) {
error_free(local_err);
--
1.8.4.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v2 2/6] hw/core/qdev: Delete dead code
2013-12-05 0:47 [Qemu-devel] [PATCH v2 0/6] Add error_abort and associated cleanups Peter Crosthwaite
2013-12-05 0:48 ` [Qemu-devel] [PATCH v2 1/6] error: Add error_abort Peter Crosthwaite
@ 2013-12-05 0:49 ` Peter Crosthwaite
2013-12-05 0:49 ` [Qemu-devel] [PATCH v2 3/6] hw: Remove assert_no_error usages Peter Crosthwaite
` (3 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-05 0:49 UTC (permalink / raw)
To: qemu-devel; +Cc: imammedo, afaerber, armbru, pbonzini
This is unreachable code, as it's already asserted that no errors have
occurred. Delete.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
hw/core/qdev.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index e374a93..adbff18 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -746,11 +746,6 @@ static void device_initfn(Object *obj)
}
class = object_class_get_parent(class);
} while (class != object_class_by_name(TYPE_DEVICE));
- if (err != NULL) {
- qerror_report_err(err);
- error_free(err);
- exit(1);
- }
object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS,
(Object **)&dev->parent_bus, &err);
--
1.8.4.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v2 3/6] hw: Remove assert_no_error usages
2013-12-05 0:47 [Qemu-devel] [PATCH v2 0/6] Add error_abort and associated cleanups Peter Crosthwaite
2013-12-05 0:48 ` [Qemu-devel] [PATCH v2 1/6] error: Add error_abort Peter Crosthwaite
2013-12-05 0:49 ` [Qemu-devel] [PATCH v2 2/6] hw/core/qdev: Delete dead code Peter Crosthwaite
@ 2013-12-05 0:49 ` Peter Crosthwaite
2013-12-05 0:50 ` [Qemu-devel] [PATCH v2 4/6] target-i386: Remove assert_no_error usage Peter Crosthwaite
` (2 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-05 0:49 UTC (permalink / raw)
To: qemu-devel; +Cc: imammedo, afaerber, armbru, pbonzini
Replace assert_no_error() usages with the error_abort system.
&error_abort is passed into API calls to signal to the Error sub-system
that any errors are fatal. Removes need for caller assertions.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
changed since v1: Split unrelated dead code removal to sep patch
Remove stray " " (Markus Review).
hw/core/qdev-properties-system.c | 8 ++------
hw/core/qdev-properties.c | 40 ++++++++++------------------------------
hw/core/qdev.c | 23 +++++++----------------
hw/dma/xilinx_axidma.c | 13 ++++---------
hw/net/xilinx_axienet.c | 13 ++++---------
include/hw/xilinx.h | 14 ++++----------
6 files changed, 31 insertions(+), 80 deletions(-)
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 729efa8..3f29b49 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -352,21 +352,17 @@ void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name,
void qdev_prop_set_chr(DeviceState *dev, const char *name,
CharDriverState *value)
{
- Error *errp = NULL;
assert(!value || value->label);
object_property_set_str(OBJECT(dev),
- value ? value->label : "", name, &errp);
- assert_no_error(errp);
+ value ? value->label : "", name, &error_abort);
}
void qdev_prop_set_netdev(DeviceState *dev, const char *name,
NetClientState *value)
{
- Error *errp = NULL;
assert(!value || value->name);
object_property_set_str(OBJECT(dev),
- value ? value->name : "", name, &errp);
- assert_no_error(errp);
+ value ? value->name : "", name, &error_abort);
}
void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index dc8ae69..b949f0e 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1003,73 +1003,55 @@ void qdev_prop_parse(DeviceState *dev, const char *name, const char *value,
void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value)
{
- Error *errp = NULL;
- object_property_set_bool(OBJECT(dev), value, name, &errp);
- assert_no_error(errp);
+ object_property_set_bool(OBJECT(dev), value, name, &error_abort);
}
void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value)
{
- Error *errp = NULL;
- object_property_set_int(OBJECT(dev), value, name, &errp);
- assert_no_error(errp);
+ object_property_set_int(OBJECT(dev), value, name, &error_abort);
}
void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value)
{
- Error *errp = NULL;
- object_property_set_int(OBJECT(dev), value, name, &errp);
- assert_no_error(errp);
+ object_property_set_int(OBJECT(dev), value, name, &error_abort);
}
void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value)
{
- Error *errp = NULL;
- object_property_set_int(OBJECT(dev), value, name, &errp);
- assert_no_error(errp);
+ object_property_set_int(OBJECT(dev), value, name, &error_abort);
}
void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value)
{
- Error *errp = NULL;
- object_property_set_int(OBJECT(dev), value, name, &errp);
- assert_no_error(errp);
+ object_property_set_int(OBJECT(dev), value, name, &error_abort);
}
void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value)
{
- Error *errp = NULL;
- object_property_set_int(OBJECT(dev), value, name, &errp);
- assert_no_error(errp);
+ object_property_set_int(OBJECT(dev), value, name, &error_abort);
}
void qdev_prop_set_string(DeviceState *dev, const char *name, const char *value)
{
- Error *errp = NULL;
- object_property_set_str(OBJECT(dev), value, name, &errp);
- assert_no_error(errp);
+ object_property_set_str(OBJECT(dev), value, name, &error_abort);
}
void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value)
{
- Error *errp = NULL;
char str[2 * 6 + 5 + 1];
snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x",
value[0], value[1], value[2], value[3], value[4], value[5]);
- object_property_set_str(OBJECT(dev), str, name, &errp);
- assert_no_error(errp);
+ object_property_set_str(OBJECT(dev), str, name, &error_abort);
}
void qdev_prop_set_enum(DeviceState *dev, const char *name, int value)
{
Property *prop;
- Error *errp = NULL;
prop = qdev_prop_find(dev, name);
object_property_set_str(OBJECT(dev), prop->info->enum_table[value],
- name, &errp);
- assert_no_error(errp);
+ name, &error_abort);
}
void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value)
@@ -1161,12 +1143,10 @@ static void set_size(Object *obj, Visitor *v, void *opaque,
static int parse_size(DeviceState *dev, Property *prop, const char *str)
{
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
- Error *errp = NULL;
if (str != NULL) {
- parse_option_size(prop->name, str, ptr, &errp);
+ parse_option_size(prop->name, str, ptr, &error_abort);
}
- assert_no_error(errp);
return 0;
}
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index adbff18..7d869fc 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -656,14 +656,13 @@ void qdev_property_add_static(DeviceState *dev, Property *prop,
}
if (prop->qtype == QTYPE_QBOOL) {
- object_property_set_bool(obj, prop->defval, prop->name, &local_err);
+ object_property_set_bool(obj, prop->defval, prop->name, &error_abort);
} else if (prop->info->enum_table) {
object_property_set_str(obj, prop->info->enum_table[prop->defval],
- prop->name, &local_err);
+ prop->name, &error_abort);
} else if (prop->qtype == QTYPE_QINT) {
- object_property_set_int(obj, prop->defval, prop->name, &local_err);
+ object_property_set_int(obj, prop->defval, prop->name, &error_abort);
}
- assert_no_error(local_err);
}
static bool device_get_realized(Object *obj, Error **err)
@@ -723,7 +722,6 @@ static void device_initfn(Object *obj)
DeviceState *dev = DEVICE(obj);
ObjectClass *class;
Property *prop;
- Error *err = NULL;
if (qdev_hotplug) {
dev->hotplugged = 1;
@@ -739,26 +737,19 @@ static void device_initfn(Object *obj)
class = object_get_class(OBJECT(dev));
do {
for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) {
- qdev_property_add_legacy(dev, prop, &err);
- assert_no_error(err);
- qdev_property_add_static(dev, prop, &err);
- assert_no_error(err);
+ qdev_property_add_legacy(dev, prop, &error_abort);
+ qdev_property_add_static(dev, prop, &error_abort);
}
class = object_class_get_parent(class);
} while (class != object_class_by_name(TYPE_DEVICE));
object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS,
- (Object **)&dev->parent_bus, &err);
- assert_no_error(err);
+ (Object **)&dev->parent_bus, &error_abort);
}
static void device_post_init(Object *obj)
{
- DeviceState *dev = DEVICE(obj);
- Error *err = NULL;
-
- qdev_prop_set_globals(dev, &err);
- assert_no_error(err);
+ qdev_prop_set_globals(DEVICE(obj), &error_abort);
}
/* Unlink device from bus and free the structure. */
diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
index d67c5f1..19f07b3 100644
--- a/hw/dma/xilinx_axidma.c
+++ b/hw/dma/xilinx_axidma.c
@@ -569,26 +569,21 @@ static void xilinx_axidma_init(Object *obj)
{
XilinxAXIDMA *s = XILINX_AXI_DMA(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
- Error *errp = NULL;
object_property_add_link(obj, "axistream-connected", TYPE_STREAM_SLAVE,
- (Object **) &s->tx_data_dev, &errp);
- assert_no_error(errp);
+ (Object **)&s->tx_data_dev, &error_abort);
object_property_add_link(obj, "axistream-control-connected",
TYPE_STREAM_SLAVE,
- (Object **) &s->tx_control_dev, &errp);
- assert_no_error(errp);
+ (Object **)&s->tx_control_dev, &error_abort);
object_initialize(&s->rx_data_dev, sizeof(s->rx_data_dev),
TYPE_XILINX_AXI_DMA_DATA_STREAM);
object_initialize(&s->rx_control_dev, sizeof(s->rx_control_dev),
TYPE_XILINX_AXI_DMA_CONTROL_STREAM);
object_property_add_child(OBJECT(s), "axistream-connected-target",
- (Object *)&s->rx_data_dev, &errp);
- assert_no_error(errp);
+ (Object *)&s->rx_data_dev, &error_abort);
object_property_add_child(OBJECT(s), "axistream-control-connected-target",
- (Object *)&s->rx_control_dev, &errp);
- assert_no_error(errp);
+ (Object *)&s->rx_control_dev, &error_abort);
sysbus_init_irq(sbd, &s->streams[0].irq);
sysbus_init_irq(sbd, &s->streams[1].irq);
diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c
index 3eb7715..0bd5eda 100644
--- a/hw/net/xilinx_axienet.c
+++ b/hw/net/xilinx_axienet.c
@@ -980,26 +980,21 @@ static void xilinx_enet_init(Object *obj)
{
XilinxAXIEnet *s = XILINX_AXI_ENET(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
- Error *errp = NULL;
object_property_add_link(obj, "axistream-connected", TYPE_STREAM_SLAVE,
- (Object **) &s->tx_data_dev, &errp);
- assert_no_error(errp);
+ (Object **) &s->tx_data_dev, &error_abort);
object_property_add_link(obj, "axistream-control-connected",
TYPE_STREAM_SLAVE,
- (Object **) &s->tx_control_dev, &errp);
- assert_no_error(errp);
+ (Object **) &s->tx_control_dev, &error_abort);
object_initialize(&s->rx_data_dev, sizeof(s->rx_data_dev),
TYPE_XILINX_AXI_ENET_DATA_STREAM);
object_initialize(&s->rx_control_dev, sizeof(s->rx_control_dev),
TYPE_XILINX_AXI_ENET_CONTROL_STREAM);
object_property_add_child(OBJECT(s), "axistream-connected-target",
- (Object *)&s->rx_data_dev, &errp);
- assert_no_error(errp);
+ (Object *)&s->rx_data_dev, &error_abort);
object_property_add_child(OBJECT(s), "axistream-control-connected-target",
- (Object *)&s->rx_control_dev, &errp);
- assert_no_error(errp);
+ (Object *)&s->rx_control_dev, &error_abort);
sysbus_init_irq(sbd, &s->irq);
diff --git a/include/hw/xilinx.h b/include/hw/xilinx.h
index 0c0251a..9d6debe 100644
--- a/include/hw/xilinx.h
+++ b/include/hw/xilinx.h
@@ -59,16 +59,13 @@ xilinx_axiethernet_init(DeviceState *dev, NICInfo *nd, StreamSlave *ds,
StreamSlave *cs, hwaddr base, qemu_irq irq, int txmem,
int rxmem)
{
- Error *errp = NULL;
-
qdev_set_nic_properties(dev, nd);
qdev_prop_set_uint32(dev, "rxmem", rxmem);
qdev_prop_set_uint32(dev, "txmem", txmem);
object_property_set_link(OBJECT(dev), OBJECT(ds),
- "axistream-connected", &errp);
+ "axistream-connected", &error_abort);
object_property_set_link(OBJECT(dev), OBJECT(cs),
- "axistream-control-connected", &errp);
- assert_no_error(errp);
+ "axistream-control-connected", &error_abort);
qdev_init_nofail(dev);
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq);
@@ -78,14 +75,11 @@ static inline void
xilinx_axidma_init(DeviceState *dev, StreamSlave *ds, StreamSlave *cs,
hwaddr base, qemu_irq irq, qemu_irq irq2, int freqhz)
{
- Error *errp = NULL;
-
qdev_prop_set_uint32(dev, "freqhz", freqhz);
object_property_set_link(OBJECT(dev), OBJECT(ds),
- "axistream-connected", &errp);
+ "axistream-connected", &error_abort);
object_property_set_link(OBJECT(dev), OBJECT(cs),
- "axistream-control-connected", &errp);
- assert_no_error(errp);
+ "axistream-control-connected", &error_abort);
qdev_init_nofail(dev);
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
--
1.8.4.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v2 4/6] target-i386: Remove assert_no_error usage
2013-12-05 0:47 [Qemu-devel] [PATCH v2 0/6] Add error_abort and associated cleanups Peter Crosthwaite
` (2 preceding siblings ...)
2013-12-05 0:49 ` [Qemu-devel] [PATCH v2 3/6] hw: Remove assert_no_error usages Peter Crosthwaite
@ 2013-12-05 0:50 ` Peter Crosthwaite
2013-12-05 0:50 ` [Qemu-devel] [PATCH v2 5/6] qemu-option: Remove qemu_opts_create_nofail Peter Crosthwaite
2013-12-05 0:51 ` [Qemu-devel] [PATCH v2 6/6] qerror: Remove assert_no_error() Peter Crosthwaite
5 siblings, 0 replies; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-05 0:50 UTC (permalink / raw)
To: qemu-devel; +Cc: imammedo, afaerber, armbru, pbonzini
Replace an assert_no_error() usage with the error_abort system.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
target-i386/cpu.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 47af9a8..b930ca5 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1600,7 +1600,6 @@ static int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def,
const char *name)
{
x86_def_t *def;
- Error *err = NULL;
int i;
if (name == NULL) {
@@ -1608,8 +1607,7 @@ static int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def,
}
if (kvm_enabled() && strcmp(name, "host") == 0) {
kvm_cpu_fill_host(x86_cpu_def);
- object_property_set_bool(OBJECT(cpu), true, "pmu", &err);
- assert_no_error(err);
+ object_property_set_bool(OBJECT(cpu), true, "pmu", &error_abort);
return 0;
}
--
1.8.4.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v2 5/6] qemu-option: Remove qemu_opts_create_nofail
2013-12-05 0:47 [Qemu-devel] [PATCH v2 0/6] Add error_abort and associated cleanups Peter Crosthwaite
` (3 preceding siblings ...)
2013-12-05 0:50 ` [Qemu-devel] [PATCH v2 4/6] target-i386: Remove assert_no_error usage Peter Crosthwaite
@ 2013-12-05 0:50 ` Peter Crosthwaite
2013-12-05 10:11 ` Markus Armbruster
2013-12-05 0:51 ` [Qemu-devel] [PATCH v2 6/6] qerror: Remove assert_no_error() Peter Crosthwaite
5 siblings, 1 reply; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-05 0:50 UTC (permalink / raw)
To: qemu-devel; +Cc: imammedo, afaerber, armbru, pbonzini
This is a boiler-plate _nofail variant of qemu_opts_create. Remove and
use error_abort in call sites.
null/0 arguments needs to be added for the id and fail_if_exists fields
in affected callsites due to argument inconsistency between the normal and
no_fail variants.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
changed since v1:
Wrap some long lines (Markus review)
Flip fail_if_exists to 0 in call sites (Markus review)
Remove spurious whitespace fix (Markus review)
Mention fail_if_exists in commit msg (Markus review)
block/blkdebug.c | 2 +-
block/blkverify.c | 2 +-
block/curl.c | 2 +-
block/gluster.c | 2 +-
block/iscsi.c | 2 +-
block/nbd.c | 3 ++-
block/qcow2.c | 2 +-
block/raw-posix.c | 2 +-
block/raw-win32.c | 5 +++--
block/rbd.c | 2 +-
block/sheepdog.c | 2 +-
block/vvfat.c | 2 +-
blockdev.c | 6 ++++--
hw/watchdog/watchdog.c | 3 ++-
include/qemu/option.h | 1 -
qdev-monitor.c | 2 +-
qemu-img.c | 2 +-
util/qemu-config.c | 2 +-
util/qemu-option.c | 9 ---------
util/qemu-sockets.c | 18 +++++++++---------
vl.c | 15 +++++++++------
21 files changed, 42 insertions(+), 44 deletions(-)
diff --git a/block/blkdebug.c b/block/blkdebug.c
index 16d2b91..7f915ea 100644
--- a/block/blkdebug.c
+++ b/block/blkdebug.c
@@ -359,7 +359,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
const char *filename, *config;
int ret;
- opts = qemu_opts_create_nofail(&runtime_opts);
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
error_propagate(errp, local_err);
diff --git a/block/blkverify.c b/block/blkverify.c
index 3c63528..1c1637f 100644
--- a/block/blkverify.c
+++ b/block/blkverify.c
@@ -125,7 +125,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags,
const char *filename, *raw;
int ret;
- opts = qemu_opts_create_nofail(&runtime_opts);
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
error_propagate(errp, local_err);
diff --git a/block/curl.c b/block/curl.c
index 5a46f97..a603936 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -413,7 +413,7 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
return -EROFS;
}
- opts = qemu_opts_create_nofail(&runtime_opts);
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
qerror_report_err(local_err);
diff --git a/block/gluster.c b/block/gluster.c
index 877686a..563d497 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -298,7 +298,7 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
Error *local_err = NULL;
const char *filename;
- opts = qemu_opts_create_nofail(&runtime_opts);
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
qerror_report_err(local_err);
diff --git a/block/iscsi.c b/block/iscsi.c
index a2d578c..2cec43a 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1241,7 +1241,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
return -EINVAL;
}
- opts = qemu_opts_create_nofail(&runtime_opts);
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
qerror_report_err(local_err);
diff --git a/block/nbd.c b/block/nbd.c
index c8deeee..5bd9359 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -234,7 +234,8 @@ static int nbd_config(BDRVNBDState *s, QDict *options)
return -EINVAL;
}
- s->socket_opts = qemu_opts_create_nofail(&socket_optslist);
+ s->socket_opts = qemu_opts_create(&socket_optslist, NULL, 0,
+ &error_abort);
qemu_opts_absorb_qdict(s->socket_opts, options, &local_err);
if (error_is_set(&local_err)) {
diff --git a/block/qcow2.c b/block/qcow2.c
index 6e5d98d..cf28377 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -669,7 +669,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags,
}
/* Enable lazy_refcounts according to image and command line options */
- opts = qemu_opts_create_nofail(&qcow2_runtime_opts);
+ opts = qemu_opts_create(&qcow2_runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
error_propagate(errp, local_err);
diff --git a/block/raw-posix.c b/block/raw-posix.c
index f836c8e..dce7c27 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -284,7 +284,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
const char *filename;
int fd, ret;
- opts = qemu_opts_create_nofail(&raw_runtime_opts);
+ opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
error_propagate(errp, local_err);
diff --git a/block/raw-win32.c b/block/raw-win32.c
index 2bad5a3..ce314fd 100644
--- a/block/raw-win32.c
+++ b/block/raw-win32.c
@@ -248,7 +248,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
s->type = FTYPE_FILE;
- opts = qemu_opts_create_nofail(&raw_runtime_opts);
+ opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
error_propagate(errp, local_err);
@@ -550,7 +550,8 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags,
Error *local_err = NULL;
const char *filename;
- QemuOpts *opts = qemu_opts_create_nofail(&raw_runtime_opts);
+ QemuOpts *opts = qemu_opts_create(&raw_runtime_opts, NULL, 0,
+ &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
error_propagate(errp, local_err);
diff --git a/block/rbd.c b/block/rbd.c
index 4a1ea5b..f453f04 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -461,7 +461,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
const char *filename;
int r;
- opts = qemu_opts_create_nofail(&runtime_opts);
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
qerror_report_err(local_err);
diff --git a/block/sheepdog.c b/block/sheepdog.c
index ef387de..59d92a9 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -1375,7 +1375,7 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
s->bs = bs;
- opts = qemu_opts_create_nofail(&runtime_opts);
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
qerror_report_err(local_err);
diff --git a/block/vvfat.c b/block/vvfat.c
index 3ddaa0b..f67d8ae 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -1085,7 +1085,7 @@ DLOG(if (stderr == NULL) {
setbuf(stderr, NULL);
})
- opts = qemu_opts_create_nofail(&runtime_opts);
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (error_is_set(&local_err)) {
qerror_report_err(local_err);
diff --git a/blockdev.c b/blockdev.c
index 330aa4a..78e8455 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -682,7 +682,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
bs_opts = qdict_new();
qemu_opts_to_qdict(all_opts, bs_opts);
- legacy_opts = qemu_opts_create_nofail(&qemu_legacy_drive_opts);
+ legacy_opts = qemu_opts_create(&qemu_legacy_drive_opts, NULL, 1,
+ &error_abort);
qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
if (error_is_set(&local_err)) {
qerror_report_err(local_err);
@@ -853,7 +854,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
if (type == IF_VIRTIO) {
QemuOpts *devopts;
- devopts = qemu_opts_create_nofail(qemu_find_opts("device"));
+ devopts = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
+ &error_abort);
if (arch_type == QEMU_ARCH_S390X) {
qemu_opt_set(devopts, "driver", "virtio-blk-s390");
} else {
diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c
index 387962e..0ab2a0e 100644
--- a/hw/watchdog/watchdog.c
+++ b/hw/watchdog/watchdog.c
@@ -66,7 +66,8 @@ int select_watchdog(const char *p)
QLIST_FOREACH(model, &watchdog_list, entry) {
if (strcasecmp(model->wdt_name, p) == 0) {
/* add the device */
- opts = qemu_opts_create_nofail(qemu_find_opts("device"));
+ opts = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
+ &error_abort);
qemu_opt_set(opts, "driver", p);
return 0;
}
diff --git a/include/qemu/option.h b/include/qemu/option.h
index 5c0c6dd..3ea871a 100644
--- a/include/qemu/option.h
+++ b/include/qemu/option.h
@@ -136,7 +136,6 @@ int qemu_opt_foreach(QemuOpts *opts, qemu_opt_loopfunc func, void *opaque,
QemuOpts *qemu_opts_find(QemuOptsList *list, const char *id);
QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
int fail_if_exists, Error **errp);
-QemuOpts *qemu_opts_create_nofail(QemuOptsList *list);
void qemu_opts_reset(QemuOptsList *list);
void qemu_opts_loc_restore(QemuOpts *opts);
int qemu_opts_set(QemuOptsList *list, const char *id,
diff --git a/qdev-monitor.c b/qdev-monitor.c
index dc37a43..6280771 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -730,7 +730,7 @@ int qemu_global_option(const char *str)
return -1;
}
- opts = qemu_opts_create_nofail(&qemu_global_opts);
+ opts = qemu_opts_create(&qemu_global_opts, NULL, 0, &error_abort);
qemu_opt_set(opts, "driver", driver);
qemu_opt_set(opts, "property", property);
qemu_opt_set(opts, "value", str+offset+1);
diff --git a/qemu-img.c b/qemu-img.c
index b6b5644..f414164 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -2477,7 +2477,7 @@ static int img_resize(int argc, char **argv)
}
/* Parse size */
- param = qemu_opts_create_nofail(&resize_options);
+ param = qemu_opts_create(&resize_options, NULL, 0, &error_abort);
if (qemu_opt_set(param, BLOCK_OPT_SIZE, size)) {
/* Error message already printed when size parsing fails */
ret = -1;
diff --git a/util/qemu-config.c b/util/qemu-config.c
index 04da942..7973659 100644
--- a/util/qemu-config.c
+++ b/util/qemu-config.c
@@ -311,7 +311,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
error_free(local_err);
goto out;
}
- opts = qemu_opts_create_nofail(list);
+ opts = qemu_opts_create(list, NULL, 0, &error_abort);
continue;
}
if (sscanf(line, " %63s = \"%1023[^\"]\"", arg, value) == 2) {
diff --git a/util/qemu-option.c b/util/qemu-option.c
index efcb5dc..668e5d9 100644
--- a/util/qemu-option.c
+++ b/util/qemu-option.c
@@ -791,15 +791,6 @@ QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
return opts;
}
-QemuOpts *qemu_opts_create_nofail(QemuOptsList *list)
-{
- QemuOpts *opts;
- Error *errp = NULL;
- opts = qemu_opts_create(list, NULL, 0, &errp);
- assert_no_error(errp);
- return opts;
-}
-
void qemu_opts_reset(QemuOptsList *list)
{
QemuOpts *opts, *next_opts;
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 6b97dc1..8818d7c 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -578,7 +578,7 @@ int inet_listen(const char *str, char *ostr, int olen,
addr = inet_parse(str, errp);
if (addr != NULL) {
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
inet_addr_to_opts(opts, addr);
qapi_free_InetSocketAddress(addr);
sock = inet_listen_opts(opts, port_offset, errp);
@@ -617,7 +617,7 @@ int inet_connect(const char *str, Error **errp)
addr = inet_parse(str, errp);
if (addr != NULL) {
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
inet_addr_to_opts(opts, addr);
qapi_free_InetSocketAddress(addr);
sock = inet_connect_opts(opts, errp, NULL, NULL);
@@ -651,7 +651,7 @@ int inet_nonblocking_connect(const char *str,
addr = inet_parse(str, errp);
if (addr != NULL) {
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
inet_addr_to_opts(opts, addr);
qapi_free_InetSocketAddress(addr);
sock = inet_connect_opts(opts, errp, callback, opaque);
@@ -794,7 +794,7 @@ int unix_listen(const char *str, char *ostr, int olen, Error **errp)
char *path, *optstr;
int sock, len;
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
optstr = strchr(str, ',');
if (optstr) {
@@ -822,7 +822,7 @@ int unix_connect(const char *path, Error **errp)
QemuOpts *opts;
int sock;
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
qemu_opt_set(opts, "path", path);
sock = unix_connect_opts(opts, errp, NULL, NULL);
qemu_opts_del(opts);
@@ -839,7 +839,7 @@ int unix_nonblocking_connect(const char *path,
g_assert(callback != NULL);
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
qemu_opt_set(opts, "path", path);
sock = unix_connect_opts(opts, errp, callback, opaque);
qemu_opts_del(opts);
@@ -889,7 +889,7 @@ int socket_connect(SocketAddress *addr, Error **errp,
QemuOpts *opts;
int fd;
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
switch (addr->kind) {
case SOCKET_ADDRESS_KIND_INET:
inet_addr_to_opts(opts, addr->inet);
@@ -921,7 +921,7 @@ int socket_listen(SocketAddress *addr, Error **errp)
QemuOpts *opts;
int fd;
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
switch (addr->kind) {
case SOCKET_ADDRESS_KIND_INET:
inet_addr_to_opts(opts, addr->inet);
@@ -949,7 +949,7 @@ int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp)
QemuOpts *opts;
int fd;
- opts = qemu_opts_create_nofail(&socket_optslist);
+ opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
switch (remote->kind) {
case SOCKET_ADDRESS_KIND_INET:
qemu_opt_set(opts, "host", remote->inet->host);
diff --git a/vl.c b/vl.c
index 8d5d874..a5ee155 100644
--- a/vl.c
+++ b/vl.c
@@ -543,7 +543,7 @@ QemuOpts *qemu_get_machine_opts(void)
assert(list);
opts = qemu_opts_find(list, NULL);
if (!opts) {
- opts = qemu_opts_create_nofail(list);
+ opts = qemu_opts_create(list, NULL, 0, &error_abort);
}
return opts;
}
@@ -2252,7 +2252,8 @@ static int balloon_parse(const char *arg)
return -1;
} else {
/* create empty opts */
- opts = qemu_opts_create_nofail(qemu_find_opts("device"));
+ opts = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
+ &error_abort);
}
qemu_opt_set(opts, "driver", "virtio-balloon");
return 0;
@@ -2512,14 +2513,14 @@ static int virtcon_parse(const char *devname)
exit(1);
}
- bus_opts = qemu_opts_create_nofail(device);
+ bus_opts = qemu_opts_create(device, NULL, 0, &error_abort);
if (arch_type == QEMU_ARCH_S390X) {
qemu_opt_set(bus_opts, "driver", "virtio-serial-s390");
} else {
qemu_opt_set(bus_opts, "driver", "virtio-serial-pci");
}
- dev_opts = qemu_opts_create_nofail(device);
+ dev_opts = qemu_opts_create(device, NULL, 0, &error_abort);
qemu_opt_set(dev_opts, "driver", "virtconsole");
snprintf(label, sizeof(label), "virtcon%d", index);
@@ -3377,7 +3378,8 @@ int main(int argc, char **argv, char **envp)
qemu_opt_set_bool(fsdev, "readonly",
qemu_opt_get_bool(opts, "readonly", 0));
- device = qemu_opts_create_nofail(qemu_find_opts("device"));
+ device = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
+ &error_abort);
qemu_opt_set(device, "driver", "virtio-9p-pci");
qemu_opt_set(device, "fsdev",
qemu_opt_get(opts, "mount_tag"));
@@ -3397,7 +3399,8 @@ int main(int argc, char **argv, char **envp)
}
qemu_opt_set(fsdev, "fsdriver", "synth");
- device = qemu_opts_create_nofail(qemu_find_opts("device"));
+ device = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
+ &error_abort);
qemu_opt_set(device, "driver", "virtio-9p-pci");
qemu_opt_set(device, "fsdev", "v_synth");
qemu_opt_set(device, "mount_tag", "v_synth");
--
1.8.4.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v2 6/6] qerror: Remove assert_no_error()
2013-12-05 0:47 [Qemu-devel] [PATCH v2 0/6] Add error_abort and associated cleanups Peter Crosthwaite
` (4 preceding siblings ...)
2013-12-05 0:50 ` [Qemu-devel] [PATCH v2 5/6] qemu-option: Remove qemu_opts_create_nofail Peter Crosthwaite
@ 2013-12-05 0:51 ` Peter Crosthwaite
5 siblings, 0 replies; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-05 0:51 UTC (permalink / raw)
To: qemu-devel; +Cc: imammedo, afaerber, armbru, pbonzini
This is no longer needed, and is obsoleted by error_abort. Remove.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
include/qapi/qmp/qerror.h | 1 -
qobject/qerror.c | 8 --------
2 files changed, 9 deletions(-)
diff --git a/include/qapi/qmp/qerror.h b/include/qapi/qmp/qerror.h
index c30c2f6..73c67b7 100644
--- a/include/qapi/qmp/qerror.h
+++ b/include/qapi/qmp/qerror.h
@@ -29,7 +29,6 @@ typedef struct QError {
QString *qerror_human(const QError *qerror);
void qerror_report(ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
void qerror_report_err(Error *err);
-void assert_no_error(Error *err);
/*
* QError class list
diff --git a/qobject/qerror.c b/qobject/qerror.c
index 3aee1cf..1b56858 100644
--- a/qobject/qerror.c
+++ b/qobject/qerror.c
@@ -121,14 +121,6 @@ void qerror_report_err(Error *err)
}
}
-void assert_no_error(Error *err)
-{
- if (err) {
- qerror_report_err(err);
- abort();
- }
-}
-
/**
* qobject_to_qerror(): Convert a QObject into a QError
*/
--
1.8.4.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v2 5/6] qemu-option: Remove qemu_opts_create_nofail
2013-12-05 0:50 ` [Qemu-devel] [PATCH v2 5/6] qemu-option: Remove qemu_opts_create_nofail Peter Crosthwaite
@ 2013-12-05 10:11 ` Markus Armbruster
2013-12-11 3:34 ` Peter Crosthwaite
0 siblings, 1 reply; 14+ messages in thread
From: Markus Armbruster @ 2013-12-05 10:11 UTC (permalink / raw)
To: Peter Crosthwaite; +Cc: imammedo, pbonzini, qemu-devel, afaerber
Peter Crosthwaite <peter.crosthwaite@xilinx.com> writes:
> This is a boiler-plate _nofail variant of qemu_opts_create. Remove and
> use error_abort in call sites.
>
> null/0 arguments needs to be added for the id and fail_if_exists fields
> in affected callsites due to argument inconsistency between the normal and
> no_fail variants.
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
> changed since v1:
> Wrap some long lines (Markus review)
> Flip fail_if_exists to 0 in call sites (Markus review)
> Remove spurious whitespace fix (Markus review)
> Mention fail_if_exists in commit msg (Markus review)
>
> block/blkdebug.c | 2 +-
> block/blkverify.c | 2 +-
> block/curl.c | 2 +-
> block/gluster.c | 2 +-
> block/iscsi.c | 2 +-
> block/nbd.c | 3 ++-
> block/qcow2.c | 2 +-
> block/raw-posix.c | 2 +-
> block/raw-win32.c | 5 +++--
> block/rbd.c | 2 +-
> block/sheepdog.c | 2 +-
> block/vvfat.c | 2 +-
> blockdev.c | 6 ++++--
> hw/watchdog/watchdog.c | 3 ++-
> include/qemu/option.h | 1 -
> qdev-monitor.c | 2 +-
> qemu-img.c | 2 +-
> util/qemu-config.c | 2 +-
> util/qemu-option.c | 9 ---------
> util/qemu-sockets.c | 18 +++++++++---------
> vl.c | 15 +++++++++------
> 21 files changed, 42 insertions(+), 44 deletions(-)
>
> diff --git a/block/blkdebug.c b/block/blkdebug.c
> index 16d2b91..7f915ea 100644
> --- a/block/blkdebug.c
> +++ b/block/blkdebug.c
> @@ -359,7 +359,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
> const char *filename, *config;
> int ret;
>
> - opts = qemu_opts_create_nofail(&runtime_opts);
> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> error_propagate(errp, local_err);
> diff --git a/block/blkverify.c b/block/blkverify.c
> index 3c63528..1c1637f 100644
> --- a/block/blkverify.c
> +++ b/block/blkverify.c
> @@ -125,7 +125,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags,
> const char *filename, *raw;
> int ret;
>
> - opts = qemu_opts_create_nofail(&runtime_opts);
> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> error_propagate(errp, local_err);
> diff --git a/block/curl.c b/block/curl.c
> index 5a46f97..a603936 100644
> --- a/block/curl.c
> +++ b/block/curl.c
> @@ -413,7 +413,7 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
> return -EROFS;
> }
>
> - opts = qemu_opts_create_nofail(&runtime_opts);
> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> qerror_report_err(local_err);
> diff --git a/block/gluster.c b/block/gluster.c
> index 877686a..563d497 100644
> --- a/block/gluster.c
> +++ b/block/gluster.c
> @@ -298,7 +298,7 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
> Error *local_err = NULL;
> const char *filename;
>
> - opts = qemu_opts_create_nofail(&runtime_opts);
> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> qerror_report_err(local_err);
> diff --git a/block/iscsi.c b/block/iscsi.c
> index a2d578c..2cec43a 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -1241,7 +1241,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
> return -EINVAL;
> }
>
> - opts = qemu_opts_create_nofail(&runtime_opts);
> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> qerror_report_err(local_err);
> diff --git a/block/nbd.c b/block/nbd.c
> index c8deeee..5bd9359 100644
> --- a/block/nbd.c
> +++ b/block/nbd.c
> @@ -234,7 +234,8 @@ static int nbd_config(BDRVNBDState *s, QDict *options)
> return -EINVAL;
> }
>
> - s->socket_opts = qemu_opts_create_nofail(&socket_optslist);
> + s->socket_opts = qemu_opts_create(&socket_optslist, NULL, 0,
> + &error_abort);
>
> qemu_opts_absorb_qdict(s->socket_opts, options, &local_err);
> if (error_is_set(&local_err)) {
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 6e5d98d..cf28377 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -669,7 +669,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags,
> }
>
> /* Enable lazy_refcounts according to image and command line options */
> - opts = qemu_opts_create_nofail(&qcow2_runtime_opts);
> + opts = qemu_opts_create(&qcow2_runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> error_propagate(errp, local_err);
> diff --git a/block/raw-posix.c b/block/raw-posix.c
> index f836c8e..dce7c27 100644
> --- a/block/raw-posix.c
> +++ b/block/raw-posix.c
> @@ -284,7 +284,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
> const char *filename;
> int fd, ret;
>
> - opts = qemu_opts_create_nofail(&raw_runtime_opts);
> + opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> error_propagate(errp, local_err);
> diff --git a/block/raw-win32.c b/block/raw-win32.c
> index 2bad5a3..ce314fd 100644
> --- a/block/raw-win32.c
> +++ b/block/raw-win32.c
> @@ -248,7 +248,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
>
> s->type = FTYPE_FILE;
>
> - opts = qemu_opts_create_nofail(&raw_runtime_opts);
> + opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> error_propagate(errp, local_err);
> @@ -550,7 +550,8 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags,
> Error *local_err = NULL;
> const char *filename;
>
> - QemuOpts *opts = qemu_opts_create_nofail(&raw_runtime_opts);
> + QemuOpts *opts = qemu_opts_create(&raw_runtime_opts, NULL, 0,
> + &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> error_propagate(errp, local_err);
> diff --git a/block/rbd.c b/block/rbd.c
> index 4a1ea5b..f453f04 100644
> --- a/block/rbd.c
> +++ b/block/rbd.c
> @@ -461,7 +461,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
> const char *filename;
> int r;
>
> - opts = qemu_opts_create_nofail(&runtime_opts);
> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> qerror_report_err(local_err);
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index ef387de..59d92a9 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -1375,7 +1375,7 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
>
> s->bs = bs;
>
> - opts = qemu_opts_create_nofail(&runtime_opts);
> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> qerror_report_err(local_err);
> diff --git a/block/vvfat.c b/block/vvfat.c
> index 3ddaa0b..f67d8ae 100644
> --- a/block/vvfat.c
> +++ b/block/vvfat.c
> @@ -1085,7 +1085,7 @@ DLOG(if (stderr == NULL) {
> setbuf(stderr, NULL);
> })
>
> - opts = qemu_opts_create_nofail(&runtime_opts);
> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
> qemu_opts_absorb_qdict(opts, options, &local_err);
> if (error_is_set(&local_err)) {
> qerror_report_err(local_err);
> diff --git a/blockdev.c b/blockdev.c
> index 330aa4a..78e8455 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -682,7 +682,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
> bs_opts = qdict_new();
> qemu_opts_to_qdict(all_opts, bs_opts);
>
> - legacy_opts = qemu_opts_create_nofail(&qemu_legacy_drive_opts);
> + legacy_opts = qemu_opts_create(&qemu_legacy_drive_opts, NULL, 1,
> + &error_abort);
> qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
> if (error_is_set(&local_err)) {
> qerror_report_err(local_err);
I'm afraid this one still changed fail_if_exists.
> @@ -853,7 +854,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
>
> if (type == IF_VIRTIO) {
> QemuOpts *devopts;
> - devopts = qemu_opts_create_nofail(qemu_find_opts("device"));
> + devopts = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
> + &error_abort);
> if (arch_type == QEMU_ARCH_S390X) {
> qemu_opt_set(devopts, "driver", "virtio-blk-s390");
> } else {
Again.
> diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c
> index 387962e..0ab2a0e 100644
> --- a/hw/watchdog/watchdog.c
> +++ b/hw/watchdog/watchdog.c
> @@ -66,7 +66,8 @@ int select_watchdog(const char *p)
> QLIST_FOREACH(model, &watchdog_list, entry) {
> if (strcasecmp(model->wdt_name, p) == 0) {
> /* add the device */
> - opts = qemu_opts_create_nofail(qemu_find_opts("device"));
> + opts = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
> + &error_abort);
> qemu_opt_set(opts, "driver", p);
> return 0;
> }
Again.
> diff --git a/include/qemu/option.h b/include/qemu/option.h
> index 5c0c6dd..3ea871a 100644
> --- a/include/qemu/option.h
> +++ b/include/qemu/option.h
> @@ -136,7 +136,6 @@ int qemu_opt_foreach(QemuOpts *opts, qemu_opt_loopfunc func, void *opaque,
> QemuOpts *qemu_opts_find(QemuOptsList *list, const char *id);
> QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
> int fail_if_exists, Error **errp);
> -QemuOpts *qemu_opts_create_nofail(QemuOptsList *list);
> void qemu_opts_reset(QemuOptsList *list);
> void qemu_opts_loc_restore(QemuOpts *opts);
> int qemu_opts_set(QemuOptsList *list, const char *id,
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index dc37a43..6280771 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -730,7 +730,7 @@ int qemu_global_option(const char *str)
> return -1;
> }
>
> - opts = qemu_opts_create_nofail(&qemu_global_opts);
> + opts = qemu_opts_create(&qemu_global_opts, NULL, 0, &error_abort);
> qemu_opt_set(opts, "driver", driver);
> qemu_opt_set(opts, "property", property);
> qemu_opt_set(opts, "value", str+offset+1);
> diff --git a/qemu-img.c b/qemu-img.c
> index b6b5644..f414164 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -2477,7 +2477,7 @@ static int img_resize(int argc, char **argv)
> }
>
> /* Parse size */
> - param = qemu_opts_create_nofail(&resize_options);
> + param = qemu_opts_create(&resize_options, NULL, 0, &error_abort);
> if (qemu_opt_set(param, BLOCK_OPT_SIZE, size)) {
> /* Error message already printed when size parsing fails */
> ret = -1;
> diff --git a/util/qemu-config.c b/util/qemu-config.c
> index 04da942..7973659 100644
> --- a/util/qemu-config.c
> +++ b/util/qemu-config.c
> @@ -311,7 +311,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
> error_free(local_err);
> goto out;
> }
> - opts = qemu_opts_create_nofail(list);
> + opts = qemu_opts_create(list, NULL, 0, &error_abort);
> continue;
> }
> if (sscanf(line, " %63s = \"%1023[^\"]\"", arg, value) == 2) {
> diff --git a/util/qemu-option.c b/util/qemu-option.c
> index efcb5dc..668e5d9 100644
> --- a/util/qemu-option.c
> +++ b/util/qemu-option.c
> @@ -791,15 +791,6 @@ QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
> return opts;
> }
>
> -QemuOpts *qemu_opts_create_nofail(QemuOptsList *list)
> -{
> - QemuOpts *opts;
> - Error *errp = NULL;
> - opts = qemu_opts_create(list, NULL, 0, &errp);
> - assert_no_error(errp);
> - return opts;
> -}
> -
> void qemu_opts_reset(QemuOptsList *list)
> {
> QemuOpts *opts, *next_opts;
> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
> index 6b97dc1..8818d7c 100644
> --- a/util/qemu-sockets.c
> +++ b/util/qemu-sockets.c
> @@ -578,7 +578,7 @@ int inet_listen(const char *str, char *ostr, int olen,
>
> addr = inet_parse(str, errp);
> if (addr != NULL) {
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
> inet_addr_to_opts(opts, addr);
> qapi_free_InetSocketAddress(addr);
> sock = inet_listen_opts(opts, port_offset, errp);
> @@ -617,7 +617,7 @@ int inet_connect(const char *str, Error **errp)
>
> addr = inet_parse(str, errp);
> if (addr != NULL) {
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
> inet_addr_to_opts(opts, addr);
> qapi_free_InetSocketAddress(addr);
> sock = inet_connect_opts(opts, errp, NULL, NULL);
> @@ -651,7 +651,7 @@ int inet_nonblocking_connect(const char *str,
>
> addr = inet_parse(str, errp);
> if (addr != NULL) {
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
> inet_addr_to_opts(opts, addr);
> qapi_free_InetSocketAddress(addr);
> sock = inet_connect_opts(opts, errp, callback, opaque);
> @@ -794,7 +794,7 @@ int unix_listen(const char *str, char *ostr, int olen, Error **errp)
> char *path, *optstr;
> int sock, len;
>
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
>
> optstr = strchr(str, ',');
> if (optstr) {
> @@ -822,7 +822,7 @@ int unix_connect(const char *path, Error **errp)
> QemuOpts *opts;
> int sock;
>
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
> qemu_opt_set(opts, "path", path);
> sock = unix_connect_opts(opts, errp, NULL, NULL);
> qemu_opts_del(opts);
> @@ -839,7 +839,7 @@ int unix_nonblocking_connect(const char *path,
>
> g_assert(callback != NULL);
>
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
> qemu_opt_set(opts, "path", path);
> sock = unix_connect_opts(opts, errp, callback, opaque);
> qemu_opts_del(opts);
> @@ -889,7 +889,7 @@ int socket_connect(SocketAddress *addr, Error **errp,
> QemuOpts *opts;
> int fd;
>
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
> switch (addr->kind) {
> case SOCKET_ADDRESS_KIND_INET:
> inet_addr_to_opts(opts, addr->inet);
> @@ -921,7 +921,7 @@ int socket_listen(SocketAddress *addr, Error **errp)
> QemuOpts *opts;
> int fd;
>
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
> switch (addr->kind) {
> case SOCKET_ADDRESS_KIND_INET:
> inet_addr_to_opts(opts, addr->inet);
> @@ -949,7 +949,7 @@ int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp)
> QemuOpts *opts;
> int fd;
>
> - opts = qemu_opts_create_nofail(&socket_optslist);
> + opts = qemu_opts_create(&socket_optslist, NULL, 0, &error_abort);
> switch (remote->kind) {
> case SOCKET_ADDRESS_KIND_INET:
> qemu_opt_set(opts, "host", remote->inet->host);
> diff --git a/vl.c b/vl.c
> index 8d5d874..a5ee155 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -543,7 +543,7 @@ QemuOpts *qemu_get_machine_opts(void)
> assert(list);
> opts = qemu_opts_find(list, NULL);
> if (!opts) {
> - opts = qemu_opts_create_nofail(list);
> + opts = qemu_opts_create(list, NULL, 0, &error_abort);
> }
> return opts;
> }
> @@ -2252,7 +2252,8 @@ static int balloon_parse(const char *arg)
> return -1;
> } else {
> /* create empty opts */
> - opts = qemu_opts_create_nofail(qemu_find_opts("device"));
> + opts = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
> + &error_abort);
> }
> qemu_opt_set(opts, "driver", "virtio-balloon");
> return 0;
Again.
> @@ -2512,14 +2513,14 @@ static int virtcon_parse(const char *devname)
> exit(1);
> }
>
> - bus_opts = qemu_opts_create_nofail(device);
> + bus_opts = qemu_opts_create(device, NULL, 0, &error_abort);
> if (arch_type == QEMU_ARCH_S390X) {
> qemu_opt_set(bus_opts, "driver", "virtio-serial-s390");
> } else {
> qemu_opt_set(bus_opts, "driver", "virtio-serial-pci");
> }
>
> - dev_opts = qemu_opts_create_nofail(device);
> + dev_opts = qemu_opts_create(device, NULL, 0, &error_abort);
> qemu_opt_set(dev_opts, "driver", "virtconsole");
>
> snprintf(label, sizeof(label), "virtcon%d", index);
> @@ -3377,7 +3378,8 @@ int main(int argc, char **argv, char **envp)
>
> qemu_opt_set_bool(fsdev, "readonly",
> qemu_opt_get_bool(opts, "readonly", 0));
> - device = qemu_opts_create_nofail(qemu_find_opts("device"));
> + device = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
> + &error_abort);
> qemu_opt_set(device, "driver", "virtio-9p-pci");
> qemu_opt_set(device, "fsdev",
> qemu_opt_get(opts, "mount_tag"));
Again.
> @@ -3397,7 +3399,8 @@ int main(int argc, char **argv, char **envp)
> }
> qemu_opt_set(fsdev, "fsdriver", "synth");
>
> - device = qemu_opts_create_nofail(qemu_find_opts("device"));
> + device = qemu_opts_create(qemu_find_opts("device"), NULL, 1,
> + &error_abort);
> qemu_opt_set(device, "driver", "virtio-9p-pci");
> qemu_opt_set(device, "fsdev", "v_synth");
> qemu_opt_set(device, "mount_tag", "v_synth");
Again.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/6] error: Add error_abort
2013-12-05 0:48 ` [Qemu-devel] [PATCH v2 1/6] error: Add error_abort Peter Crosthwaite
@ 2013-12-05 10:13 ` Markus Armbruster
2013-12-05 13:21 ` Eric Blake
0 siblings, 1 reply; 14+ messages in thread
From: Markus Armbruster @ 2013-12-05 10:13 UTC (permalink / raw)
To: Peter Crosthwaite; +Cc: imammedo, pbonzini, qemu-devel, afaerber
Peter Crosthwaite <peter.crosthwaite@xilinx.com> writes:
> Add a special Error * that can be passed to error handling APIs to
> signal that any errors are fatal and should abort QEMU. There are two
> advantages to this:
>
> - allows for brevity when wishing to assert success of Error **
> accepting APIs. No need for this pattern:
> Error * local_err = NULL;
> api_call(foo, bar, &local_err);
> assert_no_error(local_err);
> This also removes the need for _nofail variants of APIs with
> asserting call sites now reduced to 1LOC.
> - SIGABRT happens from within the offending API. When a fatal error
> occurs in an API call (when the caller is asserting sucess) failure
> often means the API itself is broken. With the abort happening in the
> API call now, the stack frames into the call are available at debug
> time. In the assert_no_error scheme the abort happens after the fact.
>
> The exact semantic is that when an error is raised, if the argument
> Error ** matches &error_abort, then the abort occurs immediately. The
> error messaged is reported.
>
> For error_propagate, if the destination error is &error_abort, then
> the abort happens at propagation time.
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
> changed since v1:
> Delayed assertions that *errp == NULL.
Care to explain why you want to delay these assertions? I'm not sure I
get it...
[...]
> @@ -31,7 +33,6 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
> if (errp == NULL) {
> return;
> }
> - assert(*errp == NULL);
>
> err = g_malloc0(sizeof(*err));
>
> @@ -40,6 +41,12 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
> va_end(ap);
> err->err_class = err_class;
>
> + if (errp == &error_abort) {
> + error_report("%s", error_get_pretty(err));
> + abort();
> + }
> +
> + assert(*errp == NULL);
> *errp = err;
> }
>
[...]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/6] error: Add error_abort
2013-12-05 10:13 ` Markus Armbruster
@ 2013-12-05 13:21 ` Eric Blake
2013-12-06 11:59 ` Markus Armbruster
0 siblings, 1 reply; 14+ messages in thread
From: Eric Blake @ 2013-12-05 13:21 UTC (permalink / raw)
To: Markus Armbruster, Peter Crosthwaite
Cc: imammedo, qemu-devel, afaerber, pbonzini
[-- Attachment #1: Type: text/plain, Size: 1296 bytes --]
On 12/05/2013 03:13 AM, Markus Armbruster wrote:
>>
>> For error_propagate, if the destination error is &error_abort, then
>> the abort happens at propagation time.
>>
>> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>> ---
>> changed since v1:
>> Delayed assertions that *errp == NULL.
>
> Care to explain why you want to delay these assertions? I'm not sure I
> get it...
error_abort as a global variable is always NULL.
>
> [...]
>> @@ -31,7 +33,6 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
>> if (errp == NULL) {
>> return;
>> }
>> - assert(*errp == NULL);
So *&error_abort is null and this assertion would fire, unless we delay
the check for NULL...
>>
>> err = g_malloc0(sizeof(*err));
>>
>> @@ -40,6 +41,12 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
>> va_end(ap);
>> err->err_class = err_class;
>>
>> + if (errp == &error_abort) {
>> + error_report("%s", error_get_pretty(err));
>> + abort();
>> + }
>> +
>> + assert(*errp == NULL);
...until after the check for &error_abort.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 621 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/6] error: Add error_abort
2013-12-05 13:21 ` Eric Blake
@ 2013-12-06 11:59 ` Markus Armbruster
2013-12-06 12:43 ` Peter Crosthwaite
0 siblings, 1 reply; 14+ messages in thread
From: Markus Armbruster @ 2013-12-06 11:59 UTC (permalink / raw)
To: Eric Blake; +Cc: imammedo, Peter Crosthwaite, pbonzini, qemu-devel, afaerber
Eric Blake <eblake@redhat.com> writes:
> On 12/05/2013 03:13 AM, Markus Armbruster wrote:
>
>>>
>>> For error_propagate, if the destination error is &error_abort, then
>>> the abort happens at propagation time.
>>>
>>> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>>> ---
>>> changed since v1:
>>> Delayed assertions that *errp == NULL.
>>
>> Care to explain why you want to delay these assertions? I'm not sure I
>> get it...
>
> error_abort as a global variable is always NULL.
>
>>
>> [...]
>>> @@ -31,7 +33,6 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
>>> if (errp == NULL) {
>>> return;
>>> }
>>> - assert(*errp == NULL);
>
> So *&error_abort is null and this assertion would fire, unless we delay
> the check for NULL...
Err, one of us is confused :)
When errp == &error_abort, then *errp should be null. If it isn't, then
something got stored in error_abort, which is quite wrong. Leaving the
assertion where it is catches that.
>>>
>>> err = g_malloc0(sizeof(*err));
>>>
>>> @@ -40,6 +41,12 @@ void error_set(Error **errp, ErrorClass
>>> err_class, const char *fmt, ...)
>>> va_end(ap);
>>> err->err_class = err_class;
>>>
>>> + if (errp == &error_abort) {
>>> + error_report("%s", error_get_pretty(err));
>>> + abort();
>>> + }
>>> +
>>> + assert(*errp == NULL);
>
> ...until after the check for &error_abort.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/6] error: Add error_abort
2013-12-06 11:59 ` Markus Armbruster
@ 2013-12-06 12:43 ` Peter Crosthwaite
2013-12-06 13:16 ` Markus Armbruster
0 siblings, 1 reply; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-06 12:43 UTC (permalink / raw)
To: Markus Armbruster
Cc: Igor Mammedov, qemu-devel@nongnu.org Developers,
Andreas Färber, Paolo Bonzini
On Fri, Dec 6, 2013 at 9:59 PM, Markus Armbruster <armbru@redhat.com> wrote:
> Eric Blake <eblake@redhat.com> writes:
>
>> On 12/05/2013 03:13 AM, Markus Armbruster wrote:
>>
>>>>
>>>> For error_propagate, if the destination error is &error_abort, then
>>>> the abort happens at propagation time.
>>>>
>>>> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>>>> ---
>>>> changed since v1:
>>>> Delayed assertions that *errp == NULL.
>>>
>>> Care to explain why you want to delay these assertions? I'm not sure I
>>> get it...
>>
>> error_abort as a global variable is always NULL.
>>
>>>
>>> [...]
>>>> @@ -31,7 +33,6 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
>>>> if (errp == NULL) {
>>>> return;
>>>> }
>>>> - assert(*errp == NULL);
>>
>> So *&error_abort is null and this assertion would fire, unless we delay
>> the check for NULL...
The assertion evaluates to true so there is no issue leaving it where
it is. I am perhaps being overly defensive ...
>
> Err, one of us is confused :)
>
> When errp == &error_abort, then *errp should be null. If it isn't, then
> something got stored in error_abort, which is quite wrong. Leaving the
> assertion where it is catches that.
>
In a rather obscure way. Following on from the "what happens if
someone overwrites error_abort" discussion, I was going for the "limp
on" approach when someone stores to error abort. My thinking is that
error abort is potentially corruptable, given it's whole reason to be
is to trap fatally broken code. Hardening it against a bad pointer
deref leading up to the fatal error it actually traps may make sense.
Although I'm probably chasing ghosts there. Happy to revert however
depending on consensus. Both v1 and v2 are of equivalent functionality
in the 99.99% case and I have no strong opinion one way or the other.
Votes welcome :)
Regards,
Peter
>>>>
>>>> err = g_malloc0(sizeof(*err));
>>>>
>>>> @@ -40,6 +41,12 @@ void error_set(Error **errp, ErrorClass
>>>> err_class, const char *fmt, ...)
>>>> va_end(ap);
>>>> err->err_class = err_class;
>>>>
>>>> + if (errp == &error_abort) {
>>>> + error_report("%s", error_get_pretty(err));
>>>> + abort();
>>>> + }
>>>> +
>>>> + assert(*errp == NULL);
>>
>> ...until after the check for &error_abort.
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/6] error: Add error_abort
2013-12-06 12:43 ` Peter Crosthwaite
@ 2013-12-06 13:16 ` Markus Armbruster
0 siblings, 0 replies; 14+ messages in thread
From: Markus Armbruster @ 2013-12-06 13:16 UTC (permalink / raw)
To: Peter Crosthwaite
Cc: Igor Mammedov, Paolo Bonzini, qemu-devel@nongnu.org Developers,
Andreas Färber
Peter Crosthwaite <peter.crosthwaite@xilinx.com> writes:
> On Fri, Dec 6, 2013 at 9:59 PM, Markus Armbruster <armbru@redhat.com> wrote:
>> Eric Blake <eblake@redhat.com> writes:
>>
>>> On 12/05/2013 03:13 AM, Markus Armbruster wrote:
>>>
>>>>>
>>>>> For error_propagate, if the destination error is &error_abort, then
>>>>> the abort happens at propagation time.
>>>>>
>>>>> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>>>>> ---
>>>>> changed since v1:
>>>>> Delayed assertions that *errp == NULL.
>>>>
>>>> Care to explain why you want to delay these assertions? I'm not sure I
>>>> get it...
>>>
>>> error_abort as a global variable is always NULL.
>>>
>>>>
>>>> [...]
>>>>> @@ -31,7 +33,6 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
>>>>> if (errp == NULL) {
>>>>> return;
>>>>> }
>>>>> - assert(*errp == NULL);
>>>
>>> So *&error_abort is null and this assertion would fire, unless we delay
>>> the check for NULL...
>
> The assertion evaluates to true so there is no issue leaving it where
> it is. I am perhaps being overly defensive ...
>
>>
>> Err, one of us is confused :)
>>
>> When errp == &error_abort, then *errp should be null. If it isn't, then
>> something got stored in error_abort, which is quite wrong. Leaving the
>> assertion where it is catches that.
>>
>
> In a rather obscure way. Following on from the "what happens if
> someone overwrites error_abort" discussion, I was going for the "limp
> on" approach when someone stores to error abort. My thinking is that
> error abort is potentially corruptable, given it's whole reason to be
> is to trap fatally broken code. Hardening it against a bad pointer
> deref leading up to the fatal error it actually traps may make sense.
> Although I'm probably chasing ghosts there. Happy to revert however
> depending on consensus. Both v1 and v2 are of equivalent functionality
> in the 99.99% case and I have no strong opinion one way or the other.
>
> Votes welcome :)
I'd leave the assertion where it is now.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v2 5/6] qemu-option: Remove qemu_opts_create_nofail
2013-12-05 10:11 ` Markus Armbruster
@ 2013-12-11 3:34 ` Peter Crosthwaite
0 siblings, 0 replies; 14+ messages in thread
From: Peter Crosthwaite @ 2013-12-11 3:34 UTC (permalink / raw)
To: Markus Armbruster
Cc: Igor Mammedov, qemu-devel@nongnu.org Developers,
Andreas Färber, Paolo Bonzini
On Thu, Dec 5, 2013 at 8:11 PM, Markus Armbruster <armbru@redhat.com> wrote:
> Peter Crosthwaite <peter.crosthwaite@xilinx.com> writes:
>
>> This is a boiler-plate _nofail variant of qemu_opts_create. Remove and
>> use error_abort in call sites.
>>
>> null/0 arguments needs to be added for the id and fail_if_exists fields
>> in affected callsites due to argument inconsistency between the normal and
>> no_fail variants.
>>
>> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>> ---
>> changed since v1:
>> Wrap some long lines (Markus review)
>> Flip fail_if_exists to 0 in call sites (Markus review)
>> Remove spurious whitespace fix (Markus review)
>> Mention fail_if_exists in commit msg (Markus review)
>>
>> block/blkdebug.c | 2 +-
>> block/blkverify.c | 2 +-
>> block/curl.c | 2 +-
>> block/gluster.c | 2 +-
>> block/iscsi.c | 2 +-
>> block/nbd.c | 3 ++-
>> block/qcow2.c | 2 +-
>> block/raw-posix.c | 2 +-
>> block/raw-win32.c | 5 +++--
>> block/rbd.c | 2 +-
>> block/sheepdog.c | 2 +-
>> block/vvfat.c | 2 +-
>> blockdev.c | 6 ++++--
>> hw/watchdog/watchdog.c | 3 ++-
>> include/qemu/option.h | 1 -
>> qdev-monitor.c | 2 +-
>> qemu-img.c | 2 +-
>> util/qemu-config.c | 2 +-
>> util/qemu-option.c | 9 ---------
>> util/qemu-sockets.c | 18 +++++++++---------
>> vl.c | 15 +++++++++------
>> 21 files changed, 42 insertions(+), 44 deletions(-)
>>
>> diff --git a/block/blkdebug.c b/block/blkdebug.c
>> index 16d2b91..7f915ea 100644
>> --- a/block/blkdebug.c
>> +++ b/block/blkdebug.c
>> @@ -359,7 +359,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
>> const char *filename, *config;
>> int ret;
>>
>> - opts = qemu_opts_create_nofail(&runtime_opts);
>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> error_propagate(errp, local_err);
>> diff --git a/block/blkverify.c b/block/blkverify.c
>> index 3c63528..1c1637f 100644
>> --- a/block/blkverify.c
>> +++ b/block/blkverify.c
>> @@ -125,7 +125,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags,
>> const char *filename, *raw;
>> int ret;
>>
>> - opts = qemu_opts_create_nofail(&runtime_opts);
>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> error_propagate(errp, local_err);
>> diff --git a/block/curl.c b/block/curl.c
>> index 5a46f97..a603936 100644
>> --- a/block/curl.c
>> +++ b/block/curl.c
>> @@ -413,7 +413,7 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
>> return -EROFS;
>> }
>>
>> - opts = qemu_opts_create_nofail(&runtime_opts);
>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> qerror_report_err(local_err);
>> diff --git a/block/gluster.c b/block/gluster.c
>> index 877686a..563d497 100644
>> --- a/block/gluster.c
>> +++ b/block/gluster.c
>> @@ -298,7 +298,7 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
>> Error *local_err = NULL;
>> const char *filename;
>>
>> - opts = qemu_opts_create_nofail(&runtime_opts);
>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> qerror_report_err(local_err);
>> diff --git a/block/iscsi.c b/block/iscsi.c
>> index a2d578c..2cec43a 100644
>> --- a/block/iscsi.c
>> +++ b/block/iscsi.c
>> @@ -1241,7 +1241,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
>> return -EINVAL;
>> }
>>
>> - opts = qemu_opts_create_nofail(&runtime_opts);
>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> qerror_report_err(local_err);
>> diff --git a/block/nbd.c b/block/nbd.c
>> index c8deeee..5bd9359 100644
>> --- a/block/nbd.c
>> +++ b/block/nbd.c
>> @@ -234,7 +234,8 @@ static int nbd_config(BDRVNBDState *s, QDict *options)
>> return -EINVAL;
>> }
>>
>> - s->socket_opts = qemu_opts_create_nofail(&socket_optslist);
>> + s->socket_opts = qemu_opts_create(&socket_optslist, NULL, 0,
>> + &error_abort);
>>
>> qemu_opts_absorb_qdict(s->socket_opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> diff --git a/block/qcow2.c b/block/qcow2.c
>> index 6e5d98d..cf28377 100644
>> --- a/block/qcow2.c
>> +++ b/block/qcow2.c
>> @@ -669,7 +669,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags,
>> }
>>
>> /* Enable lazy_refcounts according to image and command line options */
>> - opts = qemu_opts_create_nofail(&qcow2_runtime_opts);
>> + opts = qemu_opts_create(&qcow2_runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> error_propagate(errp, local_err);
>> diff --git a/block/raw-posix.c b/block/raw-posix.c
>> index f836c8e..dce7c27 100644
>> --- a/block/raw-posix.c
>> +++ b/block/raw-posix.c
>> @@ -284,7 +284,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
>> const char *filename;
>> int fd, ret;
>>
>> - opts = qemu_opts_create_nofail(&raw_runtime_opts);
>> + opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> error_propagate(errp, local_err);
>> diff --git a/block/raw-win32.c b/block/raw-win32.c
>> index 2bad5a3..ce314fd 100644
>> --- a/block/raw-win32.c
>> +++ b/block/raw-win32.c
>> @@ -248,7 +248,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
>>
>> s->type = FTYPE_FILE;
>>
>> - opts = qemu_opts_create_nofail(&raw_runtime_opts);
>> + opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> error_propagate(errp, local_err);
>> @@ -550,7 +550,8 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags,
>> Error *local_err = NULL;
>> const char *filename;
>>
>> - QemuOpts *opts = qemu_opts_create_nofail(&raw_runtime_opts);
>> + QemuOpts *opts = qemu_opts_create(&raw_runtime_opts, NULL, 0,
>> + &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> error_propagate(errp, local_err);
>> diff --git a/block/rbd.c b/block/rbd.c
>> index 4a1ea5b..f453f04 100644
>> --- a/block/rbd.c
>> +++ b/block/rbd.c
>> @@ -461,7 +461,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
>> const char *filename;
>> int r;
>>
>> - opts = qemu_opts_create_nofail(&runtime_opts);
>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> qerror_report_err(local_err);
>> diff --git a/block/sheepdog.c b/block/sheepdog.c
>> index ef387de..59d92a9 100644
>> --- a/block/sheepdog.c
>> +++ b/block/sheepdog.c
>> @@ -1375,7 +1375,7 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
>>
>> s->bs = bs;
>>
>> - opts = qemu_opts_create_nofail(&runtime_opts);
>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> qerror_report_err(local_err);
>> diff --git a/block/vvfat.c b/block/vvfat.c
>> index 3ddaa0b..f67d8ae 100644
>> --- a/block/vvfat.c
>> +++ b/block/vvfat.c
>> @@ -1085,7 +1085,7 @@ DLOG(if (stderr == NULL) {
>> setbuf(stderr, NULL);
>> })
>>
>> - opts = qemu_opts_create_nofail(&runtime_opts);
>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
>> qemu_opts_absorb_qdict(opts, options, &local_err);
>> if (error_is_set(&local_err)) {
>> qerror_report_err(local_err);
>> diff --git a/blockdev.c b/blockdev.c
>> index 330aa4a..78e8455 100644
>> --- a/blockdev.c
>> +++ b/blockdev.c
>> @@ -682,7 +682,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
>> bs_opts = qdict_new();
>> qemu_opts_to_qdict(all_opts, bs_opts);
>>
>> - legacy_opts = qemu_opts_create_nofail(&qemu_legacy_drive_opts);
>> + legacy_opts = qemu_opts_create(&qemu_legacy_drive_opts, NULL, 1,
>> + &error_abort);
>> qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
>> if (error_is_set(&local_err)) {
>> qerror_report_err(local_err);
>
> I'm afraid this one still changed fail_if_exists.
>
sed stuff-up. Sorry. Fixing.
Regards,
Peter
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2013-12-11 3:34 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-05 0:47 [Qemu-devel] [PATCH v2 0/6] Add error_abort and associated cleanups Peter Crosthwaite
2013-12-05 0:48 ` [Qemu-devel] [PATCH v2 1/6] error: Add error_abort Peter Crosthwaite
2013-12-05 10:13 ` Markus Armbruster
2013-12-05 13:21 ` Eric Blake
2013-12-06 11:59 ` Markus Armbruster
2013-12-06 12:43 ` Peter Crosthwaite
2013-12-06 13:16 ` Markus Armbruster
2013-12-05 0:49 ` [Qemu-devel] [PATCH v2 2/6] hw/core/qdev: Delete dead code Peter Crosthwaite
2013-12-05 0:49 ` [Qemu-devel] [PATCH v2 3/6] hw: Remove assert_no_error usages Peter Crosthwaite
2013-12-05 0:50 ` [Qemu-devel] [PATCH v2 4/6] target-i386: Remove assert_no_error usage Peter Crosthwaite
2013-12-05 0:50 ` [Qemu-devel] [PATCH v2 5/6] qemu-option: Remove qemu_opts_create_nofail Peter Crosthwaite
2013-12-05 10:11 ` Markus Armbruster
2013-12-11 3:34 ` Peter Crosthwaite
2013-12-05 0:51 ` [Qemu-devel] [PATCH v2 6/6] qerror: Remove assert_no_error() Peter Crosthwaite
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).