|
@@ -5,39 +5,24 @@
|
|
|
#include <asm/cacheflush.h>
|
|
|
#include <asm/machdep.h>
|
|
|
#include <asm/mman.h>
|
|
|
+#include <asm/tlb.h>
|
|
|
|
|
|
void radix__flush_hugetlb_page(struct vm_area_struct *vma, unsigned long vmaddr)
|
|
|
{
|
|
|
- unsigned long ap, shift;
|
|
|
+ int psize;
|
|
|
struct hstate *hstate = hstate_file(vma->vm_file);
|
|
|
|
|
|
- shift = huge_page_shift(hstate);
|
|
|
- if (shift == mmu_psize_defs[MMU_PAGE_2M].shift)
|
|
|
- ap = mmu_get_ap(MMU_PAGE_2M);
|
|
|
- else if (shift == mmu_psize_defs[MMU_PAGE_1G].shift)
|
|
|
- ap = mmu_get_ap(MMU_PAGE_1G);
|
|
|
- else {
|
|
|
- WARN(1, "Wrong huge page shift\n");
|
|
|
- return ;
|
|
|
- }
|
|
|
- radix__flush_tlb_page_psize(vma->vm_mm, vmaddr, ap);
|
|
|
+ psize = hstate_get_psize(hstate);
|
|
|
+ radix__flush_tlb_page_psize(vma->vm_mm, vmaddr, psize);
|
|
|
}
|
|
|
|
|
|
void radix__local_flush_hugetlb_page(struct vm_area_struct *vma, unsigned long vmaddr)
|
|
|
{
|
|
|
- unsigned long ap, shift;
|
|
|
+ int psize;
|
|
|
struct hstate *hstate = hstate_file(vma->vm_file);
|
|
|
|
|
|
- shift = huge_page_shift(hstate);
|
|
|
- if (shift == mmu_psize_defs[MMU_PAGE_2M].shift)
|
|
|
- ap = mmu_get_ap(MMU_PAGE_2M);
|
|
|
- else if (shift == mmu_psize_defs[MMU_PAGE_1G].shift)
|
|
|
- ap = mmu_get_ap(MMU_PAGE_1G);
|
|
|
- else {
|
|
|
- WARN(1, "Wrong huge page shift\n");
|
|
|
- return ;
|
|
|
- }
|
|
|
- radix__local_flush_tlb_page_psize(vma->vm_mm, vmaddr, ap);
|
|
|
+ psize = hstate_get_psize(hstate);
|
|
|
+ radix__local_flush_tlb_page_psize(vma->vm_mm, vmaddr, psize);
|
|
|
}
|
|
|
|
|
|
/*
|