diff options
Diffstat (limited to 'arch/sparc/mm/tsb.c')
-rw-r--r-- | arch/sparc/mm/tsb.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/arch/sparc/mm/tsb.c b/arch/sparc/mm/tsb.c index 101d7c82870b..948461513499 100644 --- a/arch/sparc/mm/tsb.c +++ b/arch/sparc/mm/tsb.c | |||
@@ -47,12 +47,13 @@ void flush_tsb_kernel_range(unsigned long start, unsigned long end) | |||
47 | } | 47 | } |
48 | } | 48 | } |
49 | 49 | ||
50 | static void __flush_tsb_one(struct mmu_gather *mp, unsigned long hash_shift, unsigned long tsb, unsigned long nentries) | 50 | static void __flush_tsb_one(struct tlb_batch *tb, unsigned long hash_shift, |
51 | unsigned long tsb, unsigned long nentries) | ||
51 | { | 52 | { |
52 | unsigned long i; | 53 | unsigned long i; |
53 | 54 | ||
54 | for (i = 0; i < mp->tlb_nr; i++) { | 55 | for (i = 0; i < tb->tlb_nr; i++) { |
55 | unsigned long v = mp->vaddrs[i]; | 56 | unsigned long v = tb->vaddrs[i]; |
56 | unsigned long tag, ent, hash; | 57 | unsigned long tag, ent, hash; |
57 | 58 | ||
58 | v &= ~0x1UL; | 59 | v &= ~0x1UL; |
@@ -65,9 +66,9 @@ static void __flush_tsb_one(struct mmu_gather *mp, unsigned long hash_shift, uns | |||
65 | } | 66 | } |
66 | } | 67 | } |
67 | 68 | ||
68 | void flush_tsb_user(struct mmu_gather *mp) | 69 | void flush_tsb_user(struct tlb_batch *tb) |
69 | { | 70 | { |
70 | struct mm_struct *mm = mp->mm; | 71 | struct mm_struct *mm = tb->mm; |
71 | unsigned long nentries, base, flags; | 72 | unsigned long nentries, base, flags; |
72 | 73 | ||
73 | spin_lock_irqsave(&mm->context.lock, flags); | 74 | spin_lock_irqsave(&mm->context.lock, flags); |
@@ -76,7 +77,7 @@ void flush_tsb_user(struct mmu_gather *mp) | |||
76 | nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; | 77 | nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; |
77 | if (tlb_type == cheetah_plus || tlb_type == hypervisor) | 78 | if (tlb_type == cheetah_plus || tlb_type == hypervisor) |
78 | base = __pa(base); | 79 | base = __pa(base); |
79 | __flush_tsb_one(mp, PAGE_SHIFT, base, nentries); | 80 | __flush_tsb_one(tb, PAGE_SHIFT, base, nentries); |
80 | 81 | ||
81 | #ifdef CONFIG_HUGETLB_PAGE | 82 | #ifdef CONFIG_HUGETLB_PAGE |
82 | if (mm->context.tsb_block[MM_TSB_HUGE].tsb) { | 83 | if (mm->context.tsb_block[MM_TSB_HUGE].tsb) { |
@@ -84,7 +85,7 @@ void flush_tsb_user(struct mmu_gather *mp) | |||
84 | nentries = mm->context.tsb_block[MM_TSB_HUGE].tsb_nentries; | 85 | nentries = mm->context.tsb_block[MM_TSB_HUGE].tsb_nentries; |
85 | if (tlb_type == cheetah_plus || tlb_type == hypervisor) | 86 | if (tlb_type == cheetah_plus || tlb_type == hypervisor) |
86 | base = __pa(base); | 87 | base = __pa(base); |
87 | __flush_tsb_one(mp, HPAGE_SHIFT, base, nentries); | 88 | __flush_tsb_one(tb, HPAGE_SHIFT, base, nentries); |
88 | } | 89 | } |
89 | #endif | 90 | #endif |
90 | spin_unlock_irqrestore(&mm->context.lock, flags); | 91 | spin_unlock_irqrestore(&mm->context.lock, flags); |