diff options
author | Markus Armbruster <armbru@redhat.com> | 2022-02-22 13:02:07 +0100 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2022-02-28 11:39:35 +0100 |
commit | 2beb1e5f9acb443d90fe4d366463f89d32d83bc8 (patch) | |
tree | 3039414c1a58c8778309dd16014befeb882489a7 | |
parent | 03397528d96ff5d631fd2fa40b753548e53b5149 (diff) | |
download | qemu-2beb1e5f9acb443d90fe4d366463f89d32d83bc8.zip qemu-2beb1e5f9acb443d90fe4d366463f89d32d83bc8.tar.gz qemu-2beb1e5f9acb443d90fe4d366463f89d32d83bc8.tar.bz2 |
rtc: Have event RTC_CHANGE identify the RTC by QOM path
Event RTC_CHANGE is "emitted when the guest changes the RTC time" (and
the RTC supports the event). What if there's more than one RTC?
Which one changed? New @qom-path identifies it.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <87a6ejnm80.fsf@pond.sub.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
-rw-r--r-- | hw/ppc/spapr_rtc.c | 4 | ||||
-rw-r--r-- | hw/rtc/mc146818rtc.c | 3 | ||||
-rw-r--r-- | hw/rtc/pl031.c | 3 | ||||
-rw-r--r-- | qapi/misc.json | 4 |
4 files changed, 10 insertions, 4 deletions
diff --git a/hw/ppc/spapr_rtc.c b/hw/ppc/spapr_rtc.c index 79677cf..d55b4b0 100644 --- a/hw/ppc/spapr_rtc.c +++ b/hw/ppc/spapr_rtc.c @@ -97,6 +97,7 @@ static void rtas_set_time_of_day(PowerPCCPU *cpu, SpaprMachineState *spapr, uint32_t nret, target_ulong rets) { SpaprRtcState *rtc = &spapr->rtc; + g_autofree const char *qom_path = NULL; struct tm tm; time_t new_s; int64_t host_ns; @@ -120,7 +121,8 @@ static void rtas_set_time_of_day(PowerPCCPU *cpu, SpaprMachineState *spapr, } /* Generate a monitor event for the change */ - qapi_event_send_rtc_change(qemu_timedate_diff(&tm)); + qom_path = object_get_canonical_path(OBJECT(rtc)); + qapi_event_send_rtc_change(qemu_timedate_diff(&tm), qom_path); host_ns = qemu_clock_get_ns(rtc_clock); diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c index 57c514e..ac9a60c 100644 --- a/hw/rtc/mc146818rtc.c +++ b/hw/rtc/mc146818rtc.c @@ -611,12 +611,13 @@ static void rtc_get_time(RTCState *s, struct tm *tm) static void rtc_set_time(RTCState *s) { struct tm tm; + g_autofree const char *qom_path = object_get_canonical_path(OBJECT(s)); rtc_get_time(s, &tm); s->base_rtc = mktimegm(&tm); s->last_update = qemu_clock_get_ns(rtc_clock); - qapi_event_send_rtc_change(qemu_timedate_diff(&tm)); + qapi_event_send_rtc_change(qemu_timedate_diff(&tm), qom_path); } static void rtc_set_cmos(RTCState *s, const struct tm *tm) diff --git a/hw/rtc/pl031.c b/hw/rtc/pl031.c index 60167c7..b01d0e7 100644 --- a/hw/rtc/pl031.c +++ b/hw/rtc/pl031.c @@ -138,12 +138,13 @@ static void pl031_write(void * opaque, hwaddr offset, switch (offset) { case RTC_LR: { + g_autofree const char *qom_path = object_get_canonical_path(opaque); struct tm tm; s->tick_offset += value - pl031_get_count(s); qemu_get_timedate(&tm, s->tick_offset); - qapi_event_send_rtc_change(qemu_timedate_diff(&tm)); + qapi_event_send_rtc_change(qemu_timedate_diff(&tm), qom_path); pl031_set_alarm(s); break; diff --git a/qapi/misc.json b/qapi/misc.json index 0ab235e..b83cc39 100644 --- a/qapi/misc.json +++ b/qapi/misc.json @@ -536,6 +536,8 @@ # @offset: offset in seconds between base RTC clock (as specified # by -rtc base), and new RTC clock value # +# @qom-path: path to the RTC object in the QOM tree +# # Note: This event is rate-limited. # It is not guaranteed that the RTC in the system implements # this event, or even that the system has an RTC at all. @@ -550,4 +552,4 @@ # ## { 'event': 'RTC_CHANGE', - 'data': { 'offset': 'int' } } + 'data': { 'offset': 'int', 'qom-path': 'str' } } |