Commit 5fd63b308569060ffa40af52ed122d9734111bff

Authored by Ravikiran G Thirumalai
Committed by Linus Torvalds
1 parent 99f7b77d3c

[PATCH] x86_64: Inclusion of ScaleMP vSMP architecture patches - vsmp_align

vSMP specific alignment patch to
1. Define INTERNODE_CACHE_SHIFT for vSMP
2. Use this for alignment of critical structures
3. Use INTERNODE_CACHE_SHIFT for ARCH_MIN_TASKALIGN,
   and let the slab align task_struct allocations to the internode cacheline size
4. Introduce and use ARCH_MIN_MMSTRUCT_ALIGN for mm_struct slab allocations.

Signed-off-by: Ravikiran Thirumalai <kiran@scalemp.com>
Signed-off-by: Shai Fultheim <shai@scalemp.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 3 changed files with 23 additions and 1 deletions Side-by-side Diff

include/asm-x86_64/cache.h
... ... @@ -10,5 +10,17 @@
10 10 #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT)
11 11 #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
12 12  
  13 +#ifdef CONFIG_X86_VSMP
  14 +
  15 +/* vSMP Internode cacheline shift */
  16 +#define INTERNODE_CACHE_SHIFT (12)
  17 +#ifdef CONFIG_SMP
  18 +#define __cacheline_aligned_in_smp \
  19 + __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) \
  20 + __attribute__((__section__(".data.page_aligned")))
  21 +#endif
  22 +
  23 +#endif
  24 +
13 25 #endif
include/asm-x86_64/processor.h
... ... @@ -227,7 +227,13 @@
227 227 extern struct cpuinfo_x86 boot_cpu_data;
228 228 DECLARE_PER_CPU(struct tss_struct,init_tss);
229 229  
  230 +#ifdef CONFIG_X86_VSMP
  231 +#define ARCH_MIN_TASKALIGN (1 << INTERNODE_CACHE_SHIFT)
  232 +#define ARCH_MIN_MMSTRUCT_ALIGN (1 << INTERNODE_CACHE_SHIFT)
  233 +#else
230 234 #define ARCH_MIN_TASKALIGN 16
  235 +#define ARCH_MIN_MMSTRUCT_ALIGN 0
  236 +#endif
231 237  
232 238 struct thread_struct {
233 239 unsigned long rsp0;
... ... @@ -1298,6 +1298,10 @@
1298 1298 return pid;
1299 1299 }
1300 1300  
  1301 +#ifndef ARCH_MIN_MMSTRUCT_ALIGN
  1302 +#define ARCH_MIN_MMSTRUCT_ALIGN 0
  1303 +#endif
  1304 +
1301 1305 void __init proc_caches_init(void)
1302 1306 {
1303 1307 sighand_cachep = kmem_cache_create("sighand_cache",
... ... @@ -1316,7 +1320,7 @@
1316 1320 sizeof(struct vm_area_struct), 0,
1317 1321 SLAB_PANIC, NULL, NULL);
1318 1322 mm_cachep = kmem_cache_create("mm_struct",
1319   - sizeof(struct mm_struct), 0,
  1323 + sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN,
1320 1324 SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL);
1321 1325 }