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>
This commit is contained in:
parent
03397528d9
commit
2beb1e5f9a
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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' } }
|
||||
|
Loading…
Reference in New Issue
Block a user