Message ID | 1458231136-13457-5-git-send-email-joao.m.martins@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 17/03/16 16:12, Joao Martins wrote: > To fetch the last read from the clocksource which was used to > calculate system_time. In the case of clocksource=tsc we will > use it to set tsc_timestamp. > > Signed-off-by: Joao Martins <joao.m.martins@oracle.com> Again, just minor style issues. Reviewed-by Andrew Cooper <andrew.cooper3@citrix.com> > --- > Cc: Keir Fraser <keir@xen.org> > Cc: Jan Beulich <jbeulich@suse.com> > Cc: Andrew Cooper <andrew.cooper3@citrix.com> > --- > xen/arch/x86/time.c | 16 ++++++++++------ > 1 file changed, 10 insertions(+), 6 deletions(-) > > diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c > index 5af8902..89c35d0 100644 > --- a/xen/arch/x86/time.c > +++ b/xen/arch/x86/time.c > @@ -508,6 +508,7 @@ static s_time_t stime_platform_stamp; /* System time at below platform time */ > static u64 platform_timer_stamp; /* Platform time at above system time */ > static u64 plt_stamp64; /* 64-bit platform counter stamp */ > static u64 plt_stamp; /* hardware-width platform counter stamp */ > +static u64 plt_stamp_counter; /* last read since read_counter */ This can have its scope reduced to within read_platform_stime() > static struct timer plt_overflow_timer; > > static s_time_t __read_platform_stime(u64 platform_time) > @@ -566,7 +567,7 @@ static void plt_overflow(void *unused) > set_timer(&plt_overflow_timer, NOW() + plt_overflow_period); > } > > -static s_time_t read_platform_stime(void) > +static s_time_t read_platform_stime(u64 *stamp) > { > u64 count; > s_time_t stime; > @@ -574,8 +575,11 @@ static s_time_t read_platform_stime(void) > ASSERT(!local_irq_is_enabled()); > > spin_lock(&platform_timer_lock); > - count = plt_stamp64 + ((plt_src.read_counter() - plt_stamp) & plt_mask); > + plt_stamp_counter = plt_src.read_counter(); > + count = plt_stamp64 + ((plt_stamp_counter - plt_stamp) & plt_mask); > stime = __read_platform_stime(count); > + if (stamp) Spaces. ~Andrew
On 03/18/2016 08:34 PM, Andrew Cooper wrote: > On 17/03/16 16:12, Joao Martins wrote: >> To fetch the last read from the clocksource which was used to >> calculate system_time. In the case of clocksource=tsc we will >> use it to set tsc_timestamp. >> >> Signed-off-by: Joao Martins <joao.m.martins@oracle.com> > > Again, just minor style issues. > > Reviewed-by Andrew Cooper <andrew.cooper3@citrix.com> > All fixed, though I found one change missing in this series, specifically on time_calibration_std_rendezvous. Otherwise this commit would break compilation. See chunk below for the change I am adding: @@ -1377,7 +1380,7 @@ static void time_calibration_std_rendezvous(void *_r) { while ( atomic_read(&r->semaphore) != (total_cpus - 1) ) cpu_relax(); - r->master_stime = read_platform_stime(); + r->master_stime = read_platform_stime(NULL); mb(); /* write r->master_stime /then/ signal */ atomic_inc(&r->semaphore); } Having this fixed, could I still keep your Reviewed-by? >> --- >> Cc: Keir Fraser <keir@xen.org> >> Cc: Jan Beulich <jbeulich@suse.com> >> Cc: Andrew Cooper <andrew.cooper3@citrix.com> >> --- >> xen/arch/x86/time.c | 16 ++++++++++------ >> 1 file changed, 10 insertions(+), 6 deletions(-) >> >> diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c >> index 5af8902..89c35d0 100644 >> --- a/xen/arch/x86/time.c >> +++ b/xen/arch/x86/time.c >> @@ -508,6 +508,7 @@ static s_time_t stime_platform_stamp; /* System time at below platform time */ >> static u64 platform_timer_stamp; /* Platform time at above system time */ >> static u64 plt_stamp64; /* 64-bit platform counter stamp */ >> static u64 plt_stamp; /* hardware-width platform counter stamp */ >> +static u64 plt_stamp_counter; /* last read since read_counter */ > > This can have its scope reduced to within read_platform_stime() > >> static struct timer plt_overflow_timer; >> >> static s_time_t __read_platform_stime(u64 platform_time) >> @@ -566,7 +567,7 @@ static void plt_overflow(void *unused) >> set_timer(&plt_overflow_timer, NOW() + plt_overflow_period); >> } >> >> -static s_time_t read_platform_stime(void) >> +static s_time_t read_platform_stime(u64 *stamp) >> { >> u64 count; >> s_time_t stime; >> @@ -574,8 +575,11 @@ static s_time_t read_platform_stime(void) >> ASSERT(!local_irq_is_enabled()); >> >> spin_lock(&platform_timer_lock); >> - count = plt_stamp64 + ((plt_src.read_counter() - plt_stamp) & plt_mask); >> + plt_stamp_counter = plt_src.read_counter(); >> + count = plt_stamp64 + ((plt_stamp_counter - plt_stamp) & plt_mask); >> stime = __read_platform_stime(count); >> + if (stamp) > > Spaces. > > ~Andrew >
On 21/03/16 11:45, Joao Martins wrote: > > All fixed, though I found one change missing in this series, specifically on > time_calibration_std_rendezvous. Otherwise this commit would break compilation. > See chunk below for the change I am adding: > > @@ -1377,7 +1380,7 @@ static void time_calibration_std_rendezvous(void *_r) > { > while ( atomic_read(&r->semaphore) != (total_cpus - 1) ) > cpu_relax(); > - r->master_stime = read_platform_stime(); > + r->master_stime = read_platform_stime(NULL); > mb(); /* write r->master_stime /then/ signal */ > atomic_inc(&r->semaphore); > } > > Having this fixed, could I still keep your Reviewed-by? Yes - that's fine. ~Andrew
diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index 5af8902..89c35d0 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -508,6 +508,7 @@ static s_time_t stime_platform_stamp; /* System time at below platform time */ static u64 platform_timer_stamp; /* Platform time at above system time */ static u64 plt_stamp64; /* 64-bit platform counter stamp */ static u64 plt_stamp; /* hardware-width platform counter stamp */ +static u64 plt_stamp_counter; /* last read since read_counter */ static struct timer plt_overflow_timer; static s_time_t __read_platform_stime(u64 platform_time) @@ -566,7 +567,7 @@ static void plt_overflow(void *unused) set_timer(&plt_overflow_timer, NOW() + plt_overflow_period); } -static s_time_t read_platform_stime(void) +static s_time_t read_platform_stime(u64 *stamp) { u64 count; s_time_t stime; @@ -574,8 +575,11 @@ static s_time_t read_platform_stime(void) ASSERT(!local_irq_is_enabled()); spin_lock(&platform_timer_lock); - count = plt_stamp64 + ((plt_src.read_counter() - plt_stamp) & plt_mask); + plt_stamp_counter = plt_src.read_counter(); + count = plt_stamp64 + ((plt_stamp_counter - plt_stamp) & plt_mask); stime = __read_platform_stime(count); + if (stamp) + *stamp = plt_stamp_counter; spin_unlock(&platform_timer_lock); return stime; @@ -693,7 +697,7 @@ void cstate_restore_tsc(void) if ( boot_cpu_has(X86_FEATURE_NONSTOP_TSC) ) return; - write_tsc(stime2tsc(read_platform_stime())); + write_tsc(stime2tsc(read_platform_stime(NULL))); } /*************************************************************************** @@ -1012,7 +1016,7 @@ int cpu_frequency_change(u64 freq) local_irq_disable(); /* Platform time /first/, as we may be delayed by platform_timer_lock. */ - t->stime_master_stamp = read_platform_stime(); + t->stime_master_stamp = read_platform_stime(NULL); /* TSC-extrapolated time may be bogus after frequency change. */ /*t->stime_local_stamp = get_s_time();*/ t->stime_local_stamp = t->stime_master_stamp; @@ -1330,7 +1334,7 @@ static void time_calibration_tsc_rendezvous(void *_r) if ( r->master_stime == 0 ) { - r->master_stime = read_platform_stime(); + r->master_stime = read_platform_stime(NULL); r->master_tsc_stamp = rdtsc(); } atomic_inc(&r->semaphore); @@ -1422,7 +1426,7 @@ void init_percpu_time(void) local_irq_save(flags); t->local_tsc_stamp = rdtsc(); - now = read_platform_stime(); + now = read_platform_stime(NULL); local_irq_restore(flags); t->stime_master_stamp = now;
To fetch the last read from the clocksource which was used to calculate system_time. In the case of clocksource=tsc we will use it to set tsc_timestamp. Signed-off-by: Joao Martins <joao.m.martins@oracle.com> --- Cc: Keir Fraser <keir@xen.org> Cc: Jan Beulich <jbeulich@suse.com> Cc: Andrew Cooper <andrew.cooper3@citrix.com> --- xen/arch/x86/time.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)