From: Markus Armbruster <armbru@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
qemu-devel@nongnu.org, "Greg Kurz" <groug@kaod.org>,
qemu-arm@nongnu.org, qemu-ppc@nongnu.org,
"Cédric Le Goater" <clg@kaod.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"David Gibson" <david@gibson.dropbear.id.au>
Subject: [PATCH RFC 4/4] rtc: Have event RTC_CHANGE identify the RTC by QOM path
Date: Tue, 22 Feb 2022 13:02:07 +0100 [thread overview]
Message-ID: <87a6ejnm80.fsf@pond.sub.org> (raw)
In-Reply-To: <20220221192123.749970-1-peter.maydell@linaro.org> (Peter Maydell's message of "Mon, 21 Feb 2022 19:21:20 +0000")
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>
---
RFC because it's compile-tested only. Worthwhile? Let me know what you
think.
qapi/misc.json | 4 +++-
hw/ppc/spapr_rtc.c | 4 +++-
hw/rtc/mc146818rtc.c | 3 ++-
hw/rtc/pl031.c | 3 ++-
4 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/qapi/misc.json b/qapi/misc.json
index 0ab235e41f..b83cc39029 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' } }
diff --git a/hw/ppc/spapr_rtc.c b/hw/ppc/spapr_rtc.c
index 79677cf550..d55b4b0c50 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 57c514e15c..ac9a60c90e 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 60167c778f..b01d0e75d1 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;
--
2.35.1
next prev parent reply other threads:[~2022-02-22 12:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-21 19:21 [PATCH v2 0/3] qapi: Move RTC_CHANGE back out of target schema Peter Maydell
2022-02-21 19:21 ` [PATCH v2 1/3] " Peter Maydell
2022-02-21 19:27 ` Philippe Mathieu-Daudé
2022-02-21 19:21 ` [PATCH v2 2/3] qapi: Document some missing details of RTC_CHANGE event Peter Maydell
2022-02-21 19:28 ` Philippe Mathieu-Daudé
2022-02-22 11:22 ` Markus Armbruster
2022-02-21 19:21 ` [PATCH v2 3/3] hw/rtc: Compile pl031 once-only Peter Maydell
2022-02-21 19:28 ` Philippe Mathieu-Daudé
2022-02-21 20:11 ` [PATCH v2 0/3] qapi: Move RTC_CHANGE back out of target schema Eric Auger
2022-02-22 12:02 ` Markus Armbruster [this message]
2022-02-22 12:56 ` [PATCH RFC 4/4] rtc: Have event RTC_CHANGE identify the RTC by QOM path Philippe Mathieu-Daudé
2022-02-22 13:06 ` Peter Maydell
2022-02-22 15:47 ` Philippe Mathieu-Daudé
2022-02-23 18:00 ` Cédric Le Goater
2022-02-22 15:04 ` Markus Armbruster
2022-02-22 15:47 ` Philippe Mathieu-Daudé
2022-02-23 13:46 ` Markus Armbruster
2022-02-25 8:38 ` [PATCH v2 0/3] qapi: Move RTC_CHANGE back out of target schema Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87a6ejnm80.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=clg@kaod.org \
--cc=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=eblake@redhat.com \
--cc=groug@kaod.org \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.