All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Beulich <jbeulich@suse.com>
To: James Dingwall <james-xen@dingwall.me.uk>
Cc: alexander.rossa@ncr.com, xen-devel@lists.xenproject.org,
	"Andrew Cooper" <andrew.cooper3@citrix.com>,
	"Roger Pau Monné" <roger.pau@citrix.com>
Subject: Re: xen 4.14.3 incorrect (~3x) cpu frequency reported
Date: Mon, 10 Jan 2022 08:52:55 +0100	[thread overview]
Message-ID: <c3b5ada4-a396-719d-79e9-6cae44b949e0@suse.com> (raw)
In-Reply-To: <78540c18-c54e-07e8-c099-d7bfd29bea91@suse.com>

On 07.01.2022 12:39, Jan Beulich wrote:
> --- a/xen/arch/x86/time.c
> +++ b/xen/arch/x86/time.c
> @@ -378,8 +378,9 @@ static u64 read_hpet_count(void)
>  
>  static int64_t __init init_hpet(struct platform_timesource *pts)
>  {
> -    uint64_t hpet_rate, start;
> +    uint64_t hpet_rate, start, expired;
>      uint32_t count, target;
> +unsigned int i;//temp
>  
>      if ( hpet_address && strcmp(opt_clocksource, pts->id) &&
>           cpuidle_using_deep_cstate() )
> @@ -415,16 +416,35 @@ static int64_t __init init_hpet(struct p
>  
>      pts->frequency = hpet_rate;
>  
> +for(i = 0; i < 16; ++i) {//temp
>      count = hpet_read32(HPET_COUNTER);
>      start = rdtsc_ordered();
>      target = count + CALIBRATE_VALUE(hpet_rate);
>      if ( target < count )
>          while ( hpet_read32(HPET_COUNTER) >= count )
>              continue;
> -    while ( hpet_read32(HPET_COUNTER) < target )
> +    while ( (count = hpet_read32(HPET_COUNTER)) < target )
>          continue;

Unlike I first thought but matching my earlier reply, this only reduces
the likelihood of encountering an issue. In particular, a long-duration
event ahead of the final HPET read above would be covered, but ...

> -    return (rdtsc_ordered() - start) * CALIBRATE_FRAC;
> +    expired = rdtsc_ordered() - start;

... such an event occurring between the final HPET read and the TSC
read would still be an issue. So far I've only been able to think of an
ugly way to further reduce likelihood for this window, but besides that
neither being neat nor excluding the possibility altogether, I have to
point out that we have the same issue in a number of other places:
Back-to-back reads of platform timer and TSC are assumed to happen
close together elsewhere as well.

Cc-ing other x86 maintainers to see whether they have any helpful
thoughts ...

Jan



  parent reply	other threads:[~2022-01-10  7:53 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-21  9:29 xen 4.11.4 incorrect (~3x) cpu frequency reported James Dingwall
2021-07-21 10:59 ` Jan Beulich
2021-07-26 12:33   ` James Dingwall
2021-11-05 12:50     ` Jan Beulich
2021-11-05 15:25       ` James Dingwall
2022-01-06 15:08         ` xen 4.14.3 " James Dingwall
2022-01-06 16:00           ` Jan Beulich
2022-01-07 11:51             ` Andrew Cooper
2022-01-07 11:39           ` Jan Beulich
2022-01-07 16:37             ` James Dingwall
2022-01-10  7:52             ` Jan Beulich [this message]
2022-01-10 14:49               ` Roger Pau Monné
2022-01-10 15:04                 ` Jan Beulich
2022-01-10 12:37             ` Roger Pau Monné
2022-01-10 13:11               ` Jan Beulich
2022-01-10 15:43                 ` Andrew Cooper
2022-01-10 17:04                   ` Jan Beulich
2022-01-11  5:32                     ` Juergen Gross
2022-01-11  7:09                       ` Jan Beulich
2022-01-11  7:23                     ` Jan Beulich
2022-01-12 16:55               ` Jan Beulich

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=c3b5ada4-a396-719d-79e9-6cae44b949e0@suse.com \
    --to=jbeulich@suse.com \
    --cc=alexander.rossa@ncr.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=james-xen@dingwall.me.uk \
    --cc=roger.pau@citrix.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.