diff options
-rw-r--r-- | arch/x86/kernel/smp_32.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/smp_64.c | 3 | ||||
-rw-r--r-- | drivers/acpi/processor_idle.c | 2 | ||||
-rw-r--r-- | include/asm-ia64/acpi.h | 2 | ||||
-rw-r--r-- | include/asm-x86/acpi.h | 3 | ||||
-rw-r--r-- | include/asm-x86/mmu.h | 8 | ||||
-rw-r--r-- | include/asm-x86/mmu_context_32.h | 2 |
7 files changed, 19 insertions, 4 deletions
diff --git a/arch/x86/kernel/smp_32.c b/arch/x86/kernel/smp_32.c index 070816ac79e1..dc0cde9d16fb 100644 --- a/arch/x86/kernel/smp_32.c +++ b/arch/x86/kernel/smp_32.c | |||
@@ -256,13 +256,14 @@ static DEFINE_SPINLOCK(tlbstate_lock); | |||
256 | * We need to reload %cr3 since the page tables may be going | 256 | * We need to reload %cr3 since the page tables may be going |
257 | * away from under us.. | 257 | * away from under us.. |
258 | */ | 258 | */ |
259 | void leave_mm(unsigned long cpu) | 259 | void leave_mm(int cpu) |
260 | { | 260 | { |
261 | if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK) | 261 | if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK) |
262 | BUG(); | 262 | BUG(); |
263 | cpu_clear(cpu, per_cpu(cpu_tlbstate, cpu).active_mm->cpu_vm_mask); | 263 | cpu_clear(cpu, per_cpu(cpu_tlbstate, cpu).active_mm->cpu_vm_mask); |
264 | load_cr3(swapper_pg_dir); | 264 | load_cr3(swapper_pg_dir); |
265 | } | 265 | } |
266 | EXPORT_SYMBOL_GPL(leave_mm); | ||
266 | 267 | ||
267 | /* | 268 | /* |
268 | * | 269 | * |
diff --git a/arch/x86/kernel/smp_64.c b/arch/x86/kernel/smp_64.c index 02a6533e8909..2fd74b06db67 100644 --- a/arch/x86/kernel/smp_64.c +++ b/arch/x86/kernel/smp_64.c | |||
@@ -69,13 +69,14 @@ static DEFINE_PER_CPU(union smp_flush_state, flush_state); | |||
69 | * We cannot call mmdrop() because we are in interrupt context, | 69 | * We cannot call mmdrop() because we are in interrupt context, |
70 | * instead update mm->cpu_vm_mask. | 70 | * instead update mm->cpu_vm_mask. |
71 | */ | 71 | */ |
72 | static inline void leave_mm(int cpu) | 72 | void leave_mm(int cpu) |
73 | { | 73 | { |
74 | if (read_pda(mmu_state) == TLBSTATE_OK) | 74 | if (read_pda(mmu_state) == TLBSTATE_OK) |
75 | BUG(); | 75 | BUG(); |
76 | cpu_clear(cpu, read_pda(active_mm)->cpu_vm_mask); | 76 | cpu_clear(cpu, read_pda(active_mm)->cpu_vm_mask); |
77 | load_cr3(swapper_pg_dir); | 77 | load_cr3(swapper_pg_dir); |
78 | } | 78 | } |
79 | EXPORT_SYMBOL_GPL(leave_mm); | ||
79 | 80 | ||
80 | /* | 81 | /* |
81 | * | 82 | * |
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 2235f4e02d26..0721a8183c89 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
@@ -534,6 +534,7 @@ static void acpi_processor_idle(void) | |||
534 | break; | 534 | break; |
535 | 535 | ||
536 | case ACPI_STATE_C3: | 536 | case ACPI_STATE_C3: |
537 | acpi_unlazy_tlb(smp_processor_id()); | ||
537 | /* | 538 | /* |
538 | * Must be done before busmaster disable as we might | 539 | * Must be done before busmaster disable as we might |
539 | * need to access HPET ! | 540 | * need to access HPET ! |
@@ -1423,6 +1424,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev, | |||
1423 | return 0; | 1424 | return 0; |
1424 | } | 1425 | } |
1425 | 1426 | ||
1427 | acpi_unlazy_tlb(smp_processor_id()); | ||
1426 | /* | 1428 | /* |
1427 | * Must be done before busmaster disable as we might need to | 1429 | * Must be done before busmaster disable as we might need to |
1428 | * access HPET ! | 1430 | * access HPET ! |
diff --git a/include/asm-ia64/acpi.h b/include/asm-ia64/acpi.h index 81bcd5e51789..cd1cc39b5599 100644 --- a/include/asm-ia64/acpi.h +++ b/include/asm-ia64/acpi.h | |||
@@ -127,6 +127,8 @@ extern int __devinitdata pxm_to_nid_map[MAX_PXM_DOMAINS]; | |||
127 | extern int __initdata nid_to_pxm_map[MAX_NUMNODES]; | 127 | extern int __initdata nid_to_pxm_map[MAX_NUMNODES]; |
128 | #endif | 128 | #endif |
129 | 129 | ||
130 | #define acpi_unlazy_tlb(x) | ||
131 | |||
130 | #endif /*__KERNEL__*/ | 132 | #endif /*__KERNEL__*/ |
131 | 133 | ||
132 | #endif /*_ASM_ACPI_H*/ | 134 | #endif /*_ASM_ACPI_H*/ |
diff --git a/include/asm-x86/acpi.h b/include/asm-x86/acpi.h index 2feb0c494be7..98a9ca266531 100644 --- a/include/asm-x86/acpi.h +++ b/include/asm-x86/acpi.h | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | #include <asm/numa.h> | 28 | #include <asm/numa.h> |
29 | #include <asm/processor.h> | 29 | #include <asm/processor.h> |
30 | #include <asm/mmu.h> | ||
30 | 31 | ||
31 | #define COMPILER_DEPENDENT_INT64 long long | 32 | #define COMPILER_DEPENDENT_INT64 long long |
32 | #define COMPILER_DEPENDENT_UINT64 unsigned long long | 33 | #define COMPILER_DEPENDENT_UINT64 unsigned long long |
@@ -167,4 +168,6 @@ static inline void acpi_fake_nodes(const struct bootnode *fake_nodes, | |||
167 | } | 168 | } |
168 | #endif | 169 | #endif |
169 | 170 | ||
171 | #define acpi_unlazy_tlb(x) leave_mm(x) | ||
172 | |||
170 | #endif /*__X86_ASM_ACPI_H*/ | 173 | #endif /*__X86_ASM_ACPI_H*/ |
diff --git a/include/asm-x86/mmu.h b/include/asm-x86/mmu.h index 3f922c8e1c88..efa962c38897 100644 --- a/include/asm-x86/mmu.h +++ b/include/asm-x86/mmu.h | |||
@@ -20,4 +20,12 @@ typedef struct { | |||
20 | void *vdso; | 20 | void *vdso; |
21 | } mm_context_t; | 21 | } mm_context_t; |
22 | 22 | ||
23 | #ifdef CONFIG_SMP | ||
24 | void leave_mm(int cpu); | ||
25 | #else | ||
26 | static inline void leave_mm(int cpu) | ||
27 | { | ||
28 | } | ||
29 | #endif | ||
30 | |||
23 | #endif /* _ASM_X86_MMU_H */ | 31 | #endif /* _ASM_X86_MMU_H */ |
diff --git a/include/asm-x86/mmu_context_32.h b/include/asm-x86/mmu_context_32.h index 7eb0b0b1fb3c..8198d1cca1f3 100644 --- a/include/asm-x86/mmu_context_32.h +++ b/include/asm-x86/mmu_context_32.h | |||
@@ -32,8 +32,6 @@ static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) | |||
32 | #endif | 32 | #endif |
33 | } | 33 | } |
34 | 34 | ||
35 | void leave_mm(unsigned long cpu); | ||
36 | |||
37 | static inline void switch_mm(struct mm_struct *prev, | 35 | static inline void switch_mm(struct mm_struct *prev, |
38 | struct mm_struct *next, | 36 | struct mm_struct *next, |
39 | struct task_struct *tsk) | 37 | struct task_struct *tsk) |