linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@ziepe.ca>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Miroslav Lichvar <mlichvar@redhat.com>,
	linux-kernel@vger.kernel.org,
	John Stultz <john.stultz@linaro.org>,
	Prarit Bhargava <prarit@redhat.com>
Subject: Re: [PATCH] rtc: adapt allowed RTC update error
Date: Wed, 2 Dec 2020 16:54:18 -0400	[thread overview]
Message-ID: <20201202205418.GN5487@ziepe.ca> (raw)
In-Reply-To: <87a6uwdnfn.fsf@nanos.tec.linutronix.de>

On Wed, Dec 02, 2020 at 08:21:00PM +0100, Thomas Gleixner wrote:
> On Wed, Dec 02 2020 at 12:27, Jason Gunthorpe wrote:
> > On Wed, Dec 02, 2020 at 02:44:53PM +0100, Thomas Gleixner wrote:
> >>  	if (IS_ENABLED(CONFIG_GENERIC_CMOS_UPDATE) ||
> >>  	    IS_ENABLED(CONFIG_RTC_SYSTOHC))
> >> -		queue_delayed_work(system_power_efficient_wq, &sync_work, 0);
> >> +		queue_work(system_power_efficient_wq, &sync_work);
> >
> > As Miroslav noted, probably the right thing to do here is to reset the
> > hrtimer and remove the sync_work? I think this code was to expedite an
> > RTC sync when NTP fixes the clock on boot.
> 
> This has two purposes:
> 
>      1) Initiating the update on boot once ntp is synced.
> 
>      2) Reinitiating the sync after ntp lost sync and the work did not
>         reschedule itself because it observed !ntp_synced().
> 
> In both cases it's highly unlikely that the write actually happens when
> the work is queued because do_adjtimex() would have to be exactly around
> the valid update window.

Yes

> So it will not write immediately. It will run through at least one
> retry.

Right, bascially this is scheduling a WQ to do sched_sync_hw_clock()
which will only call hrtimer_start() - seems like jsut calling
hrtimer_start instead of queue_work above would be equivilant

> I don't think the timer should be canceled if the ntp_synced() state did
> not change. Otherwise every do_adtimex() call will cancel/restart
> it, which does not make sense. Lemme stare at it some more.

That makes sense, being conditional on the STA_UNSYNC prior to doing
any hrtimer_start seems OK?
 
> > Also x86 needs a touch, it already has RTC lib, no idea why it also
> > provides this old path too
> 
> Because nobody had the stomach and/or cycles to touch it :)

Hahaha yes.. I vaugely remember looking at this once..

Lets see:

arch/x86/kernel/kvmclock.c:     x86_platform.set_wallclock = kvm_set_wallclock;
arch/x86/kernel/x86_init.c:             x86_platform.set_wallclock = set_rtc_noop;
arch/x86/xen/time.c:            x86_platform.set_wallclock = xen_set_wallclock;
arch/x86/xen/time.c:    x86_platform.set_wallclock = xen_set_wallclock;
  All returns -ENODEV/EINVAL

arch/x86/kernel/x86_init.c:     .set_wallclock                  = mach_set_rtc_mmss,
  This is already rtclib under drivers/rtc/rtc-mc146818-lib.c
 
  I suppose the issue here is the rtclib driver only binds via PNP and
  very old x86 systems won't have the PNP tables? It seems doable to
  check for a PNP device after late init and manually create a
  platform_device for the RTC

arch/x86/platform/intel-mid/intel_mid_vrtc.c:   x86_platform.set_wallclock = vrtc_set_mmss;
  This is also already in rtclib under rtc-mrst.c, and this is already
  wired to create the rtc platform device during init

So it is very close now to be able to delete all this for x86. Do you
know of something I've missed?

> > I wonder if the cmos path could be killed off under the dead HW
> > principle?
> 
> Unfortunately that code path is not that dead on x86. You need to fix
> all the (ab)users first. :)

Assuming x86 can be resolved as above, that leaves two 20 year old MIPS
platforms and the PPC list from before. ARM is gone compared to last
time I looked! Progress :)

Thanks,
Jason

  reply	other threads:[~2020-12-02 20:55 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-01 14:38 [PATCH] rtc: adapt allowed RTC update error Miroslav Lichvar
2020-12-01 16:12 ` Jason Gunthorpe
2020-12-01 17:14   ` Miroslav Lichvar
2020-12-01 17:35     ` Jason Gunthorpe
2020-12-02 10:01       ` [PATCHv2] " Miroslav Lichvar
2020-12-02 13:44       ` [PATCH] " Thomas Gleixner
2020-12-02 15:07         ` Miroslav Lichvar
2020-12-02 15:36           ` Miroslav Lichvar
2020-12-02 18:36             ` Thomas Gleixner
2020-12-02 16:27         ` Jason Gunthorpe
2020-12-02 19:21           ` Thomas Gleixner
2020-12-02 20:54             ` Jason Gunthorpe [this message]
2020-12-02 22:08               ` Thomas Gleixner
2020-12-02 23:03                 ` Jason Gunthorpe
2020-12-03  1:14                 ` Thomas Gleixner
2020-12-03  2:04                   ` Jason Gunthorpe
2020-12-03  2:10                   ` Alexandre Belloni
2020-12-03 15:39                     ` Thomas Gleixner
2020-12-03 16:16                       ` Jason Gunthorpe
2020-12-03 21:05                         ` Thomas Gleixner
2020-12-03 21:31                           ` Thomas Gleixner
2020-12-03 22:36                             ` Jason Gunthorpe
2020-12-04 13:02                               ` Thomas Gleixner
2020-12-04 14:08                                 ` Jason Gunthorpe
2020-12-04 14:37                                   ` Alexandre Belloni
2020-12-04 14:46                                     ` Jason Gunthorpe
2020-12-04 15:08                                       ` Alexandre Belloni
2020-12-04 15:57                                         ` Jason Gunthorpe
2020-12-04 16:35                                           ` Alexandre Belloni
2020-12-03 22:00                           ` Alexandre Belloni
2020-12-04  9:34                             ` Thomas Gleixner
2020-12-04  9:51                               ` Alexandre Belloni
2020-12-04 10:44                                 ` Thomas Gleixner
2020-12-03 17:29                       ` Alexandre Belloni
2020-12-03 19:52                         ` Thomas Gleixner
2020-12-03 15:52                     ` Jason Gunthorpe
2020-12-03 16:07                       ` Alexandre Belloni
2020-12-03 20:10                         ` Jason Gunthorpe

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=20201202205418.GN5487@ziepe.ca \
    --to=jgg@ziepe.ca \
    --cc=john.stultz@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlichvar@redhat.com \
    --cc=prarit@redhat.com \
    --cc=tglx@linutronix.de \
    /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).