[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YJE+oXuZ7KxxSMLK@hirez.programming.kicks-ass.net>
Date: Tue, 4 May 2021 14:31:29 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Frederic Weisbecker <frederic@...nel.org>
Cc: Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>,
"Rafael J . Wysocki" <rafael.j.wysocki@...el.com>,
Yunfeng Ye <yeyunfeng@...wei.com>,
Marcelo Tosatti <mtosatti@...hat.com>
Subject: Re: [PATCH 1/8] tick/nohz: Evaluate the CPU expression after the
static key
On Thu, Apr 22, 2021 at 02:01:51PM +0200, Frederic Weisbecker wrote:
> From: Peter Zijlstra <peterz@...radead.org>
>
> When tick_nohz_full_cpu() is called with smp_processor_id(), the latter
> is unconditionally evaluated whether the static key is on or off. It is
> not necessary in the off-case though, so make sure the cpu expression
> is executed at the last moment.
>
> Illustrate with the following test function:
>
> int tick_nohz_test(void)
> {
> return tick_nohz_full_cpu(smp_processor_id());
> }
>
> The resulting code before was:
>
> mov %gs:0x7eea92d1(%rip),%eax # smp_processor_id() fetch
> nopl 0x0(%rax,%rax,1)
> xor %eax,%eax
> retq
> cmpb $0x0,0x29d393a(%rip) # <tick_nohz_full_running>
> je tick_nohz_test+0x29 # jump to below eax clear
> mov %eax,%eax
> bt %rax,0x29d3936(%rip) # <tick_nohz_full_mask>
> setb %al
> movzbl %al,%eax
> retq
> xor %eax,%eax
> retq
>
> Now it becomes:
>
> nopl 0x0(%rax,%rax,1)
> xor %eax,%eax
> retq
> cmpb $0x0,0x29d3871(%rip) # <tick_nohz_full_running>
> je tick_nohz_test+0x29 # jump to below eax clear
> mov %gs:0x7eea91f0(%rip),%eax # smp_processor_id() fetch, after static key
> mov %eax,%eax
> bt %rax,0x29d3866(%rip) # <tick_nohz_full_mask>
> setb %al
> movzbl %al,%eax
> retq
> xor %eax,%eax
> retq
>
> Not-Yet-Signed-off-by: Peter Zijlstra <peterz@...radead.org>
Signed-off-by: Peter Zijlstra <peterz@...radead.org>
Thanks for writing the Changelog.
Powered by blists - more mailing lists