Message ID | 20240904153151.83995-2-roger.pau@citrix.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | x86/time: improvements to wallclock logic | expand |
On 04.09.2024 17:31, Roger Pau Monne wrote: > Move the current code in get_wallclock_time() to fetch the Xen wallclock > information from the shared page when running as a guest into a separate > helper. > > No functional change intended. > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com> Still ... > --- a/xen/arch/x86/time.c > +++ b/xen/arch/x86/time.c > @@ -787,6 +787,30 @@ static struct platform_timesource __initdata_cf_clobber plt_xen_timer = > }; > #endif > > +static unsigned long read_xen_wallclock(void) > +{ > +#ifdef CONFIG_XEN_GUEST > + struct shared_info *sh_info = XEN_shared_info; ... I'd like to switch this to pointer-to-const while committing, if okay with you. Jan
On Thu, Sep 05, 2024 at 05:45:20PM +0200, Jan Beulich wrote: > On 04.09.2024 17:31, Roger Pau Monne wrote: > > Move the current code in get_wallclock_time() to fetch the Xen wallclock > > information from the shared page when running as a guest into a separate > > helper. > > > > No functional change intended. > > > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> > > Acked-by: Jan Beulich <jbeulich@suse.com> > > Still ... > > > --- a/xen/arch/x86/time.c > > +++ b/xen/arch/x86/time.c > > @@ -787,6 +787,30 @@ static struct platform_timesource __initdata_cf_clobber plt_xen_timer = > > }; > > #endif > > > > +static unsigned long read_xen_wallclock(void) > > +{ > > +#ifdef CONFIG_XEN_GUEST > > + struct shared_info *sh_info = XEN_shared_info; > > ... I'd like to switch this to pointer-to-const while committing, if okay > with you. Oh, sure. Thanks, Roger.
diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index a97d78484105..1959cc4a4f2b 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -787,6 +787,30 @@ static struct platform_timesource __initdata_cf_clobber plt_xen_timer = }; #endif +static unsigned long read_xen_wallclock(void) +{ +#ifdef CONFIG_XEN_GUEST + struct shared_info *sh_info = XEN_shared_info; + uint32_t wc_version; + uint64_t wc_sec; + + ASSERT(xen_guest); + + do { + wc_version = sh_info->wc_version & ~1; + smp_rmb(); + + wc_sec = sh_info->wc_sec; + smp_rmb(); + } while ( wc_version != sh_info->wc_version ); + + return wc_sec + read_xen_timer() / 1000000000; +#else + ASSERT_UNREACHABLE(); + return 0; +#endif +} + #ifdef CONFIG_HYPERV_GUEST /************************************************************ * HYPER-V REFERENCE TSC @@ -1497,24 +1521,8 @@ void rtc_guest_write(unsigned int port, unsigned int data) static unsigned long get_wallclock_time(void) { -#ifdef CONFIG_XEN_GUEST if ( xen_guest ) - { - struct shared_info *sh_info = XEN_shared_info; - uint32_t wc_version; - uint64_t wc_sec; - - do { - wc_version = sh_info->wc_version & ~1; - smp_rmb(); - - wc_sec = sh_info->wc_sec; - smp_rmb(); - } while ( wc_version != sh_info->wc_version ); - - return wc_sec + read_xen_timer() / 1000000000; - } -#endif + return read_xen_wallclock(); return get_cmos_time(); }
Move the current code in get_wallclock_time() to fetch the Xen wallclock information from the shared page when running as a guest into a separate helper. No functional change intended. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> --- Changes since v3: - Place ifdef blocks inside the function. Changes since v2: - New in this version. --- xen/arch/x86/time.c | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-)