[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>
This commit is contained in:
Родитель
99f7b77d3c
Коммит
5fd63b3085
|
@ -10,4 +10,16 @@
|
|||
#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT)
|
||||
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
|
||||
|
||||
#ifdef CONFIG_X86_VSMP
|
||||
|
||||
/* vSMP Internode cacheline shift */
|
||||
#define INTERNODE_CACHE_SHIFT (12)
|
||||
#ifdef CONFIG_SMP
|
||||
#define __cacheline_aligned_in_smp \
|
||||
__attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) \
|
||||
__attribute__((__section__(".data.page_aligned")))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -227,7 +227,13 @@ struct tss_struct {
|
|||
extern struct cpuinfo_x86 boot_cpu_data;
|
||||
DECLARE_PER_CPU(struct tss_struct,init_tss);
|
||||
|
||||
#ifdef CONFIG_X86_VSMP
|
||||
#define ARCH_MIN_TASKALIGN (1 << INTERNODE_CACHE_SHIFT)
|
||||
#define ARCH_MIN_MMSTRUCT_ALIGN (1 << INTERNODE_CACHE_SHIFT)
|
||||
#else
|
||||
#define ARCH_MIN_TASKALIGN 16
|
||||
#define ARCH_MIN_MMSTRUCT_ALIGN 0
|
||||
#endif
|
||||
|
||||
struct thread_struct {
|
||||
unsigned long rsp0;
|
||||
|
|
|
@ -1298,6 +1298,10 @@ long do_fork(unsigned long clone_flags,
|
|||
return pid;
|
||||
}
|
||||
|
||||
#ifndef ARCH_MIN_MMSTRUCT_ALIGN
|
||||
#define ARCH_MIN_MMSTRUCT_ALIGN 0
|
||||
#endif
|
||||
|
||||
void __init proc_caches_init(void)
|
||||
{
|
||||
sighand_cachep = kmem_cache_create("sighand_cache",
|
||||
|
@ -1316,6 +1320,6 @@ void __init proc_caches_init(void)
|
|||
sizeof(struct vm_area_struct), 0,
|
||||
SLAB_PANIC, NULL, NULL);
|
||||
mm_cachep = kmem_cache_create("mm_struct",
|
||||
sizeof(struct mm_struct), 0,
|
||||
sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN,
|
||||
SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче