lkml.org 
[lkml]   [2009]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:x86/asm] x86/i386: Put aligned stack-canary in percpu shared_aligned section
    Commit-ID:  53f824520b6d84ca5b4a8fd71addc91dbf64357e
    Gitweb: http://git.kernel.org/tip/53f824520b6d84ca5b4a8fd71addc91dbf64357e
    Author: Jeremy Fitzhardinge <jeremy@goop.org>
    AuthorDate: Thu, 3 Sep 2009 14:31:44 -0700
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Fri, 4 Sep 2009 07:10:31 +0200

    x86/i386: Put aligned stack-canary in percpu shared_aligned section

    Pack aligned things together into a special section to minimize
    padding holes.

    Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    Cc: Tejun Heo <tj@kernel.org>
    LKML-Reference: <4AA035C0.9070202@goop.org>
    [ queued up in tip:x86/asm because it depends on this commit:
    x86/i386: Make sure stack-protector segment base is cache aligned ]
    Signed-off-by: Ingo Molnar <mingo@elte.hu>


    ---
    arch/x86/include/asm/processor.h | 2 +-
    arch/x86/kernel/cpu/common.c | 2 +-
    include/asm-generic/percpu.h | 3 +++
    include/linux/percpu-defs.h | 8 ++++++++
    4 files changed, 13 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
    index e597ecc..ac7e796 100644
    --- a/arch/x86/include/asm/processor.h
    +++ b/arch/x86/include/asm/processor.h
    @@ -413,7 +413,7 @@ 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_ALIGNED(struct stack_canary, stack_canary);
    #endif
    #endif /* X86_64 */

    diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
    index 7d84bc4..f23e236 100644
    --- a/arch/x86/kernel/cpu/common.c
    +++ b/arch/x86/kernel/cpu/common.c
    @@ -1043,7 +1043,7 @@ DEFINE_PER_CPU(struct orig_ist, orig_ist);
    #else /* CONFIG_X86_64 */

    #ifdef CONFIG_CC_STACKPROTECTOR
    -DEFINE_PER_CPU(struct stack_canary, stack_canary) ____cacheline_aligned;
    +DEFINE_PER_CPU_ALIGNED(struct stack_canary, stack_canary);
    #endif

    /* Make sure %fs and %gs are initialized properly in idle threads */
    diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h
    index aa00800..90079c3 100644
    --- a/include/asm-generic/percpu.h
    +++ b/include/asm-generic/percpu.h
    @@ -81,14 +81,17 @@ extern void setup_per_cpu_areas(void);

    #ifdef MODULE
    #define PER_CPU_SHARED_ALIGNED_SECTION ""
    +#define PER_CPU_ALIGNED_SECTION ""
    #else
    #define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned"
    +#define PER_CPU_ALIGNED_SECTION ".shared_aligned"
    #endif
    #define PER_CPU_FIRST_SECTION ".first"

    #else

    #define PER_CPU_SHARED_ALIGNED_SECTION ""
    +#define PER_CPU_ALIGNED_SECTION ".shared_aligned"
    #define PER_CPU_FIRST_SECTION ""

    #endif
    diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
    index 68438e1..3058cf9 100644
    --- a/include/linux/percpu-defs.h
    +++ b/include/linux/percpu-defs.h
    @@ -66,6 +66,14 @@
    DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \
    ____cacheline_aligned_in_smp

    +#define DECLARE_PER_CPU_ALIGNED(type, name) \
    + DECLARE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \
    + ____cacheline_aligned
    +
    +#define DEFINE_PER_CPU_ALIGNED(type, name) \
    + DEFINE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \
    + ____cacheline_aligned
    +
    /*
    * Declaration/definition used for per-CPU variables that must be page aligned.
    */

    \
     
     \ /
      Last update: 2009-09-04 10:01    [W:0.028 / U:60.496 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site