mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu: (46 commits) powerpc64: convert to dynamic percpu allocator sparc64: use embedding percpu first chunk allocator percpu: kill lpage first chunk allocator x86,percpu: use embedding for 64bit NUMA and page for 32bit NUMA percpu: update embedding first chunk allocator to handle sparse units percpu: use group information to allocate vmap areas sparsely vmalloc: implement pcpu_get_vm_areas() vmalloc: separate out insert_vmalloc_vm() percpu: add chunk->base_addr percpu: add pcpu_unit_offsets[] percpu: introduce pcpu_alloc_info and pcpu_group_info percpu: move pcpu_lpage_build_unit_map() and pcpul_lpage_dump_cfg() upward percpu: add @align to pcpu_fc_alloc_fn_t percpu: make @dyn_size mandatory for pcpu_setup_first_chunk() percpu: drop @static_size from first chunk allocators percpu: generalize first chunk allocator selection percpu: build first chunk allocators selectively percpu: rename 4k first chunk allocator to page percpu: improve boot messages percpu: fix pcpu_reclaim() locking ... Fix trivial conflict as by Tejun Heo in kernel/sched.c
This commit is contained in:
@@ -1971,11 +1971,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
Format: { 0 | 1 }
|
||||
See arch/parisc/kernel/pdc_chassis.c
|
||||
|
||||
percpu_alloc= [X86] Select which percpu first chunk allocator to use.
|
||||
Allowed values are one of "lpage", "embed" and "4k".
|
||||
See comments in arch/x86/kernel/setup_percpu.c for
|
||||
details on each allocator. This parameter is primarily
|
||||
for debugging and performance comparison.
|
||||
percpu_alloc= Select which percpu first chunk allocator to use.
|
||||
Currently supported values are "embed" and "page".
|
||||
Archs may support subset or none of the selections.
|
||||
See comments in mm/percpu.c for details on each
|
||||
allocator. This parameter is primarily for debugging
|
||||
and performance comparison.
|
||||
|
||||
pf. [PARIDE]
|
||||
See Documentation/blockdev/paride.txt.
|
||||
|
||||
2
Makefile
2
Makefile
@@ -325,7 +325,7 @@ CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
||||
MODFLAGS = -DMODULE
|
||||
CFLAGS_MODULE = $(MODFLAGS)
|
||||
AFLAGS_MODULE = $(MODFLAGS)
|
||||
LDFLAGS_MODULE =
|
||||
LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds
|
||||
CFLAGS_KERNEL =
|
||||
AFLAGS_KERNEL =
|
||||
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
||||
|
||||
@@ -1,102 +1,18 @@
|
||||
#ifndef __ALPHA_PERCPU_H
|
||||
#define __ALPHA_PERCPU_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/percpu-defs.h>
|
||||
|
||||
/*
|
||||
* Determine the real variable name from the name visible in the
|
||||
* kernel sources.
|
||||
*/
|
||||
#define per_cpu_var(var) per_cpu__##var
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
/*
|
||||
* per_cpu_offset() is the offset that has to be added to a
|
||||
* percpu variable to get to the instance for a certain processor.
|
||||
*/
|
||||
extern unsigned long __per_cpu_offset[NR_CPUS];
|
||||
|
||||
#define per_cpu_offset(x) (__per_cpu_offset[x])
|
||||
|
||||
#define __my_cpu_offset per_cpu_offset(raw_smp_processor_id())
|
||||
#ifdef CONFIG_DEBUG_PREEMPT
|
||||
#define my_cpu_offset per_cpu_offset(smp_processor_id())
|
||||
#else
|
||||
#define my_cpu_offset __my_cpu_offset
|
||||
#endif
|
||||
|
||||
#ifndef MODULE
|
||||
#define SHIFT_PERCPU_PTR(var, offset) RELOC_HIDE(&per_cpu_var(var), (offset))
|
||||
#define PER_CPU_DEF_ATTRIBUTES
|
||||
#else
|
||||
/*
|
||||
* To calculate addresses of locally defined variables, GCC uses 32-bit
|
||||
* displacement from the GP. Which doesn't work for per cpu variables in
|
||||
* modules, as an offset to the kernel per cpu area is way above 4G.
|
||||
* To calculate addresses of locally defined variables, GCC uses
|
||||
* 32-bit displacement from the GP. Which doesn't work for per cpu
|
||||
* variables in modules, as an offset to the kernel per cpu area is
|
||||
* way above 4G.
|
||||
*
|
||||
* This forces allocation of a GOT entry for per cpu variable using
|
||||
* ldq instruction with a 'literal' relocation.
|
||||
* Always use weak definitions for percpu variables in modules.
|
||||
*/
|
||||
#define SHIFT_PERCPU_PTR(var, offset) ({ \
|
||||
extern int simple_identifier_##var(void); \
|
||||
unsigned long __ptr, tmp_gp; \
|
||||
asm ( "br %1, 1f \n\
|
||||
1: ldgp %1, 0(%1) \n\
|
||||
ldq %0, per_cpu__" #var"(%1)\t!literal" \
|
||||
: "=&r"(__ptr), "=&r"(tmp_gp)); \
|
||||
(typeof(&per_cpu_var(var)))(__ptr + (offset)); })
|
||||
|
||||
#define PER_CPU_DEF_ATTRIBUTES __used
|
||||
|
||||
#endif /* MODULE */
|
||||
|
||||
/*
|
||||
* A percpu variable may point to a discarded regions. The following are
|
||||
* established ways to produce a usable pointer from the percpu variable
|
||||
* offset.
|
||||
*/
|
||||
#define per_cpu(var, cpu) \
|
||||
(*SHIFT_PERCPU_PTR(var, per_cpu_offset(cpu)))
|
||||
#define __get_cpu_var(var) \
|
||||
(*SHIFT_PERCPU_PTR(var, my_cpu_offset))
|
||||
#define __raw_get_cpu_var(var) \
|
||||
(*SHIFT_PERCPU_PTR(var, __my_cpu_offset))
|
||||
|
||||
#else /* ! SMP */
|
||||
|
||||
#define per_cpu(var, cpu) (*((void)(cpu), &per_cpu_var(var)))
|
||||
#define __get_cpu_var(var) per_cpu_var(var)
|
||||
#define __raw_get_cpu_var(var) per_cpu_var(var)
|
||||
|
||||
#define PER_CPU_DEF_ATTRIBUTES
|
||||
|
||||
#endif /* SMP */
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define PER_CPU_BASE_SECTION ".data.percpu"
|
||||
#else
|
||||
#define PER_CPU_BASE_SECTION ".data"
|
||||
#if defined(MODULE) && defined(CONFIG_SMP)
|
||||
#define ARCH_NEEDS_WEAK_PER_CPU
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
#ifdef MODULE
|
||||
#define PER_CPU_SHARED_ALIGNED_SECTION ""
|
||||
#else
|
||||
#define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned"
|
||||
#endif
|
||||
#define PER_CPU_FIRST_SECTION ".first"
|
||||
|
||||
#else
|
||||
|
||||
#define PER_CPU_SHARED_ALIGNED_SECTION ""
|
||||
#define PER_CPU_FIRST_SECTION ""
|
||||
|
||||
#endif
|
||||
|
||||
#define PER_CPU_ATTRIBUTES
|
||||
#include <asm-generic/percpu.h>
|
||||
|
||||
#endif /* __ALPHA_PERCPU_H */
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define _ALPHA_TLBFLUSH_H
|
||||
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched.h>
|
||||
#include <asm/compiler.h>
|
||||
#include <asm/pgalloc.h>
|
||||
|
||||
|
||||
@@ -134,13 +134,6 @@ SECTIONS
|
||||
__bss_stop = .;
|
||||
_end = .;
|
||||
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ : {
|
||||
EXIT_TEXT
|
||||
EXIT_DATA
|
||||
*(.exitcall.exit)
|
||||
}
|
||||
|
||||
.mdebug 0 : {
|
||||
*(.mdebug)
|
||||
}
|
||||
@@ -150,4 +143,6 @@ SECTIONS
|
||||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
|
||||
DISCARDS
|
||||
}
|
||||
|
||||
@@ -83,6 +83,7 @@ SECTIONS
|
||||
EXIT_TEXT
|
||||
EXIT_DATA
|
||||
*(.exitcall.exit)
|
||||
*(.discard)
|
||||
*(.ARM.exidx.exit.text)
|
||||
*(.ARM.extab.exit.text)
|
||||
#ifndef CONFIG_HOTPLUG_CPU
|
||||
|
||||
@@ -124,14 +124,11 @@ SECTIONS
|
||||
_end = .;
|
||||
}
|
||||
|
||||
DWARF_DEBUG
|
||||
|
||||
/* When something in the kernel is NOT compiled as a module, the module
|
||||
* cleanup code and data are put into these segments. Both can then be
|
||||
* thrown away, as cleanup code is never called unless it's a module.
|
||||
*/
|
||||
/DISCARD/ : {
|
||||
EXIT_DATA
|
||||
*(.exitcall.exit)
|
||||
}
|
||||
|
||||
DWARF_DEBUG
|
||||
DISCARDS
|
||||
}
|
||||
|
||||
@@ -277,8 +277,5 @@ SECTIONS
|
||||
|
||||
DWARF_DEBUG
|
||||
|
||||
/DISCARD/ :
|
||||
{
|
||||
*(.exitcall.exit)
|
||||
}
|
||||
DISCARDS
|
||||
}
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
#include <asm/mem_map.h>
|
||||
#include "blackfin_sram.h"
|
||||
|
||||
static DEFINE_PER_CPU(spinlock_t, l1sram_lock) ____cacheline_aligned_in_smp;
|
||||
static DEFINE_PER_CPU(spinlock_t, l1_data_sram_lock) ____cacheline_aligned_in_smp;
|
||||
static DEFINE_PER_CPU(spinlock_t, l1_inst_sram_lock) ____cacheline_aligned_in_smp;
|
||||
static DEFINE_PER_CPU_SHARED_ALIGNED(spinlock_t, l1sram_lock);
|
||||
static DEFINE_PER_CPU_SHARED_ALIGNED(spinlock_t, l1_data_sram_lock);
|
||||
static DEFINE_PER_CPU_SHARED_ALIGNED(spinlock_t, l1_inst_sram_lock);
|
||||
static spinlock_t l2_sram_lock ____cacheline_aligned_in_smp;
|
||||
|
||||
/* the data structure for L1 scratchpad and DATA SRAM */
|
||||
|
||||
@@ -17,7 +17,8 @@ extern void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
||||
* registers like cr3 on the i386
|
||||
*/
|
||||
|
||||
extern volatile DEFINE_PER_CPU(pgd_t *,current_pgd); /* defined in arch/cris/mm/fault.c */
|
||||
/* defined in arch/cris/mm/fault.c */
|
||||
DECLARE_PER_CPU(pgd_t *, current_pgd);
|
||||
|
||||
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
||||
{
|
||||
|
||||
@@ -140,12 +140,7 @@ SECTIONS
|
||||
_end = .;
|
||||
__end = .;
|
||||
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ : {
|
||||
EXIT_TEXT
|
||||
EXIT_DATA
|
||||
*(.exitcall.exit)
|
||||
}
|
||||
|
||||
dram_end = dram_start + (CONFIG_ETRAX_DRAM_SIZE - __CONFIG_ETRAX_VMEM_SIZE)*1024*1024;
|
||||
|
||||
DISCARDS
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ extern void die_if_kernel(const char *, struct pt_regs *, long);
|
||||
|
||||
/* current active page directory */
|
||||
|
||||
volatile DEFINE_PER_CPU(pgd_t *,current_pgd);
|
||||
DEFINE_PER_CPU(pgd_t *, current_pgd);
|
||||
unsigned long cris_signal_return_page;
|
||||
|
||||
/*
|
||||
|
||||
@@ -177,6 +177,8 @@ SECTIONS
|
||||
.debug_ranges 0 : { *(.debug_ranges) }
|
||||
|
||||
.comment 0 : { *(.comment) }
|
||||
|
||||
DISCARDS
|
||||
}
|
||||
|
||||
__kernel_image_size_no_bss = __bss_start - __kernel_image_start;
|
||||
|
||||
@@ -152,9 +152,6 @@ SECTIONS
|
||||
__end = . ;
|
||||
__ramstart = .;
|
||||
}
|
||||
/DISCARD/ : {
|
||||
*(.exitcall.exit)
|
||||
}
|
||||
.romfs :
|
||||
{
|
||||
*(.romfs*)
|
||||
@@ -165,4 +162,6 @@ SECTIONS
|
||||
COMMAND_START = . - 0x200 ;
|
||||
__ramend = . ;
|
||||
}
|
||||
|
||||
DISCARDS
|
||||
}
|
||||
|
||||
@@ -89,6 +89,9 @@ config GENERIC_TIME_VSYSCALL
|
||||
bool
|
||||
default y
|
||||
|
||||
config HAVE_LEGACY_PER_CPU_AREA
|
||||
def_bool y
|
||||
|
||||
config HAVE_SETUP_PER_CPU_AREA
|
||||
def_bool y
|
||||
|
||||
|
||||
@@ -855,11 +855,17 @@ identify_cpu (struct cpuinfo_ia64 *c)
|
||||
c->unimpl_pa_mask = ~((1L<<63) | ((1L << phys_addr_size) - 1));
|
||||
}
|
||||
|
||||
/*
|
||||
* In UP configuration, setup_per_cpu_areas() is defined in
|
||||
* include/linux/percpu.h
|
||||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
void __init
|
||||
setup_per_cpu_areas (void)
|
||||
{
|
||||
/* start_kernel() requires this... */
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Do the following calculations:
|
||||
|
||||
@@ -58,7 +58,8 @@ static struct local_tlb_flush_counts {
|
||||
unsigned int count;
|
||||
} __attribute__((__aligned__(32))) local_tlb_flush_counts[NR_CPUS];
|
||||
|
||||
static DEFINE_PER_CPU(unsigned short, shadow_flush_counts[NR_CPUS]) ____cacheline_aligned;
|
||||
static DEFINE_PER_CPU_SHARED_ALIGNED(unsigned short [NR_CPUS],
|
||||
shadow_flush_counts);
|
||||
|
||||
#define IPI_CALL_FUNC 0
|
||||
#define IPI_CPU_STOP 1
|
||||
|
||||
@@ -24,14 +24,14 @@ PHDRS {
|
||||
}
|
||||
SECTIONS
|
||||
{
|
||||
/* Sections to be discarded */
|
||||
/* unwind exit sections must be discarded before the rest of the
|
||||
sections get included. */
|
||||
/DISCARD/ : {
|
||||
EXIT_TEXT
|
||||
EXIT_DATA
|
||||
*(.exitcall.exit)
|
||||
*(.IA_64.unwind.exit.text)
|
||||
*(.IA_64.unwind_info.exit.text)
|
||||
}
|
||||
*(.comment)
|
||||
*(.note)
|
||||
}
|
||||
|
||||
v = PAGE_OFFSET; /* this symbol is here to make debugging easier... */
|
||||
phys_start = _start - LOAD_OFFSET;
|
||||
@@ -316,7 +316,7 @@ SECTIONS
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
/* These must appear regardless of . */
|
||||
/DISCARD/ : { *(.comment) }
|
||||
/DISCARD/ : { *(.note) }
|
||||
|
||||
/* Default discards */
|
||||
DISCARDS
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ EXPORT_SYMBOL(sn_rtc_cycles_per_second);
|
||||
DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info);
|
||||
EXPORT_PER_CPU_SYMBOL(__sn_hub_info);
|
||||
|
||||
DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_COMPACT_NODES]);
|
||||
DEFINE_PER_CPU(short [MAX_COMPACT_NODES], __sn_cnodeid_to_nasid);
|
||||
EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid);
|
||||
|
||||
DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda);
|
||||
|
||||
@@ -120,13 +120,6 @@ SECTIONS
|
||||
|
||||
_end = . ;
|
||||
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ : {
|
||||
EXIT_TEXT
|
||||
EXIT_DATA
|
||||
*(.exitcall.exit)
|
||||
}
|
||||
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
@@ -135,4 +128,7 @@ SECTIONS
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
|
||||
/* Sections to be discarded */
|
||||
DISCARDS
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user