.. | .. |
---|
8 | 8 | #include <linux/sched.h> |
---|
9 | 9 | #include <asm/mmu_context.h> |
---|
10 | 10 | |
---|
11 | | - |
---|
12 | | -/* This is for the serialisation of PxTLB broadcasts. At least on the |
---|
13 | | - * N class systems, only one PxTLB inter processor broadcast can be |
---|
14 | | - * active at any one time on the Merced bus. This tlb purge |
---|
15 | | - * synchronisation is fairly lightweight and harmless so we activate |
---|
16 | | - * it on all systems not just the N class. |
---|
17 | | - |
---|
18 | | - * It is also used to ensure PTE updates are atomic and consistent |
---|
19 | | - * with the TLB. |
---|
20 | | - */ |
---|
21 | | -extern spinlock_t pa_tlb_lock; |
---|
22 | | - |
---|
23 | | -#define purge_tlb_start(flags) spin_lock_irqsave(&pa_tlb_lock, flags) |
---|
24 | | -#define purge_tlb_end(flags) spin_unlock_irqrestore(&pa_tlb_lock, flags) |
---|
25 | | - |
---|
26 | 11 | extern void flush_tlb_all(void); |
---|
27 | 12 | extern void flush_tlb_all_local(void *); |
---|
28 | 13 | |
---|
.. | .. |
---|
79 | 64 | static inline void flush_tlb_page(struct vm_area_struct *vma, |
---|
80 | 65 | unsigned long addr) |
---|
81 | 66 | { |
---|
82 | | - unsigned long flags, sid; |
---|
83 | | - |
---|
84 | | - sid = vma->vm_mm->context; |
---|
85 | | - purge_tlb_start(flags); |
---|
86 | | - mtsp(sid, 1); |
---|
87 | | - pdtlb(addr); |
---|
88 | | - if (unlikely(split_tlb)) |
---|
89 | | - pitlb(addr); |
---|
90 | | - purge_tlb_end(flags); |
---|
| 67 | + purge_tlb_entries(vma->vm_mm, addr); |
---|
91 | 68 | } |
---|
92 | 69 | #endif |
---|