From 4bc408a5b9fed59f8b23ae81bab4e964726bd8b8 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 30 Jan 2008 23:27:57 +0100 Subject: [PATCH 01/11] x86: fix duplicated TIF on 64-bit commit 7e9916040b3020d0f36d68bb7512e3b80b623097 and commit eee3af4a2c83a97fff107ddc445d9df6fded9ce4 Both use the same TIF number (25) in thread_info_64.h. This patch changes the TIF ids. Signed-off-by: Mathieu Desnoyers Signed-off-by: Ingo Molnar --- include/asm-x86/thread_info_64.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/asm-x86/thread_info_64.h b/include/asm-x86/thread_info_64.h index 9b531ea015a8..6c9b214b8fc3 100644 --- a/include/asm-x86/thread_info_64.h +++ b/include/asm-x86/thread_info_64.h @@ -123,8 +123,8 @@ static inline struct thread_info *stack_thread_info(void) #define TIF_FREEZE 23 /* is freezing for suspend */ #define TIF_FORCED_TF 24 /* true if TF in eflags artificially */ #define TIF_DEBUGCTLMSR 25 /* uses thread_struct.debugctlmsr */ -#define TIF_DS_AREA_MSR 25 /* uses thread_struct.ds_area_msr */ -#define TIF_BTS_TRACE_TS 26 /* record scheduling event timestamps */ +#define TIF_DS_AREA_MSR 26 /* uses thread_struct.ds_area_msr */ +#define TIF_BTS_TRACE_TS 27 /* record scheduling event timestamps */ #define _TIF_SYSCALL_TRACE (1< Date: Wed, 30 Jan 2008 23:27:57 +0100 Subject: [PATCH 02/11] x86: export copy_from_user_ll_nocache[_nozero] Cc: Neil Brown Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar --- arch/x86/lib/usercopy_32.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/x86/lib/usercopy_32.c b/arch/x86/lib/usercopy_32.c index 8bab2b2efaff..9c4ffd5bedb2 100644 --- a/arch/x86/lib/usercopy_32.c +++ b/arch/x86/lib/usercopy_32.c @@ -817,6 +817,7 @@ unsigned long __copy_from_user_ll_nocache(void *to, const void __user *from, #endif return n; } +EXPORT_SYMBOL(__copy_from_user_ll_nocache); unsigned long __copy_from_user_ll_nocache_nozero(void *to, const void __user *from, unsigned long n) @@ -831,6 +832,7 @@ unsigned long __copy_from_user_ll_nocache_nozero(void *to, const void __user *fr #endif return n; } +EXPORT_SYMBOL(__copy_from_user_ll_nocache_nozero); /** * copy_to_user: - Copy a block of data into user space. From 6ddfee0e79e141550376177b355d6c90ba6da88c Mon Sep 17 00:00:00 2001 From: "travis@sgi.com" Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 03/11] modules: fold percpu_modcopy into module.c percpu_modcopy() is defined multiple times in arch files. However, the only user is module.c. Put a static definition into module.c and remove the definitions from the arch files. Signed-off-by: Ingo Molnar --- arch/ia64/kernel/module.c | 11 ----------- include/asm-ia64/percpu.h | 5 ----- include/asm-powerpc/percpu.h | 9 --------- include/asm-s390/percpu.h | 9 --------- 4 files changed, 34 deletions(-) diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c index e699eb6c44be..e58f4367cf11 100644 --- a/arch/ia64/kernel/module.c +++ b/arch/ia64/kernel/module.c @@ -940,14 +940,3 @@ module_arch_cleanup (struct module *mod) if (mod->arch.core_unw_table) unw_remove_unwind_table(mod->arch.core_unw_table); } - -#ifdef CONFIG_SMP -void -percpu_modcopy (void *pcpudst, const void *src, unsigned long size) -{ - unsigned int i; - for_each_possible_cpu(i) { - memcpy(pcpudst + per_cpu_offset(i), src, size); - } -} -#endif /* CONFIG_SMP */ diff --git a/include/asm-ia64/percpu.h b/include/asm-ia64/percpu.h index 0095bcf79848..7ef684220cf7 100644 --- a/include/asm-ia64/percpu.h +++ b/include/asm-ia64/percpu.h @@ -22,10 +22,6 @@ #define DECLARE_PER_CPU(type, name) \ extern PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name -/* - * Pretty much a literal copy of asm-generic/percpu.h, except that percpu_modcopy() is an - * external routine, to avoid include-hell. - */ #ifdef CONFIG_SMP extern unsigned long __per_cpu_offset[NR_CPUS]; @@ -38,7 +34,6 @@ DECLARE_PER_CPU(unsigned long, local_per_cpu_offset); #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __ia64_per_cpu_var(local_per_cpu_offset))) #define __raw_get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __ia64_per_cpu_var(local_per_cpu_offset))) -extern void percpu_modcopy(void *pcpudst, const void *src, unsigned long size); extern void setup_per_cpu_areas (void); extern void *per_cpu_init(void); diff --git a/include/asm-powerpc/percpu.h b/include/asm-powerpc/percpu.h index cc1cbf656b02..1b7568838b43 100644 --- a/include/asm-powerpc/percpu.h +++ b/include/asm-powerpc/percpu.h @@ -21,15 +21,6 @@ #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset())) #define __raw_get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, local_paca->data_offset)) -/* A macro to avoid #include hell... */ -#define percpu_modcopy(pcpudst, src, size) \ -do { \ - unsigned int __i; \ - for_each_possible_cpu(__i) \ - memcpy((pcpudst)+__per_cpu_offset(__i), \ - (src), (size)); \ -} while (0) - extern void setup_per_cpu_areas(void); #else /* ! SMP */ diff --git a/include/asm-s390/percpu.h b/include/asm-s390/percpu.h index 2d676a873858..465d313ba2dc 100644 --- a/include/asm-s390/percpu.h +++ b/include/asm-s390/percpu.h @@ -39,15 +39,6 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; #define per_cpu(var,cpu) __reloc_hide(var,__per_cpu_offset[cpu]) #define per_cpu_offset(x) (__per_cpu_offset[x]) -/* A macro to avoid #include hell... */ -#define percpu_modcopy(pcpudst, src, size) \ -do { \ - unsigned int __i; \ - for_each_possible_cpu(__i) \ - memcpy((pcpudst)+__per_cpu_offset[__i], \ - (src), (size)); \ -} while (0) - #else /* ! SMP */ #define __get_cpu_var(var) __reloc_hide(var,0) From 988c388ad48f790253850e369dd3e6fdf44ef603 Mon Sep 17 00:00:00 2001 From: "travis@sgi.com" Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 04/11] percpu: change Kconfig to HAVE_SETUP_PER_CPU_AREA Change: config ARCH_SETS_UP_PER_CPU_AREA to: config HAVE_SETUP_PER_CPU_AREA Cc: Andi Kleen Cc: Tony Luck Cc: David Miller Cc: Sam Ravnborg Cc: Rusty Russell Cc: Geert Uytterhoeven Cc: linuxppc-dev@ozlabs.org Cc: linux-ia64@vger.kernel.org Signed-off-by: Mike Travis Signed-off-by: Ingo Molnar --- arch/ia64/Kconfig | 2 +- arch/powerpc/Kconfig | 2 +- arch/sparc64/Kconfig | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 5a41e75ae1fe..c9307c99a1dc 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -80,7 +80,7 @@ config GENERIC_TIME_VSYSCALL bool default y -config ARCH_SETS_UP_PER_CPU_AREA +config HAVE_SETUP_PER_CPU_AREA def_bool y config DMI diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index fb85f6b72fcf..bb16443b6817 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -42,7 +42,7 @@ config GENERIC_HARDIRQS bool default y -config ARCH_SETS_UP_PER_CPU_AREA +config HAVE_SETUP_PER_CPU_AREA def_bool PPC64 config IRQ_PER_CPU diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig index 26f5791baa33..73fc05d0bfad 100644 --- a/arch/sparc64/Kconfig +++ b/arch/sparc64/Kconfig @@ -66,7 +66,7 @@ config AUDIT_ARCH bool default y -config ARCH_SETS_UP_PER_CPU_AREA +config HAVE_SETUP_PER_CPU_AREA def_bool y config ARCH_NO_VIRT_TO_BUS From 3afc620229ccc8214ef96fd0e7db26d79f788167 Mon Sep 17 00:00:00 2001 From: "travis@sgi.com" Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 05/11] SPARC64: use generic percpu Sparc64 has a way of providing the base address for the per cpu area of the currently executing processor in a global register. Sparc64 also provides a way to calculate the address of a per cpu area from a base address instead of performing an array lookup. Cc: David Miller Signed-off-by: Mike Travis Signed-off-by: Ingo Molnar --- arch/sparc64/mm/init.c | 5 +++++ include/asm-sparc64/percpu.h | 20 ++------------------ 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c index fbeb55d71e76..523e993ee90c 100644 --- a/arch/sparc64/mm/init.c +++ b/arch/sparc64/mm/init.c @@ -1328,6 +1328,11 @@ pgd_t swapper_pg_dir[2048]; static void sun4u_pgprot_init(void); static void sun4v_pgprot_init(void); +/* Dummy function */ +void __init setup_per_cpu_areas(void) +{ +} + void __init paging_init(void) { unsigned long end_pfn, pages_avail, shift, phys_base; diff --git a/include/asm-sparc64/percpu.h b/include/asm-sparc64/percpu.h index c7e52decba98..bee64593023e 100644 --- a/include/asm-sparc64/percpu.h +++ b/include/asm-sparc64/percpu.h @@ -7,7 +7,6 @@ register unsigned long __local_per_cpu_offset asm("g5"); #ifdef CONFIG_SMP -#define setup_per_cpu_areas() do { } while (0) extern void real_setup_per_cpu_areas(void); extern unsigned long __per_cpu_base; @@ -16,29 +15,14 @@ extern unsigned long __per_cpu_shift; (__per_cpu_base + ((unsigned long)(__cpu) << __per_cpu_shift)) #define per_cpu_offset(x) (__per_cpu_offset(x)) -/* var is in discarded region: offset to particular copy we want */ -#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu))) -#define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __local_per_cpu_offset)) -#define __raw_get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __local_per_cpu_offset)) +#define __my_cpu_offset __local_per_cpu_offset -/* A macro to avoid #include hell... */ -#define percpu_modcopy(pcpudst, src, size) \ -do { \ - unsigned int __i; \ - for_each_possible_cpu(__i) \ - memcpy((pcpudst)+__per_cpu_offset(__i), \ - (src), (size)); \ -} while (0) #else /* ! SMP */ #define real_setup_per_cpu_areas() do { } while (0) -#define per_cpu(var, cpu) (*((void)cpu, &per_cpu__##var)) -#define __get_cpu_var(var) per_cpu__##var -#define __raw_get_cpu_var(var) per_cpu__##var - #endif /* SMP */ -#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name +#include #endif /* __ARCH_SPARC64_PERCPU__ */ From 05991bef104051d47e2160ee9499186aff7da5ad Mon Sep 17 00:00:00 2001 From: "travis@sgi.com" Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 06/11] ia64: use generic percpu ia64 has a special processor specific mapping that can be used to locate the offset for the current per cpu area. Cc: linux-ia64@vger.kernel.org Signed-off-by: Mike Travis Acked-by: Tony Luck Signed-off-by: Ingo Molnar --- include/asm-ia64/percpu.h | 24 +++++++----------------- include/linux/percpu.h | 4 ---- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/include/asm-ia64/percpu.h b/include/asm-ia64/percpu.h index 7ef684220cf7..26404b77f007 100644 --- a/include/asm-ia64/percpu.h +++ b/include/asm-ia64/percpu.h @@ -19,29 +19,14 @@ # define PER_CPU_ATTRIBUTES __attribute__((__model__ (__small__))) #endif -#define DECLARE_PER_CPU(type, name) \ - extern PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name - #ifdef CONFIG_SMP -extern unsigned long __per_cpu_offset[NR_CPUS]; -#define per_cpu_offset(x) (__per_cpu_offset[x]) +#define __my_cpu_offset __ia64_per_cpu_var(local_per_cpu_offset) -/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */ -DECLARE_PER_CPU(unsigned long, local_per_cpu_offset); - -#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu])) -#define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __ia64_per_cpu_var(local_per_cpu_offset))) -#define __raw_get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __ia64_per_cpu_var(local_per_cpu_offset))) - -extern void setup_per_cpu_areas (void); extern void *per_cpu_init(void); #else /* ! SMP */ -#define per_cpu(var, cpu) (*((void)(cpu), &per_cpu__##var)) -#define __get_cpu_var(var) per_cpu__##var -#define __raw_get_cpu_var(var) per_cpu__##var #define per_cpu_init() (__phys_per_cpu_start) #endif /* SMP */ @@ -52,7 +37,12 @@ extern void *per_cpu_init(void); * On the positive side, using __ia64_per_cpu_var() instead of __get_cpu_var() is slightly * more efficient. */ -#define __ia64_per_cpu_var(var) (per_cpu__##var) +#define __ia64_per_cpu_var(var) per_cpu__##var + +#include + +/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */ +DECLARE_PER_CPU(unsigned long, local_per_cpu_offset); #endif /* !__ASSEMBLY__ */ diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 00412bb494c4..50faa0ea28e4 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h @@ -9,10 +9,6 @@ #include -#ifndef PER_CPU_ATTRIBUTES -#define PER_CPU_ATTRIBUTES -#endif - #ifdef CONFIG_SMP #define DEFINE_PER_CPU(type, name) \ __attribute__((__section__(".data.percpu"))) \ From 56f902051dd040e8a735a225caf0e3e4ffb0a6c5 Mon Sep 17 00:00:00 2001 From: "travis@sgi.com" Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 07/11] POWERPC: use generic per cpu Powerpc has a way to determine the address of the per cpu area of the currently executing processor via the paca and the array of per cpu offsets is avoided by looking up the per cpu area from the remote paca's (copying x86_64). Cc: Paul Mackerras Cc: Geert Uytterhoeven Signed-off-by: Mike Travis Signed-off-by: Ingo Molnar Acked-by: Olof Johansson Tested-by: Geoff Levand --- include/asm-powerpc/percpu.h | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/include/asm-powerpc/percpu.h b/include/asm-powerpc/percpu.h index 1b7568838b43..ccb0523eb3b4 100644 --- a/include/asm-powerpc/percpu.h +++ b/include/asm-powerpc/percpu.h @@ -13,28 +13,12 @@ #include #define __per_cpu_offset(cpu) (paca[cpu].data_offset) -#define __my_cpu_offset() get_paca()->data_offset +#define __my_cpu_offset get_paca()->data_offset #define per_cpu_offset(x) (__per_cpu_offset(x)) -/* var is in discarded region: offset to particular copy we want */ -#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu))) -#define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset())) -#define __raw_get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, local_paca->data_offset)) +#endif /* CONFIG_SMP */ +#endif /* __powerpc64__ */ -extern void setup_per_cpu_areas(void); - -#else /* ! SMP */ - -#define per_cpu(var, cpu) (*((void)(cpu), &per_cpu__##var)) -#define __get_cpu_var(var) per_cpu__##var -#define __raw_get_cpu_var(var) per_cpu__##var - -#endif /* SMP */ - -#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name - -#else #include -#endif #endif /* _ASM_POWERPC_PERCPU_H_ */ From f034347470e486835ccdcd7a5bb2ceb417be11c4 Mon Sep 17 00:00:00 2001 From: "travis@sgi.com" Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 08/11] s390: use generic percpu linux-2.6.git Change s390 percpu.h to use asm-generic/percpu.h Signed-off-by: Mike Travis Acked-by: Martin Schwidefsky Signed-off-by: Ingo Molnar --- include/asm-s390/percpu.h | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/include/asm-s390/percpu.h b/include/asm-s390/percpu.h index 465d313ba2dc..408d60b4f75b 100644 --- a/include/asm-s390/percpu.h +++ b/include/asm-s390/percpu.h @@ -13,40 +13,25 @@ */ #if defined(__s390x__) && defined(MODULE) -#define __reloc_hide(var,offset) (*({ \ +#define SHIFT_PERCPU_PTR(ptr,offset) (({ \ extern int simple_identifier_##var(void); \ unsigned long *__ptr; \ - asm ( "larl %0,per_cpu__"#var"@GOTENT" \ - : "=a" (__ptr) : "X" (per_cpu__##var) ); \ - (typeof(&per_cpu__##var))((*__ptr) + (offset)); })) + asm ( "larl %0, %1@GOTENT" \ + : "=a" (__ptr) : "X" (ptr) ); \ + (typeof(ptr))((*__ptr) + (offset)); })) #else -#define __reloc_hide(var, offset) (*({ \ +#define SHIFT_PERCPU_PTR(ptr, offset) (({ \ extern int simple_identifier_##var(void); \ unsigned long __ptr; \ - asm ( "" : "=a" (__ptr) : "0" (&per_cpu__##var) ); \ - (typeof(&per_cpu__##var)) (__ptr + (offset)); })) + asm ( "" : "=a" (__ptr) : "0" (ptr) ); \ + (typeof(ptr)) (__ptr + (offset)); })) #endif -#ifdef CONFIG_SMP +#define __my_cpu_offset S390_lowcore.percpu_offset -extern unsigned long __per_cpu_offset[NR_CPUS]; - -#define __get_cpu_var(var) __reloc_hide(var,S390_lowcore.percpu_offset) -#define __raw_get_cpu_var(var) __reloc_hide(var,S390_lowcore.percpu_offset) -#define per_cpu(var,cpu) __reloc_hide(var,__per_cpu_offset[cpu]) -#define per_cpu_offset(x) (__per_cpu_offset[x]) - -#else /* ! SMP */ - -#define __get_cpu_var(var) __reloc_hide(var,0) -#define __raw_get_cpu_var(var) __reloc_hide(var,0) -#define per_cpu(var,cpu) __reloc_hide(var,0) - -#endif /* SMP */ - -#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name +#include #endif /* __ARCH_S390_PERCPU__ */ From 18fbef9e5242e146fe0264cf719a498785102841 Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 09/11] x86: fix arch/x86/kernel/test_nx.c modular build bug fix this modular build bug: > CC [M] arch/x86/kernel/test_nx.o > {standard input}: Assembler messages: > {standard input}:58: Error: cannot represent relocation type BFD_RELOC_64 > {standard input}:59: Error: cannot represent relocation type BFD_RELOC_64 > make[2]: *** [arch/x86/kernel/test_nx.o] Error 1 > make[1]: *** [arch/x86/kernel] Error 2 Reported-by: Adrian Bunk Signed-off-by: Ingo Molnar --- arch/x86/kernel/test_nx.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/x86/kernel/test_nx.c b/arch/x86/kernel/test_nx.c index 6d7ef11e7975..ae0ef2e304c7 100644 --- a/arch/x86/kernel/test_nx.c +++ b/arch/x86/kernel/test_nx.c @@ -91,8 +91,13 @@ static noinline int test_address(void *address) ".previous\n" ".section __ex_table,\"a\"\n" " .align 8\n" +#ifdef CONFIG_X86_32 + " .long 0b\n" + " .long 2b\n" +#else " .quad 0b\n" " .quad 2b\n" +#endif ".previous\n" : [rslt] "=r" (result) : [fake_code] "r" (address), [zero] "r" (0UL), "0" (result) From ab6e14b712e2d8e0c4dd3cf1a72083b52104853a Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 10/11] ia64: on UP percpu variables are not small memory model Tony says: | The CONFIG_SMP=n path in ia64 makes quite radical changes ... rather | than putting all the per-cpu stuff into the top 64K of address space | and providing a per-cpu TLB mapping for that range to a different | physical address ... it just makes all the per-cpu stuff link as ordinary | variables in .data. the new generic percpu code got confused about this as PER_CPU_ATTRIBUTES was defined even on UP, so it picked up that small memory model - which was not possible to get linked. The right fix is to only define that on SMP. This resolved the build failures in my cross-compiling environment. also link these variables into the .percpu section even on UP - some assembly code has offset dependencies. (such as GET_IA64_MCA_DATA() in arch/ia64/kernel/mca_asm.S) Signed-off-by: Ingo Molnar Acked-by: Tony Luck --- include/asm-ia64/percpu.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/asm-ia64/percpu.h b/include/asm-ia64/percpu.h index 26404b77f007..77f30b664b4e 100644 --- a/include/asm-ia64/percpu.h +++ b/include/asm-ia64/percpu.h @@ -15,18 +15,20 @@ #include +#ifdef CONFIG_SMP + #ifdef HAVE_MODEL_SMALL_ATTRIBUTE # define PER_CPU_ATTRIBUTES __attribute__((__model__ (__small__))) #endif -#ifdef CONFIG_SMP - #define __my_cpu_offset __ia64_per_cpu_var(local_per_cpu_offset) extern void *per_cpu_init(void); #else /* ! SMP */ +#define PER_CPU_ATTRIBUTES __attribute__((__section__(".data.percpu"))) + #define per_cpu_init() (__phys_per_cpu_start) #endif /* SMP */ From c18d1250c7425dddd2633ce4eaf03d5015e68a0f Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH 11/11] alpha: fix x86.git merge build error a5a19c63f4e55e32dc0bc3d936d7f94793d8b380 removed the include of asm/pgalloc.h from asm-generic/tlb.h. That works fine on most architectures, but broke ALPHA. Fixup ALPHA by adding the include to asm-alpha/tlbflush.h Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- include/asm-alpha/tlbflush.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/asm-alpha/tlbflush.h b/include/asm-alpha/tlbflush.h index eefab3fb51ae..b9e9147226f7 100644 --- a/include/asm-alpha/tlbflush.h +++ b/include/asm-alpha/tlbflush.h @@ -3,6 +3,7 @@ #include #include +#include #ifndef __EXTERN_INLINE #define __EXTERN_INLINE extern inline