linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Andy Lutomirski <luto@kernel.org>, X86 ML <x86@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Matt Rickard <matt@softrans.com.au>,
	Stephen Boyd <sboyd@kernel.org>,
	John Stultz <john.stultz@linaro.org>,
	Florian Weimer <fweimer@redhat.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	devel@linuxdriverproject.org,
	Linux Virtualization <virtualization@lists.linux-foundation.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Arnd Bergmann <arnd@arndb.de>, Juergen Gross <jgross@suse.com>
Subject: Re: [patch 09/11] x86/vdso: Simplify the invalid vclock case
Date: Mon, 17 Sep 2018 12:25:38 -0700	[thread overview]
Message-ID: <CALCETrXh70oFHfT0Z-JXcnAumhAgLqSea5UiPY3WXu=v2GcKTg@mail.gmail.com> (raw)
In-Reply-To: <20180914125118.909646643@linutronix.de>

On Fri, Sep 14, 2018 at 5:50 AM, Thomas Gleixner <tglx@linutronix.de> wrote:
> The code flow for the vclocks is convoluted as it requires the vclocks
> which can be invalidated separately from the vsyscall_gtod_data sequence to
> store the fact in a separate variable. That's inefficient.
>

>  notrace static int do_hres(clockid_t clk, struct timespec *ts)
>  {
>         struct vgtod_ts *base = &gtod->basetime[clk];
>         unsigned int seq;
> -       int mode;
> -       u64 ns;
> +       u64 cycles, ns;
>
>         do {
>                 seq = gtod_read_begin(gtod);
> -               mode = gtod->vclock_mode;
>                 ts->tv_sec = base->sec;
>                 ns = base->nsec;
> -               ns += vgetsns(&mode);
> +               cycles = vgetcyc(gtod->vclock_mode);
> +               if (unlikely((s64)cycles < 0))
> +                       return vdso_fallback_gettime(clk, ts);

i was contemplating this, and I would suggest one of two optimizations:

1. have all the helpers return a struct containing a u64 and a bool,
and use that bool.  The compiler should do okay.

2. Be sneaky.  Later in the series, you do:

                if (unlikely((s64)cycles < 0))
                        return vdso_fallback_gettime(clk, ts);
-               ns += (cycles - gtod->cycle_last) * gtod->mult;
+               if (cycles > last)
+                       ns += (cycles - last) * gtod->mult;

How about:

if (unlikely((s64)cycles <= last)) {
  if (cycles < 0) [or cycles == -1 or whatever]
    return vdso_fallback_gettime;
} else {
  ns += (cycles - last) * gtod->mult;
}

which should actually make this whole mess be essentially free.

Also, I'm not entirely convinced that this "last" thing is needed at
all.  John, what's the scenario under which we need it?

--Andy

--Andy

  reply	other threads:[~2018-09-17 19:26 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-14 12:50 [patch 00/11] x86/vdso: Cleanups, simmplifications and CLOCK_TAI support Thomas Gleixner
2018-09-14 12:50 ` [patch 01/11] clocksource: Provide clocksource_arch_init() Thomas Gleixner
2018-09-14 12:50 ` [patch 02/11] x86/time: Implement clocksource_arch_init() Thomas Gleixner
2018-09-14 15:45   ` Vitaly Kuznetsov
2018-09-15  6:05     ` Thomas Gleixner
2018-09-14 12:50 ` [patch 03/11] x86/vdso: Enforce 64bit clocksource Thomas Gleixner
2018-09-14 12:50 ` [patch 04/11] x86/vdso: Use unsigned int consistently for vsyscall_gtod_data::seq Thomas Gleixner
2018-09-14 12:50 ` [patch 05/11] x86/vdso: Introduce and use vgtod_ts Thomas Gleixner
2018-09-14 12:50 ` [patch 06/11] x86/vdso: Collapse high resolution functions Thomas Gleixner
2018-09-14 12:50 ` [patch 07/11] x86/vdso: Collapse coarse functions Thomas Gleixner
2018-09-14 12:50 ` [patch 08/11] x86/vdso: Replace the clockid switch case Thomas Gleixner
2018-09-14 12:50 ` [patch 09/11] x86/vdso: Simplify the invalid vclock case Thomas Gleixner
2018-09-17 19:25   ` Andy Lutomirski [this message]
2018-09-17 20:12     ` John Stultz
2018-09-18  7:52       ` Thomas Gleixner
2018-09-18  8:30         ` Peter Zijlstra
2018-09-18  8:52           ` Thomas Gleixner
2018-09-18 10:06             ` Thomas Gleixner
2018-09-18 10:41               ` Thomas Gleixner
2018-09-18 12:48                 ` Peter Zijlstra
2018-09-18 13:23                   ` Thomas Gleixner
2018-09-18 13:38                     ` Peter Zijlstra
2018-09-18 15:52                     ` Thomas Gleixner
2018-09-27 14:41                       ` Thomas Gleixner
2018-09-18 14:01         ` Andy Lutomirski
2018-09-18 22:46           ` Thomas Gleixner
2018-09-18 23:03             ` Andy Lutomirski
2018-09-18 23:16               ` Thomas Gleixner
2018-09-27 14:36                 ` Thomas Gleixner
2018-09-27 14:39                   ` Andy Lutomirski
2018-09-19  9:08             ` Rasmus Villemoes
2018-09-19 13:29               ` Thomas Gleixner
2018-09-14 12:50 ` [patch 10/11] x86/vdso: Move cycle_last handling into the caller Thomas Gleixner
2018-09-14 15:26   ` Vitaly Kuznetsov
2018-09-14 12:50 ` [patch 11/11] x66/vdso: Add CLOCK_TAI support Thomas Gleixner
2018-09-14 14:04   ` Andy Lutomirski
2018-09-14 14:27     ` Thomas Gleixner
2018-09-14 14:59       ` Andy Lutomirski
2018-09-16  9:39         ` Thomas Gleixner
2018-09-14 12:56 ` [patch 00/11] x86/vdso: Cleanups, simmplifications and " Florian Weimer
2018-09-14 13:05   ` Thomas Gleixner
2018-09-14 13:06     ` Florian Weimer
2018-09-14 13:19       ` Thomas Gleixner
2018-09-14 13:09   ` Peter Zijlstra
2018-09-14 14:22 ` Arnd Bergmann
2018-09-17 13:00   ` Thomas Gleixner
2018-09-24 21:08     ` Arnd Bergmann
2018-10-03  5:15 ` Andy Lutomirski
2018-10-03  9:22   ` Vitaly Kuznetsov
2018-10-03 10:20     ` Andy Lutomirski
2018-10-03 12:01       ` Vitaly Kuznetsov
2018-10-03 14:20         ` Andy Lutomirski
2018-10-03 15:10           ` Thomas Gleixner
2018-10-03 16:18             ` Andy Lutomirski
2018-10-03 19:06     ` Marcelo Tosatti
2018-10-04  7:54       ` Vitaly Kuznetsov
2018-10-04  8:11         ` Peter Zijlstra
2018-10-04 14:00           ` Andy Lutomirski
2018-10-04 19:31             ` Peter Zijlstra
2018-10-04 20:05               ` Andy Lutomirski
2018-10-04 22:15                 ` Andy Lutomirski
2018-10-06 20:27                   ` Marcelo Tosatti
2018-10-06 22:28                     ` Andy Lutomirski
2018-10-08 15:26                       ` Marcelo Tosatti
2018-10-08 17:38                         ` Andy Lutomirski
2018-10-08 19:36                           ` Marcelo Tosatti
2018-10-09 20:09                             ` Andy Lutomirski
2018-10-11 22:27                               ` Marcelo Tosatti
2018-10-11 23:00                                 ` Andy Lutomirski
2018-10-15 13:39                                   ` Marcelo Tosatti
2018-10-06 20:49                   ` Marcelo Tosatti
2018-10-04 12:00         ` Paolo Bonzini
2018-10-04 14:04           ` Andy Lutomirski
2018-10-05 21:18         ` Marcelo Tosatti
2018-10-03 19:00   ` Marcelo Tosatti
2018-10-03 19:05     ` [patch 00/11] x86/vdso: Cleanups, simmplifications and CLOCK_TAI support\ Marcelo Tosatti
2018-10-03 22:32     ` [patch 00/11] x86/vdso: Cleanups, simmplifications and CLOCK_TAI support Andy Lutomirski
2018-10-04 16:37       ` Marcelo Tosatti
2018-10-04 17:08         ` Andy Lutomirski
2018-10-04 17:28           ` Vitaly Kuznetsov
2018-10-04 20:32 ` Andy Lutomirski

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='CALCETrXh70oFHfT0Z-JXcnAumhAgLqSea5UiPY3WXu=v2GcKTg@mail.gmail.com' \
    --to=luto@kernel.org \
    --cc=arnd@arndb.de \
    --cc=devel@linuxdriverproject.org \
    --cc=fweimer@redhat.com \
    --cc=jgross@suse.com \
    --cc=john.stultz@linaro.org \
    --cc=kys@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matt@softrans.com.au \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=sboyd@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=vkuznets@redhat.com \
    --cc=x86@kernel.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).