| .. | .. |
|---|
| 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 |
|---|