[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 4/8] hw/timer/mc146818rtc: Fix introspection prob
From: |
Thomas Huth |
Subject: |
[Qemu-devel] [PATCH v2 4/8] hw/timer/mc146818rtc: Fix introspection problem |
Date: |
Thu, 16 Aug 2018 13:35:54 +0200 |
There is currently a funny problem with the "mc146818rtc" device:
1) Start QEMU like this:
qemu-system-ppc64 -M pseries -S
2) At the HMP monitor, enter "info qom-tree". Note that there is an
entry for "/rtc (spapr-rtc)".
3) Introspect the mc146818rtc device like this:
device_add mc146818rtc,help
4) Run "info qom-tree" again. The "/rtc" entry is gone now!
The rtc_finalize() function of the mc146818rtc device has two bugs: First,
it tries to remove a "rtc" property, while the rtc_realizefn() added a
"rtc-time" property instead. And second, it should have been done in an
unrealize function, not in a finalize function, to avoid that this causes
problems during introspection.
But since adding aliases to the global machine state should not be done
from a device's realize function anyway, let's rather fix this issue
by moving the creation of the alias to the code that creates the device
(and thus is run from the machine init functions instead), i.e. the
mc146818_rtc_init() function for most machines. The prep machines are
special, since the mc146818rtc device is created here in the realize
function of the i82378 device. Since we certainly don't want to add the
alias there, we add it to some code that is called from the ibm_40p_init()
machine init function instead.
Since the alias is now only created during the machine init, we can remove
the object_property_del() completely.
Fixes: 654a36d857ff949e0d1989904b76f53fded9dc83
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Thomas Huth <address@hidden>
---
hw/ppc/prep.c | 3 +++
hw/timer/mc146818rtc.c | 12 +++---------
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
index 3401570..91a8f42 100644
--- a/hw/ppc/prep.c
+++ b/hw/ppc/prep.c
@@ -696,6 +696,9 @@ static int prep_set_cmos_checksum(DeviceState *dev, void
*opaque)
rtc_set_memory(rtc, 0x3e, checksum & 0xff);
rtc_set_memory(rtc, 0x2f, checksum >> 8);
rtc_set_memory(rtc, 0x3f, checksum >> 8);
+
+ object_property_add_alias(qdev_get_machine(), "rtc-time", OBJECT(rtc),
+ "date", NULL);
}
return 0;
}
diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c
index 3a14075..a504f03 100644
--- a/hw/timer/mc146818rtc.c
+++ b/hw/timer/mc146818rtc.c
@@ -995,9 +995,6 @@ static void rtc_realizefn(DeviceState *dev, Error **errp)
object_property_add_tm(OBJECT(s), "date", rtc_get_date, NULL);
- object_property_add_alias(qdev_get_machine(), "rtc-time",
- OBJECT(s), "date", NULL);
-
qdev_init_gpio_out(dev, &s->irq, 1);
}
@@ -1019,6 +1016,9 @@ ISADevice *mc146818_rtc_init(ISABus *bus, int base_year,
qemu_irq intercept_irq)
}
QLIST_INSERT_HEAD(&rtc_devices, s, link);
+ object_property_add_alias(qdev_get_machine(), "rtc-time", OBJECT(s),
+ "date", NULL);
+
return isadev;
}
@@ -1052,17 +1052,11 @@ static void rtc_class_initfn(ObjectClass *klass, void
*data)
dc->user_creatable = false;
}
-static void rtc_finalize(Object *obj)
-{
- object_property_del(qdev_get_machine(), "rtc", NULL);
-}
-
static const TypeInfo mc146818rtc_info = {
.name = TYPE_MC146818_RTC,
.parent = TYPE_ISA_DEVICE,
.instance_size = sizeof(RTCState),
.class_init = rtc_class_initfn,
- .instance_finalize = rtc_finalize,
};
static void mc146818rtc_register_types(void)
--
1.8.3.1
- [Qemu-devel] [PATCH v2 0/8] Various qtest-related patches and a mc146818rtc fix, Thomas Huth, 2018/08/16
- [Qemu-devel] [PATCH v2 1/8] tests/migration-test: Silence the kvm_hv message by default, Thomas Huth, 2018/08/16
- [Qemu-devel] [PATCH v2 2/8] net: Silence 'has no peer' messages in testing mode, Thomas Huth, 2018/08/16
- [Qemu-devel] [PATCH v2 3/8] hw/timer/mc146818rtc: White space clean-up, Thomas Huth, 2018/08/16
- [Qemu-devel] [PATCH v2 4/8] hw/timer/mc146818rtc: Fix introspection problem,
Thomas Huth <=
- [Qemu-devel] [PATCH v2 8/8] MAINTAINERS: add maintainers for qtest, Thomas Huth, 2018/08/16
- [Qemu-devel] [PATCH v2 5/8] tests: Skip old versioned machine types in quick testing mode, Thomas Huth, 2018/08/16
- [Qemu-devel] [PATCH v2 7/8] tests/device-introspect: Test with all machines, not only with "none", Thomas Huth, 2018/08/16
- [Qemu-devel] [PATCH v2 6/8] tests/device-introspection: Check that the qom-tree and qtree do not change, Thomas Huth, 2018/08/16
- Re: [Qemu-devel] [PATCH v2 0/8] Various qtest-related patches and a mc146818rtc fix, Paolo Bonzini, 2018/08/17