diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-26 16:17:17 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-26 16:17:17 -0400 |
| commit | 4cb38750d49010ae72e718d46605ac9ba5a851b4 (patch) | |
| tree | 8c991a900fd176288f4acbc340512b90d604374d /include | |
| parent | 0a2fe19ccc4bc552a8083a595a3aa737b8bea727 (diff) | |
| parent | 7efa1c87963d23cc57ba40c07316d3e28cc75a3a (diff) | |
Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86/mm changes from Peter Anvin:
"The big change here is the patchset by Alex Shi to use INVLPG to flush
only the affected pages when we only need to flush a small page range.
It also removes the special INVALIDATE_TLB_VECTOR interrupts (32
vectors!) and replace it with an ordinary IPI function call."
Fix up trivial conflicts in arch/x86/include/asm/apic.h (added code next
to changed line)
* 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/tlb: Fix build warning and crash when building for !SMP
x86/tlb: do flush_tlb_kernel_range by 'invlpg'
x86/tlb: replace INVALIDATE_TLB_VECTOR by CALL_FUNCTION_VECTOR
x86/tlb: enable tlb flush range support for x86
mm/mmu_gather: enable tlb flush range in generic mmu_gather
x86/tlb: add tlb_flushall_shift knob into debugfs
x86/tlb: add tlb_flushall_shift for specific CPU
x86/tlb: fall back to flush all when meet a THP large page
x86/flush_tlb: try flush_tlb_single one by one in flush_tlb_range
x86/tlb_info: get last level TLB entry number of CPU
x86: Add read_mostly declaration/definition to variables from smp.h
x86: Define early read-mostly per-cpu macros
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-generic/tlb.h | 5 | ||||
| -rw-r--r-- | include/trace/events/xen.h | 12 |
2 files changed, 11 insertions, 6 deletions
diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h index f96a5b58a975..ed6642ad03e0 100644 --- a/include/asm-generic/tlb.h +++ b/include/asm-generic/tlb.h | |||
| @@ -86,6 +86,8 @@ struct mmu_gather { | |||
| 86 | #ifdef CONFIG_HAVE_RCU_TABLE_FREE | 86 | #ifdef CONFIG_HAVE_RCU_TABLE_FREE |
| 87 | struct mmu_table_batch *batch; | 87 | struct mmu_table_batch *batch; |
| 88 | #endif | 88 | #endif |
| 89 | unsigned long start; | ||
| 90 | unsigned long end; | ||
| 89 | unsigned int need_flush : 1, /* Did free PTEs */ | 91 | unsigned int need_flush : 1, /* Did free PTEs */ |
| 90 | fast_mode : 1; /* No batching */ | 92 | fast_mode : 1; /* No batching */ |
| 91 | 93 | ||
| @@ -113,7 +115,8 @@ static inline int tlb_fast_mode(struct mmu_gather *tlb) | |||
| 113 | 115 | ||
| 114 | void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm); | 116 | void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm); |
| 115 | void tlb_flush_mmu(struct mmu_gather *tlb); | 117 | void tlb_flush_mmu(struct mmu_gather *tlb); |
| 116 | void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end); | 118 | void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, |
| 119 | unsigned long end); | ||
| 117 | int __tlb_remove_page(struct mmu_gather *tlb, struct page *page); | 120 | int __tlb_remove_page(struct mmu_gather *tlb, struct page *page); |
| 118 | 121 | ||
| 119 | /* tlb_remove_page | 122 | /* tlb_remove_page |
diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h index 92f1a796829e..15ba03bdd7c6 100644 --- a/include/trace/events/xen.h +++ b/include/trace/events/xen.h | |||
| @@ -397,18 +397,20 @@ TRACE_EVENT(xen_mmu_flush_tlb_single, | |||
| 397 | 397 | ||
| 398 | TRACE_EVENT(xen_mmu_flush_tlb_others, | 398 | TRACE_EVENT(xen_mmu_flush_tlb_others, |
| 399 | TP_PROTO(const struct cpumask *cpus, struct mm_struct *mm, | 399 | TP_PROTO(const struct cpumask *cpus, struct mm_struct *mm, |
| 400 | unsigned long addr), | 400 | unsigned long addr, unsigned long end), |
| 401 | TP_ARGS(cpus, mm, addr), | 401 | TP_ARGS(cpus, mm, addr, end), |
| 402 | TP_STRUCT__entry( | 402 | TP_STRUCT__entry( |
| 403 | __field(unsigned, ncpus) | 403 | __field(unsigned, ncpus) |
| 404 | __field(struct mm_struct *, mm) | 404 | __field(struct mm_struct *, mm) |
| 405 | __field(unsigned long, addr) | 405 | __field(unsigned long, addr) |
| 406 | __field(unsigned long, end) | ||
| 406 | ), | 407 | ), |
| 407 | TP_fast_assign(__entry->ncpus = cpumask_weight(cpus); | 408 | TP_fast_assign(__entry->ncpus = cpumask_weight(cpus); |
| 408 | __entry->mm = mm; | 409 | __entry->mm = mm; |
| 409 | __entry->addr = addr), | 410 | __entry->addr = addr, |
| 410 | TP_printk("ncpus %d mm %p addr %lx", | 411 | __entry->end = end), |
| 411 | __entry->ncpus, __entry->mm, __entry->addr) | 412 | TP_printk("ncpus %d mm %p addr %lx, end %lx", |
| 413 | __entry->ncpus, __entry->mm, __entry->addr, __entry->end) | ||
| 412 | ); | 414 | ); |
| 413 | 415 | ||
| 414 | TRACE_EVENT(xen_mmu_write_cr3, | 416 | TRACE_EVENT(xen_mmu_write_cr3, |
