diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-generic/tlb.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h index ed6642ad03e0..25f01d0bc149 100644 --- a/include/asm-generic/tlb.h +++ b/include/asm-generic/tlb.h | |||
@@ -78,6 +78,14 @@ struct mmu_gather_batch { | |||
78 | #define MAX_GATHER_BATCH \ | 78 | #define MAX_GATHER_BATCH \ |
79 | ((PAGE_SIZE - sizeof(struct mmu_gather_batch)) / sizeof(void *)) | 79 | ((PAGE_SIZE - sizeof(struct mmu_gather_batch)) / sizeof(void *)) |
80 | 80 | ||
81 | /* | ||
82 | * Limit the maximum number of mmu_gather batches to reduce a risk of soft | ||
83 | * lockups for non-preemptible kernels on huge machines when a lot of memory | ||
84 | * is zapped during unmapping. | ||
85 | * 10K pages freed at once should be safe even without a preemption point. | ||
86 | */ | ||
87 | #define MAX_GATHER_BATCH_COUNT (10000UL/MAX_GATHER_BATCH) | ||
88 | |||
81 | /* struct mmu_gather is an opaque type used by the mm code for passing around | 89 | /* struct mmu_gather is an opaque type used by the mm code for passing around |
82 | * any data needed by arch specific code for tlb_remove_page. | 90 | * any data needed by arch specific code for tlb_remove_page. |
83 | */ | 91 | */ |
@@ -96,6 +104,7 @@ struct mmu_gather { | |||
96 | struct mmu_gather_batch *active; | 104 | struct mmu_gather_batch *active; |
97 | struct mmu_gather_batch local; | 105 | struct mmu_gather_batch local; |
98 | struct page *__pages[MMU_GATHER_BUNDLE]; | 106 | struct page *__pages[MMU_GATHER_BUNDLE]; |
107 | unsigned int batch_count; | ||
99 | }; | 108 | }; |
100 | 109 | ||
101 | #define HAVE_GENERIC_MMU_GATHER | 110 | #define HAVE_GENERIC_MMU_GATHER |