From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>,
the arch/x86 maintainers <x86@kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] x86/i386: make sure stack-protector segment base is cache aligned
Date: Thu, 03 Sep 2009 13:41:28 -0700 [thread overview]
Message-ID: <4AA029F8.2070002@goop.org> (raw)
In-Reply-To: <4AA01D4F.1080707@gmail.com>
On 09/03/09 12:47, Eric Dumazet wrote:
> Jeremy Fitzhardinge a écrit :
>
>> The Intel Optimization Reference Guide says:
>>
>> In Intel Atom microarchitecture, the address generation unit
>> assumes that the segment base will be 0 by default. Non-zero
>> segment base will cause load and store operations to experience
>> a delay.
>> - If the segment base isn't aligned to a cache line
>> boundary, the max throughput of memory operations is
>> reduced to one [e]very 9 cycles.
>> [...]
>> Assembly/Compiler Coding Rule 15. (H impact, ML generality)
>> For Intel Atom processors, use segments with base set to 0
>> whenever possible; avoid non-zero segment base address that is
>> not aligned to cache line boundary at all cost.
>>
>> We can't avoid having a non-zero base for the stack-protector segment, but
>> we can make it cache-aligned.
>>
>> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
>>
>> diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
>> index 0bfcf7e..f7d2c8f 100644
>> --- a/arch/x86/include/asm/processor.h
>> +++ b/arch/x86/include/asm/processor.h
>> @@ -403,7 +403,17 @@ extern unsigned long kernel_eflags;
>> extern asmlinkage void ignore_sysret(void);
>> #else /* X86_64 */
>> #ifdef CONFIG_CC_STACKPROTECTOR
>> -DECLARE_PER_CPU(unsigned long, stack_canary);
>> +/*
>> + * Make sure stack canary segment base is cached-aligned:
>> + * "For Intel Atom processors, avoid non zero segment base address
>> + * that is not aligned to cache line boundary at all cost."
>> + * (Optim Ref Manual Assembly/Compiler Coding Rule 15.)
>> + */
>> +struct stack_canary {
>> + char __pad[20]; /* canary at %gs:20 */
>> + unsigned long canary;
>> +};
>> +DECLARE_PER_CPU(struct stack_canary, stack_canary) ____cacheline_aligned;
>>
> DECLARE_PER_CPU_SHARED_ALIGNED()
>
> Or else, we'll have many holes in percpu section, because of linker encapsulation
>
That's only cache aligned when SMP is enabled, to avoid false cacheline
sharing. In this case we need it unconditionally cache-aligned.
J
next prev parent reply other threads:[~2009-09-03 20:41 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-03 19:27 [PATCH] x86/i386: make sure stack-protector segment base is cache aligned Jeremy Fitzhardinge
2009-09-03 19:47 ` Eric Dumazet
2009-09-03 20:41 ` Jeremy Fitzhardinge [this message]
2009-09-03 21:07 ` Eric Dumazet
2009-09-03 21:31 ` Jeremy Fitzhardinge
2009-09-04 7:58 ` [tip:x86/asm] x86/i386: Put aligned stack-canary in percpu shared_aligned section tip-bot for Jeremy Fitzhardinge
2009-09-03 20:03 ` [tip:x86/asm] x86/i386: Make sure stack-protector segment base is cache aligned tip-bot for Jeremy Fitzhardinge
2009-09-03 20:26 ` H. Peter Anvin
2009-09-03 20:45 ` Jeremy Fitzhardinge
2009-09-03 21:15 ` H. Peter Anvin
2009-09-03 21:18 ` Ingo Molnar
2009-09-03 21:21 ` H. Peter Anvin
2009-09-04 14:15 ` Arjan van de Ven
2009-09-04 15:59 ` Jeremy Fitzhardinge
2009-09-04 16:06 ` H. Peter Anvin
2009-09-03 21:28 ` Jeremy Fitzhardinge
2009-09-04 2:51 ` Tejun Heo
2009-09-04 2:59 ` Tejun Heo
2009-09-04 3:35 ` H. Peter Anvin
2009-09-04 3:47 ` Tejun Heo
2009-09-04 3:51 ` H. Peter Anvin
2009-09-04 5:06 ` Tejun Heo
2009-09-04 5:12 ` Ingo Molnar
2009-09-04 16:04 ` Jeremy Fitzhardinge
2009-09-04 16:09 ` Tejun Heo
2009-09-04 16:13 ` H. Peter Anvin
2009-09-04 16:01 ` Jeremy Fitzhardinge
2009-09-04 16:52 ` H. Peter Anvin
2009-09-04 16:57 ` Jeremy Fitzhardinge
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=4AA029F8.2070002@goop.org \
--to=jeremy@goop.org \
--cc=eric.dumazet@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--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 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.