lkml.org 
[lkml]   [2012]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] NTP: Add a CONFIG_RTC_SYSTOHC configuration
On 12/11/2012 09:56 PM, Jason Gunthorpe wrote:
> The purpose of this option is to allow ARM/etc systems that rely on the
> class RTC subsystem to have the same kind of automatic NTP based
> synchronization that we have on PC platforms. Today ARM does not
> implement update_persistent_clock and makes extensive use of the
> class RTC system.
>
> When enabled CONFIG_RTC_SYSTOHC will provide a generic
> rtc_update_persistent_clock that stores the current time in the RTC
> and is intended complement the existing CONFIG_RTC_HCTOSYS option that
> loads the RTC at boot.
>
> The option also overrides the call to any platform update_persistent_clock
> so that the RTC subsystem completely and generically replaces this
> functionality.
>
> Tested on ARM kirkwood and PPC405
So I'm initially mixed on this, as it feels a little redundant (esp
given it may override a higher precision arch-specific function). But
from the perspective of this being a generic RTC function, instead of an
per-arch implementation, it does seem reasonable.

Some further notes below.


> Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
> ---
> drivers/rtc/Kconfig | 8 ++++++++
> drivers/rtc/Makefile | 1 +
> drivers/rtc/systohc.c | 30 ++++++++++++++++++++++++++++++
> include/linux/time.h | 1 +
> kernel/time/ntp.c | 12 ++++++++++--
> 5 files changed, 50 insertions(+), 2 deletions(-)
> create mode 100644 drivers/rtc/systohc.c
>
> I saw on Google an older version of a similar patch to this, but I
> couldn't find any indication what happened to it. So here is a
> slightly different take, tested on 3.7.
>
> I've been running basically this idea buried in PPC platform specific
> code since 2.6.16..
>
> diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
> index 19c03ab..30a866a 100644
> --- a/drivers/rtc/Kconfig
> +++ b/drivers/rtc/Kconfig
> @@ -48,6 +48,14 @@ config RTC_HCTOSYS_DEVICE
> sleep states. Do not specify an RTC here unless it stays powered
> during all this system's supported sleep states.
>
> +config RTC_SYSTOHC
> + bool "Set the RTC time based on NTP synchronization"
> + default y
> + help
> + If you say yes here, the system time (wall clock) will be stored
> + in the RTC specified by RTC_HCTOSYS_DEVICE approximately every 11
> + minutes if the NTP status is synchronized.
> +
Nit: Does this need to depend on RTC_HCTOSYS_DEVICE being set?

Hrm. So on architectures that support GENERIC_CMOS_UPDATE already, this
creates a duplicated code path that is slightly different. I'd like to
avoid this if possible. Since you're plugging
rtc_update_persistent_clock into the GENERIC_CMOS_UPDATE code, we can't
just have this option depend on !GENERIC_CMOS_UPDATE.

So this might need a slightly deeper rework?
I'd suggest the following:
1) Convert GENERIC_CMOS_UPDATE into SUPPORTS_UPDATE_PERSISTENT_CLOCK.
2) Add RTC_SYSTOHC but make it depend on !SUPPORTS_UPDATE_PERSISTENT_CLOCK


> diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
> index 24174b4..f79ab16 100644
> --- a/kernel/time/ntp.c
> +++ b/kernel/time/ntp.c
> @@ -483,7 +483,15 @@ out:
> return leap;
> }
>
> -#ifdef CONFIG_GENERIC_CMOS_UPDATE
> +#if defined(CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC)
> +
> +/* Only do one, if using CONFIG_RTC_SYSTOHC then the platform function
> + * might be mapped to the RTC code already. */
> +#ifdef CONFIG_RTC_SYSTOHC
> +#define __update_persistent_clock rtc_update_persistent_clock
> +#else
> +#define __update_persistent_clock update_persistent_clock
> +#endif
Also, maybe this could be simplified, using a weak function that calls
rtc_update_persistent_clock by default?
That way if there is an arch specific implementation, we will prioritize
that one with less ifdef logic.

thanks
-john



\
 
 \ /
  Last update: 2012-12-12 21:01    [W:0.544 / U:0.076 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site