From: Jan Beulich Date: Thu, 22 Apr 2021 11:26:26 +0000 (+0200) Subject: x86/time: yield to hyperthreads after updating TSC during rendezvous X-Git-Tag: archive/raspbian/4.16.0+51-g0941d6cb-1+rpi1~2^2~42^2~659 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f1a042b9829687affabb95c7c1cbcde29f1d36bd;p=xen.git x86/time: yield to hyperthreads after updating TSC during rendezvous Since we'd like the updates to be done as synchronously as possible, make an attempt at yielding immediately after the TSC write. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monné --- diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index e92365f5bd..5578b7b3a2 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1708,7 +1708,14 @@ static void time_calibration_tsc_rendezvous(void *_r) atomic_inc(&r->semaphore); if ( i == 0 ) + { write_tsc(master_tsc); + /* + * Try to give our hyperthread(s), if any, a chance to do + * the same as instantly as possible. + */ + cpu_relax(); + } while ( atomic_read(&r->semaphore) != (2*total_cpus - 1) ) cpu_relax(); @@ -1730,7 +1737,14 @@ static void time_calibration_tsc_rendezvous(void *_r) } if ( i == 0 ) + { write_tsc(master_tsc); + /* + * Try to give our hyperthread(s), if any, a chance to do + * the same as instantly as possible. + */ + cpu_relax(); + } atomic_inc(&r->semaphore); while ( atomic_read(&r->semaphore) > total_cpus )