x86/time: introduce helper to fetch Xen wallclock when running as a guest

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>
This commit is contained in:
Roger Pau Monné authored and Jan Beulich committed 2024-09-09 13:41:16 +02:00
1 parent 18053054b7
commit 9f16d4e653
1 file changed
+25 -17
+25 -17
View File
@@ -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
const 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();
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.