qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Cc: Frederik Du Toit Lotter <fred.lotter@canonical.com>,
	qemu-riscv@nongnu.org, qemu-devel@nongnu.org,
	Laurent Vivier <laurent@vivier.eu>,
	Anup Patel <anup.patel@wdc.com>,
	Alistair Francis <Alistair.Francis@wdc.com>
Subject: Re: [PATCH-for-10.0 1/1] goldfish_rtc: keep time offset when resetting
Date: Fri, 21 Mar 2025 18:43:41 +0100	[thread overview]
Message-ID: <b4556abe-2b9e-46d1-9135-498bc30e8a91@linaro.org> (raw)
In-Reply-To: <3252f0c4-654d-4066-8f9c-87d56d144a6f@canonical.com>

On 21/3/25 17:10, Heinrich Schuchardt wrote:
> On 21.03.25 17:08, Philippe Mathieu-Daudé wrote:
>> Hi Heinrich,
>>
>> On 21/3/25 09:12, Heinrich Schuchardt wrote:
>>> Currently resetting leads to resynchronizing the Goldfish RTC with the
>>> system clock of the host. In real hardware an RTC reset would not change
>>> the wall time. Other RTCs like pl031 do not show this behavior.
>>>
>>> Move the synchronization of the RTC with the system clock to the 
>>> instance
>>> realization.
>>>
>>
>> Cc: qemu-stable@nongnu.org
>> Fixes: 9a5b40b8427 ("hw: rtc: Add Goldfish RTC device")
>>
>>> Reported-by: Frederik Du Toit Lotter <fred.lotter@canonical.com>
>>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
>>> ---
>>>   hw/rtc/goldfish_rtc.c | 14 +++++++-------
>>>   1 file changed, 7 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/hw/rtc/goldfish_rtc.c b/hw/rtc/goldfish_rtc.c
>>> index 0f1b53e0e4..203a343511 100644
>>> --- a/hw/rtc/goldfish_rtc.c
>>> +++ b/hw/rtc/goldfish_rtc.c
>>> @@ -239,15 +239,8 @@ static const VMStateDescription 
>>> goldfish_rtc_vmstate = {
>>>   static void goldfish_rtc_reset(DeviceState *dev)
>>>   {
>>>       GoldfishRTCState *s = GOLDFISH_RTC(dev);
>>> -    struct tm tm;
>>>       timer_del(s->timer);
>>> -
>>> -    qemu_get_timedate(&tm, 0);
>>> -    s->tick_offset = mktimegm(&tm);
>>> -    s->tick_offset *= NANOSECONDS_PER_SECOND;
>>> -    s->tick_offset -= qemu_clock_get_ns(rtc_clock);
>>> -    s->tick_offset_vmstate = 0;
>>>       s->alarm_next = 0;
>>>       s->alarm_running = 0;
>>>       s->irq_pending = 0;
>>> @@ -258,6 +251,7 @@ static void goldfish_rtc_realize(DeviceState *d, 
>>> Error **errp)
>>>   {
>>>       SysBusDevice *dev = SYS_BUS_DEVICE(d);
>>>       GoldfishRTCState *s = GOLDFISH_RTC(d);
>>> +    struct tm tm;
>>>       memory_region_init_io(&s->iomem, OBJECT(s),
>>>                             &goldfish_rtc_ops[s->big_endian], s,
>>> @@ -267,6 +261,12 @@ static void goldfish_rtc_realize(DeviceState *d, 
>>> Error **errp)
>>>       sysbus_init_irq(dev, &s->irq);
>>>       s->timer = timer_new_ns(rtc_clock, goldfish_rtc_interrupt, s);
>>> +
>>> +    qemu_get_timedate(&tm, 0);
>>> +    s->tick_offset = mktimegm(&tm);
>>> +    s->tick_offset *= NANOSECONDS_PER_SECOND;
>>> +    s->tick_offset -= qemu_clock_get_ns(rtc_clock);
>>
>> OK
>>
>>> +    s->tick_offset_vmstate = 0;
>>
>> This last line is pointless. Otherwise:
>> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> 
> Thanks for reviewing. Is the DeviceState structure fill with 0x00 when 
> allocated?

The QOM hierarchy of this device is:

GOLDFISH_RTC -> SYS_BUS_DEVICE -> DEVICE -> OBJECT

When objects are created, object_new() ends up calling
object_initialize_with_type() which calls memset(0).

Objects initialized "in place" via object_initialize_child()
also end calling object_initialize() -> object_initialize_with_type()
then memset(0).

So yes, QOM-based objects have their state zero-initialized.

Regards,

Phil.



      reply	other threads:[~2025-03-21 17:44 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-21  8:12 [PATCH 1/1] goldfish_rtc: keep time offset when resetting Heinrich Schuchardt
2025-03-21 16:00 ` Anup Patel
2025-03-21 16:08 ` [PATCH-for-10.0 " Philippe Mathieu-Daudé
2025-03-21 16:10   ` Heinrich Schuchardt
2025-03-21 17:43     ` Philippe Mathieu-Daudé [this message]

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=b4556abe-2b9e-46d1-9135-498bc30e8a91@linaro.org \
    --to=philmd@linaro.org \
    --cc=Alistair.Francis@wdc.com \
    --cc=anup.patel@wdc.com \
    --cc=fred.lotter@canonical.com \
    --cc=heinrich.schuchardt@canonical.com \
    --cc=laurent@vivier.eu \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-riscv@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).