diff options
author | David S. Miller <davem@davemloft.net> | 2006-01-31 21:31:38 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:11:18 -0500 |
commit | bd40791e1d289d807b8580abe1f117e9c62894e4 (patch) | |
tree | 2b47e24c8dc0e668dfd7ba0e3879165180c49c65 /arch/sparc64/mm/init.c | |
parent | 98c5584cfc47932c4f3ccf5eee2e0bae1447b85e (diff) |
[SPARC64]: Dynamically grow TSB in response to RSS growth.
As the RSS grows, grow the TSB in order to reduce the likelyhood
of hash collisions and thus poor hit rates in the TSB.
This definitely needs some serious tuning.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/mm/init.c')
-rw-r--r-- | arch/sparc64/mm/init.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c index 7c456afaa9a5..a8119cb4fa32 100644 --- a/arch/sparc64/mm/init.c +++ b/arch/sparc64/mm/init.c | |||
@@ -246,9 +246,11 @@ static __inline__ void clear_dcache_dirty_cpu(struct page *page, unsigned long c | |||
246 | 246 | ||
247 | void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t pte) | 247 | void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t pte) |
248 | { | 248 | { |
249 | struct mm_struct *mm; | ||
249 | struct page *page; | 250 | struct page *page; |
250 | unsigned long pfn; | 251 | unsigned long pfn; |
251 | unsigned long pg_flags; | 252 | unsigned long pg_flags; |
253 | unsigned long mm_rss; | ||
252 | 254 | ||
253 | pfn = pte_pfn(pte); | 255 | pfn = pte_pfn(pte); |
254 | if (pfn_valid(pfn) && | 256 | if (pfn_valid(pfn) && |
@@ -270,6 +272,11 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t p | |||
270 | 272 | ||
271 | put_cpu(); | 273 | put_cpu(); |
272 | } | 274 | } |
275 | |||
276 | mm = vma->vm_mm; | ||
277 | mm_rss = get_mm_rss(mm); | ||
278 | if (mm_rss >= mm->context.tsb_rss_limit) | ||
279 | tsb_grow(mm, mm_rss, GFP_ATOMIC); | ||
273 | } | 280 | } |
274 | 281 | ||
275 | void flush_dcache_page(struct page *page) | 282 | void flush_dcache_page(struct page *page) |