[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 13/21] qdev: Clean up qdev_connect_gpio_out_named()
From: |
Markus Armbruster |
Subject: |
[PULL 13/21] qdev: Clean up qdev_connect_gpio_out_named() |
Date: |
Fri, 15 May 2020 08:04:16 +0200 |
Both qdev_connect_gpio_out_named() and device_set_realized() put
objects without a parent into the "/machine/unattached/" orphanage.
qdev_connect_gpio_out_named() needs a lengthy comment to explain how
it works. It exploits that object_property_add_child() can fail only
when we got a parent already, and ignoring that error does what we
want. True. If it failed due to "duplicate property", we'd be in
trouble, but that would be a programming error.
device_set_realized() is cleaner: it checks whether we need a parent,
then calls object_property_add_child(), aborting on failure. No need
for a comment, and programming errors get caught.
Change qdev_connect_gpio_out_named() to match.
Cc: Peter Crosthwaite <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Paolo Bonzini <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Message-Id: <address@hidden>
---
hw/core/qdev.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index ea7118ab0e..2e6c29ba78 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -542,15 +542,12 @@ void qdev_connect_gpio_out_named(DeviceState *dev, const
char *name, int n,
{
char *propname = g_strdup_printf("%s[%d]",
name ? name : "unnamed-gpio-out", n);
- if (pin) {
- /* We need a name for object_property_set_link to work. If the
- * object has a parent, object_property_add_child will come back
- * with an error without doing anything. If it has none, it will
- * never fail. So we can just call it with a NULL Error pointer.
- */
+ if (pin && !OBJECT(pin)->parent) {
+ /* We need a name for object_property_set_link to work */
object_property_add_child(container_get(qdev_get_machine(),
"/unattached"),
- "non-qdev-gpio[*]", OBJECT(pin), NULL);
+ "non-qdev-gpio[*]", OBJECT(pin),
+ &error_abort);
}
object_property_set_link(OBJECT(dev), OBJECT(pin), propname, &error_abort);
g_free(propname);
--
2.21.1
- [PULL 00/21] QOM patches for 2020-05-15, Markus Armbruster, 2020/05/15
- [PULL 01/21] qom: Clearer reference counting in object_initialize_childv(), Markus Armbruster, 2020/05/15
- [PULL 03/21] qom: Drop object_property_del_child()'s unused parameter @errp, Markus Armbruster, 2020/05/15
- [PULL 05/21] qom: Drop convenience method object_property_get_uint16List(), Markus Armbruster, 2020/05/15
- [PULL 02/21] qom: Clean up inconsistent use of gchar * vs. char *, Markus Armbruster, 2020/05/15
- [PULL 18/21] qom: Drop @errp parameter of object_property_del(), Markus Armbruster, 2020/05/15
- [PULL 13/21] qdev: Clean up qdev_connect_gpio_out_named(),
Markus Armbruster <=
- [PULL 08/21] tests/check-qom-proplist: Improve iterator coverage, Markus Armbruster, 2020/05/15
- [PULL 07/21] qom: Drop object_property_set_description() parameter @errp, Markus Armbruster, 2020/05/15
- [PULL 17/21] spapr_pci: Drop some dead error handling, Markus Armbruster, 2020/05/15
- [PULL 10/21] hw/isa/superio: Make the components QOM children, Markus Armbruster, 2020/05/15
- [PULL 09/21] s390x/cpumodel: Fix UI to CPU features pcc-cmac-{aes, eaes}-256, Markus Armbruster, 2020/05/15
- [PULL 06/21] qom: Make all the object_property_add_FOO() return the property, Markus Armbruster, 2020/05/15
- [PULL 15/21] Drop more @errp parameters after previous commit, Markus Armbruster, 2020/05/15
- [PULL 19/21] target: Remove unnecessary CPU() cast, Markus Armbruster, 2020/05/15
- [PULL 16/21] qdev: Unrealize must not fail, Markus Armbruster, 2020/05/15
- [PULL 04/21] qom: Simplify object_property_get_enum(), Markus Armbruster, 2020/05/15