qdev_init()'s error handling has side effects: it unparents the device, and it calls qerror_report_err().
Unparenting is wanted in realize methods only when we do unusual things like trying a set of devices and keeping the first one that works. This is the case in PATCH 1+2. qerror_report_err() is always inappropriate in realize methods, because it doesn't return the Error object. It either reports the error to stderr or the human monitor, or it stores it in the QMP monitor, where it makes the QMP command fail even though the realize method succeeded. Fortunately, none of the realize methods in this patch are reachable from QMP. Markus Armbruster (3): PPC: Clean up misuse of qdev_init() in kvm-openpic creation spapr: Clean up misuse of qdev_init() in xics-kvm creation s390x: Replace unchecked qdev_init() by qdev_init_nofail() hw/intc/s390_flic.c | 6 +----- hw/ppc/e500.c | 20 +++++++++++--------- hw/ppc/spapr.c | 25 ++++++++++++------------- 3 files changed, 24 insertions(+), 27 deletions(-) -- 1.9.3
