Add error_abort and associated cleanups
Status from this message: Applied to the qmp branch, thanks.
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
Earlier versions · 1
| Version | Posted | Patches | Replies | Status |
|---|---|---|---|---|
| v1 RFC | 5 patches | 19 replies | Superseded |
Changed since v2 from the cover letter
Removed new assert_no_error usages in target-arm/cpu.c Changed since v1:
Addressed Markus review.
Guarded against erroneous setting of error_abort != NULL.
Patches in v4 Applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/6 | error: Add error_abortinclude/ util/ | +27 | 0 replies | |
| 2/6 | hw/core/qdev: Delete dead codehw/ | +0 | 0 replies | |
| 3/6 | hw: Remove assert_no_error usageshw/ hw/ hw/ +4 more | +33 | 0 replies | |
| 4/6 | target-i386: Remove assert_no_error usagetarget-i386/ | +1 | 0 replies | |
| 5/6 | qemu-option: Remove qemu_opts_create_nofailblock/ block/ block/ +18 more | +42 | 0 replies | |
| 6/6 | qerror: Remove assert_no_error()include/ qobject/ | +0 | 0 replies |
Reviews trailers per patch
All 6 patches have a Reviewed-by or Acked-by.
| Patch | Markus Armbruster |
|---|---|
| 1/6 | R-b |
| 2/6 | R-b |
| 3/6 | R-b |
| 4/6 | R-b |
| 5/6 | R-b |
| 6/6 | R-b |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [Qemu-devel] [PATCH qmp v4 0/6] Add error_abort and associated cleanups
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:
qom/object.c +0 -0
@@ -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 v2:
Removed new assert_no_error usages in target-arm/cpu.c 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-arm/cpu.c | 7 ++----- target-i386/cpu.c | 4 +--- util/error.c | 22 +++++++++++++++++++++- util/qemu-config.c | 2 +- util/qemu-option.c | 9 --------- util/qemu-sockets.c | 18 +++++++++--------- vl.c | 15 +++++++++------ 33 files changed, 103 insertions(+), 147 deletions(-)
Signature · 1 line
1.8.5.2