diff options
Diffstat (limited to 'arch/x86/include/asm')
| -rw-r--r-- | arch/x86/include/asm/apic.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/entry_arch.h | 9 | ||||
| -rw-r--r-- | arch/x86/include/asm/irq_vectors.h | 11 | ||||
| -rw-r--r-- | arch/x86/include/asm/paravirt.h | 5 | ||||
| -rw-r--r-- | arch/x86/include/asm/paravirt_types.h | 3 | ||||
| -rw-r--r-- | arch/x86/include/asm/percpu.h | 17 | ||||
| -rw-r--r-- | arch/x86/include/asm/processor.h | 13 | ||||
| -rw-r--r-- | arch/x86/include/asm/smp.h | 16 | ||||
| -rw-r--r-- | arch/x86/include/asm/tlb.h | 9 | ||||
| -rw-r--r-- | arch/x86/include/asm/tlbflush.h | 49 | ||||
| -rw-r--r-- | arch/x86/include/asm/uv/uv.h | 5 |
11 files changed, 83 insertions, 56 deletions
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 3ea51a84a0e4..f34261296ffb 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
| @@ -546,7 +546,7 @@ static inline const struct cpumask *online_target_cpus(void) | |||
| 546 | return cpu_online_mask; | 546 | return cpu_online_mask; |
| 547 | } | 547 | } |
| 548 | 548 | ||
| 549 | DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); | 549 | DECLARE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_bios_cpu_apicid); |
| 550 | 550 | ||
| 551 | 551 | ||
| 552 | static inline unsigned int read_apic_id(void) | 552 | static inline unsigned int read_apic_id(void) |
diff --git a/arch/x86/include/asm/entry_arch.h b/arch/x86/include/asm/entry_arch.h index 0baa628e330c..40afa0005c69 100644 --- a/arch/x86/include/asm/entry_arch.h +++ b/arch/x86/include/asm/entry_arch.h | |||
| @@ -15,15 +15,6 @@ BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR) | |||
| 15 | BUILD_INTERRUPT(call_function_single_interrupt,CALL_FUNCTION_SINGLE_VECTOR) | 15 | BUILD_INTERRUPT(call_function_single_interrupt,CALL_FUNCTION_SINGLE_VECTOR) |
| 16 | BUILD_INTERRUPT(irq_move_cleanup_interrupt,IRQ_MOVE_CLEANUP_VECTOR) | 16 | BUILD_INTERRUPT(irq_move_cleanup_interrupt,IRQ_MOVE_CLEANUP_VECTOR) |
| 17 | BUILD_INTERRUPT(reboot_interrupt,REBOOT_VECTOR) | 17 | BUILD_INTERRUPT(reboot_interrupt,REBOOT_VECTOR) |
| 18 | |||
| 19 | .irp idx,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, \ | ||
| 20 | 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 | ||
| 21 | .if NUM_INVALIDATE_TLB_VECTORS > \idx | ||
| 22 | BUILD_INTERRUPT3(invalidate_interrupt\idx, | ||
| 23 | (INVALIDATE_TLB_VECTOR_START)+\idx, | ||
| 24 | smp_invalidate_interrupt) | ||
| 25 | .endif | ||
| 26 | .endr | ||
| 27 | #endif | 18 | #endif |
| 28 | 19 | ||
| 29 | BUILD_INTERRUPT(x86_platform_ipi, X86_PLATFORM_IPI_VECTOR) | 20 | BUILD_INTERRUPT(x86_platform_ipi, X86_PLATFORM_IPI_VECTOR) |
diff --git a/arch/x86/include/asm/irq_vectors.h b/arch/x86/include/asm/irq_vectors.h index 4b4448761e88..1508e518c7e3 100644 --- a/arch/x86/include/asm/irq_vectors.h +++ b/arch/x86/include/asm/irq_vectors.h | |||
| @@ -119,17 +119,6 @@ | |||
| 119 | */ | 119 | */ |
| 120 | #define LOCAL_TIMER_VECTOR 0xef | 120 | #define LOCAL_TIMER_VECTOR 0xef |
| 121 | 121 | ||
| 122 | /* up to 32 vectors used for spreading out TLB flushes: */ | ||
| 123 | #if NR_CPUS <= 32 | ||
| 124 | # define NUM_INVALIDATE_TLB_VECTORS (NR_CPUS) | ||
| 125 | #else | ||
| 126 | # define NUM_INVALIDATE_TLB_VECTORS (32) | ||
| 127 | #endif | ||
| 128 | |||
| 129 | #define INVALIDATE_TLB_VECTOR_END (0xee) | ||
| 130 | #define INVALIDATE_TLB_VECTOR_START \ | ||
| 131 | (INVALIDATE_TLB_VECTOR_END-NUM_INVALIDATE_TLB_VECTORS+1) | ||
| 132 | |||
| 133 | #define NR_VECTORS 256 | 122 | #define NR_VECTORS 256 |
| 134 | 123 | ||
| 135 | #define FPU_IRQ 13 | 124 | #define FPU_IRQ 13 |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 0b47ddb6f00b..a0facf3908d7 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
| @@ -360,9 +360,10 @@ static inline void __flush_tlb_single(unsigned long addr) | |||
| 360 | 360 | ||
| 361 | static inline void flush_tlb_others(const struct cpumask *cpumask, | 361 | static inline void flush_tlb_others(const struct cpumask *cpumask, |
| 362 | struct mm_struct *mm, | 362 | struct mm_struct *mm, |
| 363 | unsigned long va) | 363 | unsigned long start, |
| 364 | unsigned long end) | ||
| 364 | { | 365 | { |
| 365 | PVOP_VCALL3(pv_mmu_ops.flush_tlb_others, cpumask, mm, va); | 366 | PVOP_VCALL4(pv_mmu_ops.flush_tlb_others, cpumask, mm, start, end); |
| 366 | } | 367 | } |
| 367 | 368 | ||
| 368 | static inline int paravirt_pgd_alloc(struct mm_struct *mm) | 369 | static inline int paravirt_pgd_alloc(struct mm_struct *mm) |
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h index 8613cbb7ba41..142236ed83af 100644 --- a/arch/x86/include/asm/paravirt_types.h +++ b/arch/x86/include/asm/paravirt_types.h | |||
| @@ -248,7 +248,8 @@ struct pv_mmu_ops { | |||
| 248 | void (*flush_tlb_single)(unsigned long addr); | 248 | void (*flush_tlb_single)(unsigned long addr); |
| 249 | void (*flush_tlb_others)(const struct cpumask *cpus, | 249 | void (*flush_tlb_others)(const struct cpumask *cpus, |
| 250 | struct mm_struct *mm, | 250 | struct mm_struct *mm, |
| 251 | unsigned long va); | 251 | unsigned long start, |
| 252 | unsigned long end); | ||
| 252 | 253 | ||
| 253 | /* Hooks for allocating and freeing a pagetable top-level */ | 254 | /* Hooks for allocating and freeing a pagetable top-level */ |
| 254 | int (*pgd_alloc)(struct mm_struct *mm); | 255 | int (*pgd_alloc)(struct mm_struct *mm); |
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index d9b8e3f7f42a..1104afaba52b 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h | |||
| @@ -551,6 +551,12 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off); | |||
| 551 | { [0 ... NR_CPUS-1] = _initvalue }; \ | 551 | { [0 ... NR_CPUS-1] = _initvalue }; \ |
| 552 | __typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map | 552 | __typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map |
| 553 | 553 | ||
| 554 | #define DEFINE_EARLY_PER_CPU_READ_MOSTLY(_type, _name, _initvalue) \ | ||
| 555 | DEFINE_PER_CPU_READ_MOSTLY(_type, _name) = _initvalue; \ | ||
| 556 | __typeof__(_type) _name##_early_map[NR_CPUS] __initdata = \ | ||
| 557 | { [0 ... NR_CPUS-1] = _initvalue }; \ | ||
| 558 | __typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map | ||
| 559 | |||
| 554 | #define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \ | 560 | #define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \ |
| 555 | EXPORT_PER_CPU_SYMBOL(_name) | 561 | EXPORT_PER_CPU_SYMBOL(_name) |
| 556 | 562 | ||
| @@ -559,6 +565,11 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off); | |||
| 559 | extern __typeof__(_type) *_name##_early_ptr; \ | 565 | extern __typeof__(_type) *_name##_early_ptr; \ |
| 560 | extern __typeof__(_type) _name##_early_map[] | 566 | extern __typeof__(_type) _name##_early_map[] |
| 561 | 567 | ||
| 568 | #define DECLARE_EARLY_PER_CPU_READ_MOSTLY(_type, _name) \ | ||
| 569 | DECLARE_PER_CPU_READ_MOSTLY(_type, _name); \ | ||
| 570 | extern __typeof__(_type) *_name##_early_ptr; \ | ||
| 571 | extern __typeof__(_type) _name##_early_map[] | ||
| 572 | |||
| 562 | #define early_per_cpu_ptr(_name) (_name##_early_ptr) | 573 | #define early_per_cpu_ptr(_name) (_name##_early_ptr) |
| 563 | #define early_per_cpu_map(_name, _idx) (_name##_early_map[_idx]) | 574 | #define early_per_cpu_map(_name, _idx) (_name##_early_map[_idx]) |
| 564 | #define early_per_cpu(_name, _cpu) \ | 575 | #define early_per_cpu(_name, _cpu) \ |
| @@ -570,12 +581,18 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off); | |||
| 570 | #define DEFINE_EARLY_PER_CPU(_type, _name, _initvalue) \ | 581 | #define DEFINE_EARLY_PER_CPU(_type, _name, _initvalue) \ |
| 571 | DEFINE_PER_CPU(_type, _name) = _initvalue | 582 | DEFINE_PER_CPU(_type, _name) = _initvalue |
| 572 | 583 | ||
| 584 | #define DEFINE_EARLY_PER_CPU_READ_MOSTLY(_type, _name, _initvalue) \ | ||
| 585 | DEFINE_PER_CPU_READ_MOSTLY(_type, _name) = _initvalue | ||
| 586 | |||
| 573 | #define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \ | 587 | #define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \ |
| 574 | EXPORT_PER_CPU_SYMBOL(_name) | 588 | EXPORT_PER_CPU_SYMBOL(_name) |
| 575 | 589 | ||
| 576 | #define DECLARE_EARLY_PER_CPU(_type, _name) \ | 590 | #define DECLARE_EARLY_PER_CPU(_type, _name) \ |
| 577 | DECLARE_PER_CPU(_type, _name) | 591 | DECLARE_PER_CPU(_type, _name) |
| 578 | 592 | ||
| 593 | #define DECLARE_EARLY_PER_CPU_READ_MOSTLY(_type, _name) \ | ||
| 594 | DECLARE_PER_CPU_READ_MOSTLY(_type, _name) | ||
| 595 | |||
| 579 | #define early_per_cpu(_name, _cpu) per_cpu(_name, _cpu) | 596 | #define early_per_cpu(_name, _cpu) per_cpu(_name, _cpu) |
| 580 | #define early_per_cpu_ptr(_name) NULL | 597 | #define early_per_cpu_ptr(_name) NULL |
| 581 | /* no early_per_cpu_map() */ | 598 | /* no early_per_cpu_map() */ |
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 39bc5777211a..d048cad9bcad 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h | |||
| @@ -61,6 +61,19 @@ static inline void *current_text_addr(void) | |||
| 61 | # define ARCH_MIN_MMSTRUCT_ALIGN 0 | 61 | # define ARCH_MIN_MMSTRUCT_ALIGN 0 |
| 62 | #endif | 62 | #endif |
| 63 | 63 | ||
| 64 | enum tlb_infos { | ||
| 65 | ENTRIES, | ||
| 66 | NR_INFO | ||
| 67 | }; | ||
| 68 | |||
| 69 | extern u16 __read_mostly tlb_lli_4k[NR_INFO]; | ||
| 70 | extern u16 __read_mostly tlb_lli_2m[NR_INFO]; | ||
| 71 | extern u16 __read_mostly tlb_lli_4m[NR_INFO]; | ||
| 72 | extern u16 __read_mostly tlb_lld_4k[NR_INFO]; | ||
| 73 | extern u16 __read_mostly tlb_lld_2m[NR_INFO]; | ||
| 74 | extern u16 __read_mostly tlb_lld_4m[NR_INFO]; | ||
| 75 | extern s8 __read_mostly tlb_flushall_shift; | ||
| 76 | |||
| 64 | /* | 77 | /* |
| 65 | * CPU type and hardware bug flags. Kept separately for each CPU. | 78 | * CPU type and hardware bug flags. Kept separately for each CPU. |
| 66 | * Members of this structure are referenced in head.S, so think twice | 79 | * Members of this structure are referenced in head.S, so think twice |
diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h index 2ffa95dc2333..4f19a1526037 100644 --- a/arch/x86/include/asm/smp.h +++ b/arch/x86/include/asm/smp.h | |||
| @@ -31,12 +31,12 @@ static inline bool cpu_has_ht_siblings(void) | |||
| 31 | return has_siblings; | 31 | return has_siblings; |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_map); | 34 | DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_map); |
| 35 | DECLARE_PER_CPU(cpumask_var_t, cpu_core_map); | 35 | DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map); |
| 36 | /* cpus sharing the last level cache: */ | 36 | /* cpus sharing the last level cache: */ |
| 37 | DECLARE_PER_CPU(cpumask_var_t, cpu_llc_shared_map); | 37 | DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_llc_shared_map); |
| 38 | DECLARE_PER_CPU(u16, cpu_llc_id); | 38 | DECLARE_PER_CPU_READ_MOSTLY(u16, cpu_llc_id); |
| 39 | DECLARE_PER_CPU(int, cpu_number); | 39 | DECLARE_PER_CPU_READ_MOSTLY(int, cpu_number); |
| 40 | 40 | ||
| 41 | static inline struct cpumask *cpu_sibling_mask(int cpu) | 41 | static inline struct cpumask *cpu_sibling_mask(int cpu) |
| 42 | { | 42 | { |
| @@ -53,10 +53,10 @@ static inline struct cpumask *cpu_llc_shared_mask(int cpu) | |||
| 53 | return per_cpu(cpu_llc_shared_map, cpu); | 53 | return per_cpu(cpu_llc_shared_map, cpu); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | DECLARE_EARLY_PER_CPU(u16, x86_cpu_to_apicid); | 56 | DECLARE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_cpu_to_apicid); |
| 57 | DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); | 57 | DECLARE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_bios_cpu_apicid); |
| 58 | #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32) | 58 | #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32) |
| 59 | DECLARE_EARLY_PER_CPU(int, x86_cpu_to_logical_apicid); | 59 | DECLARE_EARLY_PER_CPU_READ_MOSTLY(int, x86_cpu_to_logical_apicid); |
| 60 | #endif | 60 | #endif |
| 61 | 61 | ||
| 62 | /* Static state in head.S used to set up a CPU */ | 62 | /* Static state in head.S used to set up a CPU */ |
diff --git a/arch/x86/include/asm/tlb.h b/arch/x86/include/asm/tlb.h index 829215fef9ee..4fef20773b8f 100644 --- a/arch/x86/include/asm/tlb.h +++ b/arch/x86/include/asm/tlb.h | |||
| @@ -4,7 +4,14 @@ | |||
| 4 | #define tlb_start_vma(tlb, vma) do { } while (0) | 4 | #define tlb_start_vma(tlb, vma) do { } while (0) |
| 5 | #define tlb_end_vma(tlb, vma) do { } while (0) | 5 | #define tlb_end_vma(tlb, vma) do { } while (0) |
| 6 | #define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0) | 6 | #define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0) |
| 7 | #define tlb_flush(tlb) flush_tlb_mm((tlb)->mm) | 7 | |
| 8 | #define tlb_flush(tlb) \ | ||
| 9 | { \ | ||
| 10 | if (tlb->fullmm == 0) \ | ||
| 11 | flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end, 0UL); \ | ||
| 12 | else \ | ||
| 13 | flush_tlb_mm_range(tlb->mm, 0UL, TLB_FLUSH_ALL, 0UL); \ | ||
| 14 | } | ||
| 8 | 15 | ||
| 9 | #include <asm-generic/tlb.h> | 16 | #include <asm-generic/tlb.h> |
| 10 | 17 | ||
diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h index 36a1a2ab87d2..74a44333545a 100644 --- a/arch/x86/include/asm/tlbflush.h +++ b/arch/x86/include/asm/tlbflush.h | |||
| @@ -73,14 +73,10 @@ static inline void __flush_tlb_one(unsigned long addr) | |||
| 73 | * - flush_tlb_page(vma, vmaddr) flushes one page | 73 | * - flush_tlb_page(vma, vmaddr) flushes one page |
| 74 | * - flush_tlb_range(vma, start, end) flushes a range of pages | 74 | * - flush_tlb_range(vma, start, end) flushes a range of pages |
| 75 | * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages | 75 | * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages |
| 76 | * - flush_tlb_others(cpumask, mm, va) flushes TLBs on other cpus | 76 | * - flush_tlb_others(cpumask, mm, start, end) flushes TLBs on other cpus |
| 77 | * | 77 | * |
| 78 | * ..but the i386 has somewhat limited tlb flushing capabilities, | 78 | * ..but the i386 has somewhat limited tlb flushing capabilities, |
| 79 | * and page-granular flushes are available only on i486 and up. | 79 | * and page-granular flushes are available only on i486 and up. |
| 80 | * | ||
| 81 | * x86-64 can only flush individual pages or full VMs. For a range flush | ||
| 82 | * we always do the full VM. Might be worth trying if for a small | ||
| 83 | * range a few INVLPGs in a row are a win. | ||
| 84 | */ | 80 | */ |
| 85 | 81 | ||
| 86 | #ifndef CONFIG_SMP | 82 | #ifndef CONFIG_SMP |
| @@ -109,9 +105,17 @@ static inline void flush_tlb_range(struct vm_area_struct *vma, | |||
| 109 | __flush_tlb(); | 105 | __flush_tlb(); |
| 110 | } | 106 | } |
| 111 | 107 | ||
| 108 | static inline void flush_tlb_mm_range(struct mm_struct *mm, | ||
| 109 | unsigned long start, unsigned long end, unsigned long vmflag) | ||
| 110 | { | ||
| 111 | if (mm == current->active_mm) | ||
| 112 | __flush_tlb(); | ||
| 113 | } | ||
| 114 | |||
| 112 | static inline void native_flush_tlb_others(const struct cpumask *cpumask, | 115 | static inline void native_flush_tlb_others(const struct cpumask *cpumask, |
| 113 | struct mm_struct *mm, | 116 | struct mm_struct *mm, |
| 114 | unsigned long va) | 117 | unsigned long start, |
| 118 | unsigned long end) | ||
| 115 | { | 119 | { |
| 116 | } | 120 | } |
| 117 | 121 | ||
| @@ -119,27 +123,35 @@ static inline void reset_lazy_tlbstate(void) | |||
| 119 | { | 123 | { |
| 120 | } | 124 | } |
| 121 | 125 | ||
| 126 | static inline void flush_tlb_kernel_range(unsigned long start, | ||
| 127 | unsigned long end) | ||
| 128 | { | ||
| 129 | flush_tlb_all(); | ||
| 130 | } | ||
| 131 | |||
| 122 | #else /* SMP */ | 132 | #else /* SMP */ |
| 123 | 133 | ||
| 124 | #include <asm/smp.h> | 134 | #include <asm/smp.h> |
| 125 | 135 | ||
| 126 | #define local_flush_tlb() __flush_tlb() | 136 | #define local_flush_tlb() __flush_tlb() |
| 127 | 137 | ||
| 138 | #define flush_tlb_mm(mm) flush_tlb_mm_range(mm, 0UL, TLB_FLUSH_ALL, 0UL) | ||
| 139 | |||
| 140 | #define flush_tlb_range(vma, start, end) \ | ||
| 141 | flush_tlb_mm_range(vma->vm_mm, start, end, vma->vm_flags) | ||
| 142 | |||
| 128 | extern void flush_tlb_all(void); | 143 | extern void flush_tlb_all(void); |
| 129 | extern void flush_tlb_current_task(void); | 144 | extern void flush_tlb_current_task(void); |
| 130 | extern void flush_tlb_mm(struct mm_struct *); | ||
| 131 | extern void flush_tlb_page(struct vm_area_struct *, unsigned long); | 145 | extern void flush_tlb_page(struct vm_area_struct *, unsigned long); |
| 146 | extern void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, | ||
| 147 | unsigned long end, unsigned long vmflag); | ||
| 148 | extern void flush_tlb_kernel_range(unsigned long start, unsigned long end); | ||
| 132 | 149 | ||
| 133 | #define flush_tlb() flush_tlb_current_task() | 150 | #define flush_tlb() flush_tlb_current_task() |
| 134 | 151 | ||
| 135 | static inline void flush_tlb_range(struct vm_area_struct *vma, | ||
| 136 | unsigned long start, unsigned long end) | ||
| 137 | { | ||
| 138 | flush_tlb_mm(vma->vm_mm); | ||
| 139 | } | ||
| 140 | |||
| 141 | void native_flush_tlb_others(const struct cpumask *cpumask, | 152 | void native_flush_tlb_others(const struct cpumask *cpumask, |
| 142 | struct mm_struct *mm, unsigned long va); | 153 | struct mm_struct *mm, |
| 154 | unsigned long start, unsigned long end); | ||
| 143 | 155 | ||
| 144 | #define TLBSTATE_OK 1 | 156 | #define TLBSTATE_OK 1 |
| 145 | #define TLBSTATE_LAZY 2 | 157 | #define TLBSTATE_LAZY 2 |
| @@ -159,13 +171,8 @@ static inline void reset_lazy_tlbstate(void) | |||
| 159 | #endif /* SMP */ | 171 | #endif /* SMP */ |
| 160 | 172 | ||
| 161 | #ifndef CONFIG_PARAVIRT | 173 | #ifndef CONFIG_PARAVIRT |
| 162 | #define flush_tlb_others(mask, mm, va) native_flush_tlb_others(mask, mm, va) | 174 | #define flush_tlb_others(mask, mm, start, end) \ |
| 175 | native_flush_tlb_others(mask, mm, start, end) | ||
| 163 | #endif | 176 | #endif |
| 164 | 177 | ||
| 165 | static inline void flush_tlb_kernel_range(unsigned long start, | ||
| 166 | unsigned long end) | ||
| 167 | { | ||
| 168 | flush_tlb_all(); | ||
| 169 | } | ||
| 170 | |||
| 171 | #endif /* _ASM_X86_TLBFLUSH_H */ | 178 | #endif /* _ASM_X86_TLBFLUSH_H */ |
diff --git a/arch/x86/include/asm/uv/uv.h b/arch/x86/include/asm/uv/uv.h index 3bb9491b7659..b47c2a82ff15 100644 --- a/arch/x86/include/asm/uv/uv.h +++ b/arch/x86/include/asm/uv/uv.h | |||
| @@ -15,7 +15,8 @@ extern void uv_nmi_init(void); | |||
| 15 | extern void uv_system_init(void); | 15 | extern void uv_system_init(void); |
| 16 | extern const struct cpumask *uv_flush_tlb_others(const struct cpumask *cpumask, | 16 | extern const struct cpumask *uv_flush_tlb_others(const struct cpumask *cpumask, |
| 17 | struct mm_struct *mm, | 17 | struct mm_struct *mm, |
| 18 | unsigned long va, | 18 | unsigned long start, |
| 19 | unsigned end, | ||
| 19 | unsigned int cpu); | 20 | unsigned int cpu); |
| 20 | 21 | ||
| 21 | #else /* X86_UV */ | 22 | #else /* X86_UV */ |
| @@ -26,7 +27,7 @@ static inline void uv_cpu_init(void) { } | |||
| 26 | static inline void uv_system_init(void) { } | 27 | static inline void uv_system_init(void) { } |
| 27 | static inline const struct cpumask * | 28 | static inline const struct cpumask * |
| 28 | uv_flush_tlb_others(const struct cpumask *cpumask, struct mm_struct *mm, | 29 | uv_flush_tlb_others(const struct cpumask *cpumask, struct mm_struct *mm, |
| 29 | unsigned long va, unsigned int cpu) | 30 | unsigned long start, unsigned long end, unsigned int cpu) |
| 30 | { return cpumask; } | 31 | { return cpumask; } |
| 31 | 32 | ||
| 32 | #endif /* X86_UV */ | 33 | #endif /* X86_UV */ |
