diff options
| -rw-r--r-- | arch/x86/include/asm/percpu.h | 8 | ||||
| -rw-r--r-- | mm/percpu.c | 16 |
2 files changed, 15 insertions, 9 deletions
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 8f1d2fbec1d4..aee103b26d01 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h | |||
| @@ -43,14 +43,6 @@ | |||
| 43 | #else /* ...!ASSEMBLY */ | 43 | #else /* ...!ASSEMBLY */ |
| 44 | 44 | ||
| 45 | #include <linux/stringify.h> | 45 | #include <linux/stringify.h> |
| 46 | #include <asm/sections.h> | ||
| 47 | |||
| 48 | #define __addr_to_pcpu_ptr(addr) \ | ||
| 49 | (void *)((unsigned long)(addr) - (unsigned long)pcpu_base_addr \ | ||
| 50 | + (unsigned long)__per_cpu_start) | ||
| 51 | #define __pcpu_ptr_to_addr(ptr) \ | ||
| 52 | (void *)((unsigned long)(ptr) + (unsigned long)pcpu_base_addr \ | ||
| 53 | - (unsigned long)__per_cpu_start) | ||
| 54 | 46 | ||
| 55 | #ifdef CONFIG_SMP | 47 | #ifdef CONFIG_SMP |
| 56 | #define __percpu_arg(x) "%%"__stringify(__percpu_seg)":%P" #x | 48 | #define __percpu_arg(x) "%%"__stringify(__percpu_seg)":%P" #x |
diff --git a/mm/percpu.c b/mm/percpu.c index bfe6a3afaf45..c6f38a2aface 100644 --- a/mm/percpu.c +++ b/mm/percpu.c | |||
| @@ -46,7 +46,8 @@ | |||
| 46 | * - define CONFIG_HAVE_DYNAMIC_PER_CPU_AREA | 46 | * - define CONFIG_HAVE_DYNAMIC_PER_CPU_AREA |
| 47 | * | 47 | * |
| 48 | * - define __addr_to_pcpu_ptr() and __pcpu_ptr_to_addr() to translate | 48 | * - define __addr_to_pcpu_ptr() and __pcpu_ptr_to_addr() to translate |
| 49 | * regular address to percpu pointer and back | 49 | * regular address to percpu pointer and back if they need to be |
| 50 | * different from the default | ||
| 50 | * | 51 | * |
| 51 | * - use pcpu_setup_first_chunk() during percpu area initialization to | 52 | * - use pcpu_setup_first_chunk() during percpu area initialization to |
| 52 | * setup the first chunk containing the kernel static percpu area | 53 | * setup the first chunk containing the kernel static percpu area |
| @@ -67,11 +68,24 @@ | |||
| 67 | #include <linux/workqueue.h> | 68 | #include <linux/workqueue.h> |
| 68 | 69 | ||
| 69 | #include <asm/cacheflush.h> | 70 | #include <asm/cacheflush.h> |
| 71 | #include <asm/sections.h> | ||
| 70 | #include <asm/tlbflush.h> | 72 | #include <asm/tlbflush.h> |
| 71 | 73 | ||
| 72 | #define PCPU_SLOT_BASE_SHIFT 5 /* 1-31 shares the same slot */ | 74 | #define PCPU_SLOT_BASE_SHIFT 5 /* 1-31 shares the same slot */ |
| 73 | #define PCPU_DFL_MAP_ALLOC 16 /* start a map with 16 ents */ | 75 | #define PCPU_DFL_MAP_ALLOC 16 /* start a map with 16 ents */ |
| 74 | 76 | ||
| 77 | /* default addr <-> pcpu_ptr mapping, override in asm/percpu.h if necessary */ | ||
| 78 | #ifndef __addr_to_pcpu_ptr | ||
| 79 | #define __addr_to_pcpu_ptr(addr) \ | ||
| 80 | (void *)((unsigned long)(addr) - (unsigned long)pcpu_base_addr \ | ||
| 81 | + (unsigned long)__per_cpu_start) | ||
| 82 | #endif | ||
| 83 | #ifndef __pcpu_ptr_to_addr | ||
| 84 | #define __pcpu_ptr_to_addr(ptr) \ | ||
| 85 | (void *)((unsigned long)(ptr) + (unsigned long)pcpu_base_addr \ | ||
| 86 | - (unsigned long)__per_cpu_start) | ||
| 87 | #endif | ||
| 88 | |||
| 75 | struct pcpu_chunk { | 89 | struct pcpu_chunk { |
| 76 | struct list_head list; /* linked to pcpu_slot lists */ | 90 | struct list_head list; /* linked to pcpu_slot lists */ |
| 77 | struct rb_node rb_node; /* key is chunk->vm->addr */ | 91 | struct rb_node rb_node; /* key is chunk->vm->addr */ |
