All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Daniil Tatianin <d-tatianin@yandex-team.ru>,
	"Michael S. Tsirkin" <mst@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Eric Blake <eblake@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [PATCH v3] mc146818rtc: add a way to generate RTC interrupts via QMP
Date: Mon, 27 May 2024 19:01:05 +0200	[thread overview]
Message-ID: <e7492475-94db-4408-8d25-175b18fefec2@linaro.org> (raw)
In-Reply-To: <42ad8fe7-0de8-4284-9d37-ff6b5f66acdf@yandex-team.ru>

Hi Daniil,

On 21/5/24 10:08, Daniil Tatianin wrote:
> Could you please take a look at this revision? I think I've taken 
> everyone's feedback into account.

Sorry for the delay, I missed your patch since you didn't Cc me
(Markus asked me to look at this).

Thanks for addressing the previous requests.

> Thank you!
> 
> On 5/14/24 9:57 AM, Daniil Tatianin wrote:
>> ping :)
>> 06.05.2024, 11:34, "Daniil Tatianin" <d-tatianin@yandex-team.ru>:
>>
>>     This can be used to force-synchronize the time in guest after a long
>>     stop-cont pause, which can be useful for serverless-type workload.
>>
>>     Also add a comment to highlight the fact that this (and one other QMP
>>     command) only works for the MC146818 RTC controller.
>>
>>     Signed-off-by: Daniil Tatianin <d-tatianin@yandex-team.ru>
>>     ---
>>
>>     Changes since v0:
>>     - Rename to rtc-inject-irq to match other similar API
>>     - Add a comment to highlight that this only works for the I386 RTC
>>
>>     Changes since v1:
>>     - Added a description below the QMP command to explain how it can be
>>       used and what it does.
>>
>>     Changes since v2:
>>     - Add a 'broadcast' suffix.
>>     - Change the comments to explain the flags we're setting.
>>     - Change the command description to fix styling & explain that
>>     it's a broadcast command.
>>
>>     ---
>>      hw/rtc/mc146818rtc.c | 20 ++++++++++++++++++++
>>      include/hw/rtc/mc146818rtc.h | 1 +
>>      qapi/misc-target.json | 19 +++++++++++++++++++
>>      3 files changed, 40 insertions(+)
>>
>>     diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
>>     index 3379f92748..2b3754f5c6 100644
>>     --- a/hw/rtc/mc146818rtc.c
>>     +++ b/hw/rtc/mc146818rtc.c
>>     @@ -107,6 +107,11 @@ static void
>>     rtc_coalesced_timer_update(MC146818RtcState *s)
>>      static QLIST_HEAD(, MC146818RtcState) rtc_devices =
>>          QLIST_HEAD_INITIALIZER(rtc_devices);
>>
>>     +/*
>>     + * NOTE:
>>     + * The two QMP functions below are _only_ implemented for the
>>     MC146818.
>>     + * All other RTC devices ignore this.
>>     + */
>>      void qmp_rtc_reset_reinjection(Error **errp)
>>      {
>>          MC146818RtcState *s;
>>     @@ -116,6 +121,21 @@ void qmp_rtc_reset_reinjection(Error **errp)
>>          }
>>      }
>>
>>     +void qmp_rtc_inject_irq_broadcast(Error **errp)
>>     +{
>>     + MC146818RtcState *s;
>>     +
>>     + QLIST_FOREACH(s, &rtc_devices, link) {
>>     + // Update-ended interrupt enable

This doesn't pass the checkpatch script because it isn't QEMU coding
style:
https://www.qemu.org/docs/master/devel/submitting-a-patch.html#use-the-qemu-coding-style

>>     + s->cmos_data[RTC_REG_B] |= REG_B_UIE;
>>     +
>>     + // Interrupt request flag | update interrupt flag
>>     + s->cmos_data[RTC_REG_C] |= REG_C_IRQF | REG_C_UF;
>>     +
>>     + qemu_irq_raise(s->irq);
>>     + }
>>     +}
>>     +
>>      static bool rtc_policy_slew_deliver_irq(MC146818RtcState *s)
>>      {
>>          kvm_reset_irq_delivered();
>>     diff --git a/include/hw/rtc/mc146818rtc.h
>>     b/include/hw/rtc/mc146818rtc.h
>>     index 97cec0b3e8..e9dd0f9c72 100644
>>     --- a/include/hw/rtc/mc146818rtc.h
>>     +++ b/include/hw/rtc/mc146818rtc.h
>>     @@ -56,5 +56,6 @@ MC146818RtcState *mc146818_rtc_init(ISABus *bus,
>>     int base_year,
>>      void mc146818rtc_set_cmos_data(MC146818RtcState *s, int addr, int
>>     val);
>>      int mc146818rtc_get_cmos_data(MC146818RtcState *s, int addr);
>>      void qmp_rtc_reset_reinjection(Error **errp);
>>     +void qmp_rtc_inject_irq_broadcast(Error **errp);
>>
>>      #endif /* HW_RTC_MC146818RTC_H */
>>     diff --git a/qapi/misc-target.json b/qapi/misc-target.json
>>     index 4e0a6492a9..7d388a3753 100644
>>     --- a/qapi/misc-target.json
>>     +++ b/qapi/misc-target.json
>>     @@ -19,6 +19,25 @@
>>      { 'command': 'rtc-reset-reinjection',
>>        'if': 'TARGET_I386' }
>>

Your new command doesn't make my life harder than the current
'rtc-reset-reinjection' command, so if this is useful to you,
I'm OK to:
Acked-by: Philippe Mathieu-Daudé <philmd@linaro.org>
(assuming the comment style is fixed).

I'll see later how to deal with that with heterogeneous
emulation.

Regards,

Phil.

>>     +##
>>     +# @rtc-inject-irq-broadcast:
>>     +#
>>     +# Inject an RTC interrupt for all existing RTCs on the system.
>>     +# The interrupt forces the guest to synchronize the time with RTC.
>>     +# This is useful after a long stop-cont pause, which is common for
>>     +# serverless-type workload.
>>     +#
>>     +# Since: 9.1
>>     +#
>>     +# Example:
>>     +#
>>     +# -> { "execute": "rtc-inject-irq-broadcast" }
>>     +# <- { "return": {} }
>>     +#
>>     +##
>>     +{ 'command': 'rtc-inject-irq-broadcast',
>>     + 'if': 'TARGET_I386' }
>>     +
>>      ##
>>      # @SevState:
>>      #
>>
>>     --
>>     2.34.1
>>



  reply	other threads:[~2024-05-27 17:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-06  8:34 [PATCH v3] mc146818rtc: add a way to generate RTC interrupts via QMP Daniil Tatianin
2024-05-14  6:57 ` Daniil Tatianin
2024-05-21  8:08   ` Daniil Tatianin
2024-05-27 17:01     ` Philippe Mathieu-Daudé [this message]
2024-05-28  7:18       ` Daniil Tatianin

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=e7492475-94db-4408-8d25-175b18fefec2@linaro.org \
    --to=philmd@linaro.org \
    --cc=armbru@redhat.com \
    --cc=d-tatianin@yandex-team.ru \
    --cc=eblake@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@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.