From: Peter Zijlstra <peterz@infradead.org>
To: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: David Woodhouse <dwmw2@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org, Dave Hansen <dave.hansen@intel.com>,
Ashok Raj <ashok.raj@intel.com>,
Tim Chen <tim.c.chen@linux.intel.com>,
Andy Lutomirski <luto@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Greg KH <gregkh@linuxfoundation.org>,
Andrea Arcangeli <aarcange@redhat.com>,
Andi Kleen <ak@linux.intel.com>,
Arjan Van De Ven <arjan.van.de.ven@intel.com>,
Dan Williams <dan.j.williams@intel.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Jun Nakajima <jun.nakajima@intel.com>,
Asit Mallick <asit.k.mallick@intel.com>,
Jason Baron <jbaron@akamai.com>
Subject: Re: [PATCH 20/24] objtool: Another static block fail
Date: Tue, 30 Jan 2018 10:56:53 +0100 [thread overview]
Message-ID: <20180130095653.GZ2269@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20180129225252.bi2etgk3eqprcv3x@treble>
On Mon, Jan 29, 2018 at 04:52:53PM -0600, Josh Poimboeuf wrote:
> On Tue, Jan 23, 2018 at 04:25:59PM +0100, Peter Zijlstra wrote:
> > I've observed GCC generate:
> >
> > sym:
> > NOP/JMP 1f (static_branch)
> > JMP 2f
> > 1: /* crud */
> > JMP 3f
> > 2: /* other crud */
> >
> > 3: RETQ
> >
> >
> > This means we need to follow unconditional jumps; be conservative and
> > only follow if its a unique jump.
> >
> > (I've not yet figured out which CONFIG option is responsible for this,
> > a normal defconfig build does not generate crap like this)
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>
> Any chance we can just add a compiler barrier to the assertion macro and
> avoid all this grow_static_blocks() mess? It seems a bit... fragile.
It is all rather unfortunate yes.. :/ I've tried to keep the grow stuff
as conservative as possible while still covering all the weirdness I
found. And while it was great fun, I do agree it would be much better to
not have to do this.
You're thinking of something like this?
static __always_inline void arch_static_assert(void)
{
asm volatile ("1:\n\t"
".pushsection .discard.jump_assert \n\t"
_ASM_ALIGN "\n\t"
_ASM_PTR "1b \n\t"
- ".popsection \n\t");
+ ".popsection \n\t" ::: "memory");
}
That doesn't seem to matter much; see here:
static void
ttwu_stat(struct task_struct *p, int cpu, int wake_flags)
{
struct rq *rq;
if (!schedstat_enabled())
return;
rq = this_rq();
$ objdump -dr build/kernel/sched/core.o
0000000000001910 <ttwu_stat>:
1910: e8 00 00 00 00 callq 1915 <ttwu_stat+0x5>
1911: R_X86_64_PC32 __fentry__-0x4
1915: 41 57 push %r15
1917: 41 56 push %r14
1919: 41 55 push %r13
191b: 41 54 push %r12
191d: 55 push %rbp
191e: 53 push %rbx
191f: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
1924: eb 25 jmp 194b <ttwu_stat+0x3b>
1926: 41 89 d5 mov %edx,%r13d
1929: 41 89 f4 mov %esi,%r12d
192c: 48 89 fb mov %rdi,%rbx
192f: 49 c7 c6 00 00 00 00 mov $0x0,%r14
1932: R_X86_64_32S runqueues
$ objdump -j __jump_table -sr build/kernel/sched.o
0000000000000048 R_X86_64_64 .text+0x000000000000191f
0000000000000050 R_X86_64_64 .text+0x0000000000001926
0000000000000058 R_X86_64_64 sched_schedstats
$ objdump -j .discard.jump_assert -dr build/kernel/sched.o
0000000000000000 R_X86_64_64 .text+0x000000000000192f
It still lifts random crud over that first initial statement (the rq
load).
next prev parent reply other threads:[~2018-01-30 9:56 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-23 15:25 [PATCH 00/24] objtool: retpoline and asm-goto validation Peter Zijlstra
2018-01-23 15:25 ` [PATCH 01/24] objtool: Use existing global variables for options Peter Zijlstra
2018-01-23 15:25 ` [PATCH 02/24] objtool: Add retpoline validation Peter Zijlstra
2018-01-23 18:21 ` Borislav Petkov
2018-01-26 9:54 ` David Woodhouse
2018-01-23 15:25 ` [PATCH 03/24] x86/paravirt: Annotate indirect calls Peter Zijlstra
2018-01-25 10:02 ` David Woodhouse
2018-01-25 10:22 ` Peter Zijlstra
2018-01-25 10:26 ` Juergen Gross
2018-01-25 10:52 ` David Woodhouse
2018-01-25 11:35 ` Peter Zijlstra
2018-01-26 9:57 ` David Woodhouse
2018-01-29 17:58 ` Josh Poimboeuf
2018-01-29 18:09 ` David Woodhouse
2018-01-29 18:17 ` Peter Zijlstra
2018-01-29 18:38 ` Josh Poimboeuf
2018-01-29 19:21 ` Peter Zijlstra
2018-01-30 16:02 ` Josh Poimboeuf
2018-01-31 4:13 ` [PATCH] x86/paravirt: Remove 'noreplace-paravirt' cmdline option Josh Poimboeuf
2018-01-31 5:59 ` Juergen Gross
2018-01-31 9:42 ` [tip:x86/pti] " tip-bot for Josh Poimboeuf
2018-01-23 15:25 ` [PATCH 04/24] x86,nospec: Annotate indirect calls/jumps Peter Zijlstra
2018-01-26 10:19 ` David Woodhouse
2018-01-29 17:44 ` Peter Zijlstra
2018-01-23 15:25 ` [PATCH 05/24] x86: Annotate indirect jump in head_64.S Peter Zijlstra
2018-01-26 10:24 ` David Woodhouse
2018-01-23 15:25 ` [PATCH 06/24] x86,kvm: Fix indirect calls in emulator Peter Zijlstra
2018-01-23 20:28 ` Borislav Petkov
2018-01-23 20:48 ` David Woodhouse
2018-01-24 10:35 ` Peter Zijlstra
2018-01-24 10:43 ` Paolo Bonzini
2018-01-25 9:34 ` Peter Zijlstra
2018-01-25 9:49 ` David Woodhouse
2018-01-26 10:57 ` Paolo Bonzini
2018-01-23 15:25 ` [PATCH 07/24] x86,vmx: Fix indirect call Peter Zijlstra
2018-01-25 9:36 ` Peter Zijlstra
2018-01-23 15:25 ` [PATCH 08/24] x86,sme: Annotate " Peter Zijlstra
2018-01-26 10:37 ` David Woodhouse
2018-01-29 17:49 ` Peter Zijlstra
2018-01-29 17:50 ` Peter Zijlstra
2018-01-31 9:29 ` Peter Zijlstra
2018-01-31 15:04 ` Josh Poimboeuf
2018-01-31 16:00 ` Peter Zijlstra
2018-01-23 15:25 ` [PATCH 09/24] jump_label: Add branch hints to static_branch_{un,}likely() Peter Zijlstra
2018-01-24 18:46 ` Borislav Petkov
2018-01-23 15:25 ` [PATCH 10/24] sched: Optimize ttwu_stat() Peter Zijlstra
2018-01-23 15:25 ` [PATCH 11/24] x86: Reindent _static_cpu_has Peter Zijlstra
2018-01-23 15:25 ` [PATCH 12/24] x86: Update _static_cpu_has to use all named variables Peter Zijlstra
2018-01-25 19:31 ` Borislav Petkov
2018-01-23 15:25 ` [PATCH 13/24] objtool: Implement base jump_assert support Peter Zijlstra
2018-01-26 10:45 ` David Woodhouse
2018-01-23 15:25 ` [PATCH 14/24] x86: Add a type field to alt_instr Peter Zijlstra
2018-01-23 15:25 ` [PATCH 15/24] x86: Annotate static_cpu_has alternative Peter Zijlstra
2018-01-23 15:25 ` [PATCH 16/24] objtool: Implement jump_assert for _static_cpu_has() Peter Zijlstra
2018-01-23 15:25 ` [PATCH 17/24] objtool: Introduce special_type Peter Zijlstra
2018-01-23 15:25 ` [PATCH 18/24] objtool: More complex static jump implementation Peter Zijlstra
2018-01-23 15:25 ` [PATCH 19/24] objtool: Even more complex static block checks Peter Zijlstra
2018-01-23 15:25 ` [PATCH 20/24] objtool: Another static block fail Peter Zijlstra
2018-01-29 22:52 ` Josh Poimboeuf
2018-01-30 9:56 ` Peter Zijlstra [this message]
2018-01-31 3:12 ` Josh Poimboeuf
2018-01-31 10:01 ` Peter Zijlstra
2018-01-31 10:07 ` David Woodhouse
2018-01-31 10:27 ` Peter Zijlstra
2018-01-23 15:26 ` [PATCH 21/24] objtool: Skip static assert when KCOV/KASAN Peter Zijlstra
2018-01-23 15:26 ` [PATCH 22/24] x86/jump_label: Implement arch_static_assert() Peter Zijlstra
2018-01-23 15:26 ` [PATCH 23/24] x86: Force asm-goto Peter Zijlstra
2018-01-23 15:26 ` [PATCH 24/24] x86: Remove FAST_FEATURE_TESTS Peter Zijlstra
2018-01-23 15:42 ` [PATCH 00/24] objtool: retpoline and asm-goto validation Peter Zijlstra
2018-01-23 15:57 ` David Woodhouse
2018-01-23 16:03 ` Peter Zijlstra
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=20180130095653.GZ2269@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=aarcange@redhat.com \
--cc=ak@linux.intel.com \
--cc=arjan.van.de.ven@intel.com \
--cc=ashok.raj@intel.com \
--cc=asit.k.mallick@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave.hansen@intel.com \
--cc=dwmw2@infradead.org \
--cc=gregkh@linuxfoundation.org \
--cc=jbaron@akamai.com \
--cc=jpoimboe@redhat.com \
--cc=jun.nakajima@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=pbonzini@redhat.com \
--cc=tglx@linutronix.de \
--cc=tim.c.chen@linux.intel.com \
--cc=torvalds@linux-foundation.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.