[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 17/49] clock: inline most of qdev_init_clocklist
From: |
Paolo Bonzini |
Subject: |
[PULL 17/49] clock: inline most of qdev_init_clocklist |
Date: |
Wed, 11 Dec 2024 17:26:47 +0100 |
Move object creation out of qdev_init_clocklist. The input/output
cases are very simple, and the aliases are completely different.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/core/qdev-clock.c | 71 +++++++++++++++++---------------------------
1 file changed, 27 insertions(+), 44 deletions(-)
diff --git a/hw/core/qdev-clock.c b/hw/core/qdev-clock.c
index 2f9d6cb7579..dacafa4e036 100644
--- a/hw/core/qdev-clock.c
+++ b/hw/core/qdev-clock.c
@@ -22,7 +22,7 @@
* Add a new clock in a device
*/
static NamedClockList *qdev_init_clocklist(DeviceState *dev, const char *name,
- bool output, Clock *clk)
+ bool alias, bool output, Clock *clk)
{
NamedClockList *ncl;
@@ -38,31 +38,8 @@ static NamedClockList *qdev_init_clocklist(DeviceState *dev,
const char *name,
*/
ncl = g_new0(NamedClockList, 1);
ncl->name = g_strdup(name);
+ ncl->alias = alias;
ncl->output = output;
- ncl->alias = (clk != NULL);
-
- /*
- * Trying to create a clock whose name clashes with some other
- * clock or property is a bug in the caller and we will abort().
- */
- if (clk == NULL) {
- clk = CLOCK(object_new(TYPE_CLOCK));
- object_property_add_child(OBJECT(dev), name, OBJECT(clk));
- } else {
- object_property_add_link(OBJECT(dev), name,
- object_get_typename(OBJECT(clk)),
- (Object **) &ncl->clock,
- NULL, OBJ_PROP_LINK_STRONG);
- /*
- * Since the link property has the OBJ_PROP_LINK_STRONG flag, the clk
- * object reference count gets decremented on property deletion.
- * However object_property_add_link does not increment it since it
- * doesn't know the linked object. Increment it here to ensure the
- * aliased clock stays alive during this device life-time.
- */
- object_ref(OBJECT(clk));
- }
-
ncl->clock = clk;
QLIST_INSERT_HEAD(&dev->clocks, ncl, node);
@@ -90,29 +67,25 @@ void qdev_finalize_clocklist(DeviceState *dev)
Clock *qdev_init_clock_out(DeviceState *dev, const char *name)
{
- NamedClockList *ncl;
+ Clock *clk = CLOCK(object_new(TYPE_CLOCK));
+ object_property_add_child(OBJECT(dev), name, OBJECT(clk));
- assert(name);
-
- ncl = qdev_init_clocklist(dev, name, true, NULL);
-
- return ncl->clock;
+ qdev_init_clocklist(dev, name, false, true, clk);
+ return clk;
}
Clock *qdev_init_clock_in(DeviceState *dev, const char *name,
ClockCallback *callback, void *opaque,
unsigned int events)
{
- NamedClockList *ncl;
-
- assert(name);
-
- ncl = qdev_init_clocklist(dev, name, false, NULL);
+ Clock *clk = CLOCK(object_new(TYPE_CLOCK));
+ object_property_add_child(OBJECT(dev), name, OBJECT(clk));
+ qdev_init_clocklist(dev, name, false, false, clk);
if (callback) {
- clock_set_callback(ncl->clock, callback, opaque, events);
+ clock_set_callback(clk, callback, opaque, events);
}
- return ncl->clock;
+ return clk;
}
void qdev_init_clocks(DeviceState *dev, const ClockPortInitArray clocks)
@@ -183,15 +156,25 @@ Clock *qdev_get_clock_out(DeviceState *dev, const char
*name)
Clock *qdev_alias_clock(DeviceState *dev, const char *name,
DeviceState *alias_dev, const char *alias_name)
{
- NamedClockList *ncl;
+ NamedClockList *ncl = qdev_get_clocklist(dev, name);
+ Clock *clk = ncl->clock;
- assert(name && alias_name);
+ ncl = qdev_init_clocklist(alias_dev, alias_name, true, ncl->output, clk);
- ncl = qdev_get_clocklist(dev, name);
+ object_property_add_link(OBJECT(alias_dev), alias_name,
+ TYPE_CLOCK,
+ (Object **) &ncl->clock,
+ NULL, OBJ_PROP_LINK_STRONG);
+ /*
+ * Since the link property has the OBJ_PROP_LINK_STRONG flag, the clk
+ * object reference count gets decremented on property deletion.
+ * However object_property_add_link does not increment it since it
+ * doesn't know the linked object. Increment it here to ensure the
+ * aliased clock stays alive during this device life-time.
+ */
+ object_ref(OBJECT(clk));
- qdev_init_clocklist(alias_dev, alias_name, ncl->output, ncl->clock);
-
- return ncl->clock;
+ return clk;
}
void qdev_connect_clock_in(DeviceState *dev, const char *name, Clock *source)
--
2.47.1
- [PULL 10/49] rust: build: establish a baseline of lints across all crates, (continued)
- [PULL 10/49] rust: build: establish a baseline of lints across all crates, Paolo Bonzini, 2024/12/11
- [PULL 11/49] rust: build: add "make clippy", "make rustfmt", "make rustdoc", Paolo Bonzini, 2024/12/11
- [PULL 13/49] rust: fix doc test syntax, Paolo Bonzini, 2024/12/11
- [PULL 08/49] rust: build: move strict lints handling to rustc_args.py, Paolo Bonzini, 2024/12/11
- [PULL 14/49] rust/qemu-api: Fix fragment-specifiers in define_property macro, Paolo Bonzini, 2024/12/11
- [PULL 12/49] rust: ci: add job that runs Rust tools, Paolo Bonzini, 2024/12/11
- [PULL 15/49] clock: clear callback on unparent, Paolo Bonzini, 2024/12/11
- [PULL 18/49] kvm: remove unnecessary #ifdef, Paolo Bonzini, 2024/12/11
- [PULL 16/49] clock: treat outputs and inputs the same in NamedClockList, Paolo Bonzini, 2024/12/11
- [PULL 17/49] clock: inline most of qdev_init_clocklist,
Paolo Bonzini <=
- [PULL 20/49] hw/block: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 19/49] arm: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 21/49] hw/net: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 22/49] ppc: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 24/49] hw/scsi: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 23/49] hw/rtc: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 26/49] hw/usb: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 25/49] hw/sensor: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 28/49] i386: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11
- [PULL 27/49] hw/virtio: Replace type_register() with type_register_static(), Paolo Bonzini, 2024/12/11