summaryrefslogtreecommitdiffstats
path: root/arch/tile/mm/pgtable.c
diff options
context:
space:
mode:
authorChris Metcalf <cmetcalf@tilera.com>2013-08-10 19:15:46 +0200
committerChris Metcalf <cmetcalf@tilera.com>2013-08-30 17:57:02 +0200
commita718e10cbaa28035b7ab510d68fef68524454e1a (patch)
tree64b9283a5d94e2aa78046cc52f47757a8224d8ed /arch/tile/mm/pgtable.c
parenttilegx: change how we find the kernel stack (diff)
downloadlinux-a718e10cbaa28035b7ab510d68fef68524454e1a.tar.xz
linux-a718e10cbaa28035b7ab510d68fef68524454e1a.zip
tile: handle super huge pages in virt_to_pte
This tile-specific API had a minor bug, in that if a super huge (>4GB) page mapped a particular address range, we wouldn't handle it correctly. As part of fixing that bug, I also cleaned up some of the pud and pmd accessors to make them more consistent. Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'arch/tile/mm/pgtable.c')
-rw-r--r--arch/tile/mm/pgtable.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/tile/mm/pgtable.c b/arch/tile/mm/pgtable.c
index e41487e22163..300443389671 100644
--- a/arch/tile/mm/pgtable.c
+++ b/arch/tile/mm/pgtable.c
@@ -338,6 +338,8 @@ pte_t *virt_to_pte(struct mm_struct* mm, unsigned long addr)
pud = pud_offset(pgd, addr);
if (!pud_present(*pud))
return NULL;
+ if (pud_huge_page(*pud))
+ return (pte_t *)pud;
pmd = pmd_offset(pud, addr);
if (pmd_huge_page(*pmd))
return (pte_t *)pmd;
@@ -345,6 +347,7 @@ pte_t *virt_to_pte(struct mm_struct* mm, unsigned long addr)
return NULL;
return pte_offset_kernel(pmd, addr);
}
+EXPORT_SYMBOL(virt_to_pte);
pgprot_t set_remote_cache_cpu(pgprot_t prot, int cpu)
{