powerpc/mm: remove flush_tlb_page_nohash
This should be same as flush_tlb_page except for hash32. For hash32 I guess the existing code is wrong, because we don't seem to be flushing tlb for Hash != 0 case at all. Fix this by switching to calling flush_tlb_page() which does the right thing by flushing tlb for both hash and nohash case with hash32 Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
5491ae7b6f
commit
703b41ad1a
|
@ -75,11 +75,6 @@ static inline void hash__flush_tlb_page(struct vm_area_struct *vma,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void hash__flush_tlb_page_nohash(struct vm_area_struct *vma,
|
|
||||||
unsigned long vmaddr)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void hash__flush_tlb_range(struct vm_area_struct *vma,
|
static inline void hash__flush_tlb_range(struct vm_area_struct *vma,
|
||||||
unsigned long start, unsigned long end)
|
unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,14 +57,6 @@ static inline void local_flush_tlb_page(struct vm_area_struct *vma,
|
||||||
return hash__local_flush_tlb_page(vma, vmaddr);
|
return hash__local_flush_tlb_page(vma, vmaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void flush_tlb_page_nohash(struct vm_area_struct *vma,
|
|
||||||
unsigned long vmaddr)
|
|
||||||
{
|
|
||||||
if (radix_enabled())
|
|
||||||
return radix__flush_tlb_page(vma, vmaddr);
|
|
||||||
return hash__flush_tlb_page_nohash(vma, vmaddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void tlb_flush(struct mmu_gather *tlb)
|
static inline void tlb_flush(struct mmu_gather *tlb)
|
||||||
{
|
{
|
||||||
if (radix_enabled())
|
if (radix_enabled())
|
||||||
|
|
|
@ -54,7 +54,6 @@ extern void __flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr,
|
||||||
#define flush_tlb_page(vma,addr) local_flush_tlb_page(vma,addr)
|
#define flush_tlb_page(vma,addr) local_flush_tlb_page(vma,addr)
|
||||||
#define __flush_tlb_page(mm,addr,p,i) __local_flush_tlb_page(mm,addr,p,i)
|
#define __flush_tlb_page(mm,addr,p,i) __local_flush_tlb_page(mm,addr,p,i)
|
||||||
#endif
|
#endif
|
||||||
#define flush_tlb_page_nohash(vma,addr) flush_tlb_page(vma,addr)
|
|
||||||
|
|
||||||
#elif defined(CONFIG_PPC_STD_MMU_32)
|
#elif defined(CONFIG_PPC_STD_MMU_32)
|
||||||
|
|
||||||
|
|
|
@ -225,7 +225,7 @@ int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long address,
|
||||||
if (!is_vm_hugetlb_page(vma))
|
if (!is_vm_hugetlb_page(vma))
|
||||||
assert_pte_locked(vma->vm_mm, address);
|
assert_pte_locked(vma->vm_mm, address);
|
||||||
__ptep_set_access_flags(ptep, entry);
|
__ptep_set_access_flags(ptep, entry);
|
||||||
flush_tlb_page_nohash(vma, address);
|
flush_tlb_page(vma, address);
|
||||||
}
|
}
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,17 +48,6 @@ void flush_hash_entry(struct mm_struct *mm, pte_t *ptep, unsigned long addr)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(flush_hash_entry);
|
EXPORT_SYMBOL(flush_hash_entry);
|
||||||
|
|
||||||
/*
|
|
||||||
* Called by ptep_set_access_flags, must flush on CPUs for which the
|
|
||||||
* DSI handler can't just "fixup" the TLB on a write fault
|
|
||||||
*/
|
|
||||||
void flush_tlb_page_nohash(struct vm_area_struct *vma, unsigned long addr)
|
|
||||||
{
|
|
||||||
if (Hash != 0)
|
|
||||||
return;
|
|
||||||
_tlbie(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called at the end of a mmu_gather operation to make sure the
|
* Called at the end of a mmu_gather operation to make sure the
|
||||||
* TLB flush is completely done.
|
* TLB flush is completely done.
|
||||||
|
|
Loading…
Reference in New Issue