From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Wei Liu" <wl@xen.org>, "Roger Pau Monné" <roger.pau@citrix.com>,
"Claudemir Todo Bom" <claudemir@todobom.com>,
"Ian Jackson" <iwj@xenproject.org>
Subject: [PATCH v3 1/4] x86/time: change initiation of the calibration timer
Date: Tue, 9 Feb 2021 13:54:48 +0100 [thread overview]
Message-ID: <9068daae-0f27-a724-5062-c02e5ebb4593@suse.com> (raw)
In-Reply-To: <bb7494b9-f4d1-f0c0-2fb2-5201559c1962@suse.com>
Setting the timer a second (EPOCH) into the future at a random point
during boot (prior to bringing up APs and prior to launching Dom0) does
not yield predictable results: The timer may expire while we're still
bringing up APs (too early) or when Dom0 already boots (too late).
Instead invoke the timer handler function explicitly at a predictable
point in time, once we've established the rendezvous function to use
(and hence also once all APs are online). This will, through the raising
and handling of TIMER_SOFTIRQ, then also have the effect of arming the
timer.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
--- a/xen/arch/x86/time.c
+++ b/xen/arch/x86/time.c
@@ -854,9 +854,7 @@ static void resume_platform_timer(void)
static void __init reset_platform_timer(void)
{
- /* Deactivate any timers running */
kill_timer(&plt_overflow_timer);
- kill_timer(&calibration_timer);
/* Reset counters and stamps */
spin_lock_irq(&platform_timer_lock);
@@ -1956,19 +1954,13 @@ static void __init reset_percpu_time(voi
t->stamp.master_stime = t->stamp.local_stime;
}
-static void __init try_platform_timer_tail(bool late)
+static void __init try_platform_timer_tail(void)
{
init_timer(&plt_overflow_timer, plt_overflow, NULL, 0);
plt_overflow(NULL);
platform_timer_stamp = plt_stamp64;
stime_platform_stamp = NOW();
-
- if ( !late )
- init_percpu_time();
-
- init_timer(&calibration_timer, time_calibration, NULL, 0);
- set_timer(&calibration_timer, NOW() + EPOCH);
}
/* Late init function, after all cpus have booted */
@@ -2009,10 +2001,13 @@ static int __init verify_tsc_reliability
time_calibration_rendezvous_fn = time_calibration_nop_rendezvous;
/* Finish platform timer switch. */
- try_platform_timer_tail(true);
+ try_platform_timer_tail();
printk("Switched to Platform timer %s TSC\n",
freq_string(plt_src.frequency));
+
+ time_calibration(NULL);
+
return 0;
}
}
@@ -2033,6 +2028,8 @@ static int __init verify_tsc_reliability
!boot_cpu_has(X86_FEATURE_TSC_RELIABLE) )
time_calibration_rendezvous_fn = time_calibration_tsc_rendezvous;
+ time_calibration(NULL);
+
return 0;
}
__initcall(verify_tsc_reliability);
@@ -2048,7 +2045,11 @@ int __init init_xen_time(void)
do_settime(get_wallclock_time(), 0, NOW());
/* Finish platform timer initialization. */
- try_platform_timer_tail(false);
+ try_platform_timer_tail();
+
+ init_percpu_time();
+
+ init_timer(&calibration_timer, time_calibration, NULL, 0);
/*
* Setup space to track per-socket TSC_ADJUST values. Don't fiddle with
next prev parent reply other threads:[~2021-02-09 12:55 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-09 12:53 [PATCH v3 0/4] x86/time: calibration rendezvous adjustments Jan Beulich
2021-02-09 12:54 ` Jan Beulich [this message]
2021-02-09 12:55 ` [PATCH v3 2/4] x86/time: adjust time recording in time_calibration_tsc_rendezvous() Jan Beulich
2021-02-09 12:55 ` [PATCH v3 3/4] x86/time: don't move TSC backwards " Jan Beulich
2021-02-09 12:57 ` [PATCH RFC v3 4/4] x86/time: re-arrange struct calibration_rendezvous Jan Beulich
2021-02-24 9:29 ` Jan Beulich
2021-02-09 13:02 ` [PATCH v3 0/4] x86/time: calibration rendezvous adjustments Jan Beulich
2021-02-17 8:27 ` Ping: " Jan Beulich
2021-02-19 16:06 ` Ian Jackson
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=9068daae-0f27-a724-5062-c02e5ebb4593@suse.com \
--to=jbeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=claudemir@todobom.com \
--cc=iwj@xenproject.org \
--cc=roger.pau@citrix.com \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.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).