* [PATCH 09/10] ia64: Use generic percpu [not found] <20080108211023.923047000@sgi.com> @ 2008-01-08 21:10 ` travis 0 siblings, 0 replies; 4+ messages in thread From: travis @ 2008-01-08 21:10 UTC (permalink / raw) To: Andrew Morton, mingo, Andi Kleen, Christoph Lameter Cc: Jack Steiner, linux-mm, linux-kernel, linux-ia64, tony.luck 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 Cc: tony.luck@intel.com Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Mike Travis <travis@sgi.com> --- V1->V2: - Merge fixes - Remove transitional check for PER_CPU_ATTRIBUTES from linux/percpu.h V2-.V3: - use generic percpy_modcopy() --- include/asm-ia64/percpu.h | 24 +++++++----------------- include/linux/percpu.h | 4 ---- 2 files changed, 7 insertions(+), 21 deletions(-) --- 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]) - -/* 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))) +#define __my_cpu_offset __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 <asm-generic/percpu.h> + +/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */ +DECLARE_PER_CPU(unsigned long, local_per_cpu_offset); #endif /* !__ASSEMBLY__ */ --- a/include/linux/percpu.h +++ b/include/linux/percpu.h @@ -9,10 +9,6 @@ #include <asm/percpu.h> -#ifndef PER_CPU_ATTRIBUTES -#define PER_CPU_ATTRIBUTES -#endif - #ifdef CONFIG_SMP #define DEFINE_PER_CPU(type, name) \ __attribute__((__section__(".data.percpu"))) \ -- ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <20080108021142.585467000@sgi.com>]
* [PATCH 09/10] ia64: Use generic percpu [not found] <20080108021142.585467000@sgi.com> @ 2008-01-08 2:11 ` travis 0 siblings, 0 replies; 4+ messages in thread From: travis @ 2008-01-08 2:11 UTC (permalink / raw) To: mingo, Andrew Morton, Andi Kleen, Christoph Lameter Cc: Jack Steiner, linux-mm, linux-kernel, linux-ia64, tony.luck V1->V2: - Merge fixes - Remove transitional check for PER_CPU_ATTRIBUTES from linux/percpu.h V2-.V3: - use generic percpy_modcopy() 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 Cc: tony.luck@intel.com Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Mike Travis <travis@sgi.com> --- arch/ia64/kernel/module.c | 11 ----------- include/asm-ia64/percpu.h | 29 +++++++---------------------- include/linux/percpu.h | 4 ---- 3 files changed, 7 insertions(+), 37 deletions(-) --- 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 */ --- a/include/asm-ia64/percpu.h +++ b/include/asm-ia64/percpu.h @@ -19,34 +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 - -/* - * 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]; -#define per_cpu_offset(x) (__per_cpu_offset[x]) - -/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */ -DECLARE_PER_CPU(unsigned long, local_per_cpu_offset); +#define __my_cpu_offset __ia64_per_cpu_var(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 percpu_modcopy(void *pcpudst, const void *src, unsigned long size); -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 */ @@ -57,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 <asm-generic/percpu.h> + +/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */ +DECLARE_PER_CPU(unsigned long, local_per_cpu_offset); #endif /* !__ASSEMBLY__ */ --- a/include/linux/percpu.h +++ b/include/linux/percpu.h @@ -9,10 +9,6 @@ #include <asm/percpu.h> -#ifndef PER_CPU_ATTRIBUTES -#define PER_CPU_ATTRIBUTES -#endif - #ifdef CONFIG_SMP #define DEFINE_PER_CPU(type, name) \ __attribute__((__section__(".data.percpu"))) \ -- ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <20071228001617.597161000@sgi.com>]
* [PATCH 09/10] ia64: Use generic percpu [not found] <20071228001617.597161000@sgi.com> @ 2007-12-28 0:16 ` travis 0 siblings, 0 replies; 4+ messages in thread From: travis @ 2007-12-28 0:16 UTC (permalink / raw) To: Andrew Morton Cc: Christoph Lameter, linux-mm, linux-kernel, linux-ia64, tony.luck V1->V2: - Merge fixes - Remove transitional check for PER_CPU_ATTRIBUTES from linux/percpu.h 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 Cc: tony.luck@intel.com Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Mike Travis <travis@sgi.com> --- include/asm-ia64/percpu.h | 25 +++++++------------------ include/linux/percpu.h | 4 ---- 2 files changed, 7 insertions(+), 22 deletions(-) --- a/include/asm-ia64/percpu.h +++ b/include/asm-ia64/percpu.h @@ -12,36 +12,20 @@ # define THIS_CPU(var) (per_cpu__##var) /* use this to mark accesses to per-CPU variables... */ #else /* !__ASSEMBLY__ */ - #include <linux/threads.h> #ifdef HAVE_MODEL_SMALL_ATTRIBUTE # 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]) - -/* 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))) +#define __my_cpu_offset __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 +36,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 <asm-generic/percpu.h> + +/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */ +DECLARE_PER_CPU(unsigned long, local_per_cpu_offset); #endif /* !__ASSEMBLY__ */ --- a/include/linux/percpu.h +++ b/include/linux/percpu.h @@ -9,10 +9,6 @@ #include <asm/percpu.h> -#ifndef PER_CPU_ATTRIBUTES -#define PER_CPU_ATTRIBUTES -#endif - #define DEFINE_PER_CPU(type, name) \ __attribute__((__section__(".data.percpu"))) \ PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name -- ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <20071128210926.008783214@sgi.com>]
* [patch 09/10] ia64: Use generic percpu [not found] <20071128210926.008783214@sgi.com> @ 2007-11-28 21:09 ` Christoph Lameter 0 siblings, 0 replies; 4+ messages in thread From: Christoph Lameter @ 2007-11-28 21:09 UTC (permalink / raw) To: akpm; +Cc: linux-kernel, linux-ia64, tony.luck V1->V2: - Merge fixes - Remove transitional check for PER_CPU_ATTRIBUTES from linux/percpu.h 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 Cc: tony.luck@intel.com Signed-off-by: Christoph Lameter <clameter@sgi.com> --- include/asm-ia64/percpu.h | 25 +++++++------------------ include/linux/percpu.h | 4 ---- 2 files changed, 7 insertions(+), 22 deletions(-) Index: linux-2.6.24-rc3-mm2/include/asm-ia64/percpu.h =================================--- linux-2.6.24-rc3-mm2.orig/include/asm-ia64/percpu.h 2007-11-28 12:51:42.448213150 -0800 +++ linux-2.6.24-rc3-mm2/include/asm-ia64/percpu.h 2007-11-28 12:52:04.955963258 -0800 @@ -12,36 +12,20 @@ # define THIS_CPU(var) (per_cpu__##var) /* use this to mark accesses to per-CPU variables... */ #else /* !__ASSEMBLY__ */ - #include <linux/threads.h> #ifdef HAVE_MODEL_SMALL_ATTRIBUTE # 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]) - -/* 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))) +#define __my_cpu_offset __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 +36,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 <asm-generic/percpu.h> + +/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */ +DECLARE_PER_CPU(unsigned long, local_per_cpu_offset); #endif /* !__ASSEMBLY__ */ Index: linux-2.6.24-rc3-mm2/include/linux/percpu.h =================================--- linux-2.6.24-rc3-mm2.orig/include/linux/percpu.h 2007-11-28 12:51:42.448213150 -0800 +++ linux-2.6.24-rc3-mm2/include/linux/percpu.h 2007-11-28 12:52:04.955963258 -0800 @@ -9,10 +9,6 @@ #include <asm/percpu.h> -#ifndef PER_CPU_ATTRIBUTES -#define PER_CPU_ATTRIBUTES -#endif - #define DEFINE_PER_CPU(type, name) \ __attribute__((__section__(".data.percpu"))) \ PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name -- ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-01-08 21:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20080108211023.923047000@sgi.com>
2008-01-08 21:10 ` [PATCH 09/10] ia64: Use generic percpu travis
[not found] <20080108021142.585467000@sgi.com>
2008-01-08 2:11 ` travis
[not found] <20071228001617.597161000@sgi.com>
2007-12-28 0:16 ` travis
[not found] <20071128210926.008783214@sgi.com>
2007-11-28 21:09 ` [patch " Christoph Lameter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox