|
@@ -16,49 +16,6 @@
|
|
|
#include <asm/tlbflush.h>
|
|
|
#include <asm/pgalloc.h>
|
|
|
|
|
|
-pte_t *huge_pte_alloc(struct mm_struct *mm,
|
|
|
- unsigned long addr, unsigned long sz)
|
|
|
-{
|
|
|
- pgd_t *pgd;
|
|
|
- pud_t *pud;
|
|
|
- pte_t *pte = NULL;
|
|
|
-
|
|
|
- pgd = pgd_offset(mm, addr);
|
|
|
- pud = pud_alloc(mm, pgd, addr);
|
|
|
- if (pud) {
|
|
|
- if (sz == PUD_SIZE) {
|
|
|
- pte = (pte_t *)pud;
|
|
|
- } else {
|
|
|
- BUG_ON(sz != PMD_SIZE);
|
|
|
- if (pud_none(*pud))
|
|
|
- pte = huge_pmd_share(mm, addr, pud);
|
|
|
- else
|
|
|
- pte = (pte_t *)pmd_alloc(mm, pud, addr);
|
|
|
- }
|
|
|
- }
|
|
|
- BUG_ON(pte && !pte_none(*pte) && !pte_huge(*pte));
|
|
|
-
|
|
|
- return pte;
|
|
|
-}
|
|
|
-
|
|
|
-pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
|
|
|
-{
|
|
|
- pgd_t *pgd;
|
|
|
- pud_t *pud;
|
|
|
- pmd_t *pmd = NULL;
|
|
|
-
|
|
|
- pgd = pgd_offset(mm, addr);
|
|
|
- if (pgd_present(*pgd)) {
|
|
|
- pud = pud_offset(pgd, addr);
|
|
|
- if (pud_present(*pud)) {
|
|
|
- if (pud_large(*pud))
|
|
|
- return (pte_t *)pud;
|
|
|
- pmd = pmd_offset(pud, addr);
|
|
|
- }
|
|
|
- }
|
|
|
- return (pte_t *) pmd;
|
|
|
-}
|
|
|
-
|
|
|
#if 0 /* This is just for testing */
|
|
|
struct page *
|
|
|
follow_huge_addr(struct mm_struct *mm, unsigned long address, int write)
|
|
@@ -120,30 +77,6 @@ int pud_huge(pud_t pud)
|
|
|
return !!(pud_val(pud) & _PAGE_PSE);
|
|
|
}
|
|
|
|
|
|
-struct page *
|
|
|
-follow_huge_pmd(struct mm_struct *mm, unsigned long address,
|
|
|
- pmd_t *pmd, int write)
|
|
|
-{
|
|
|
- struct page *page;
|
|
|
-
|
|
|
- page = pte_page(*(pte_t *)pmd);
|
|
|
- if (page)
|
|
|
- page += ((address & ~PMD_MASK) >> PAGE_SHIFT);
|
|
|
- return page;
|
|
|
-}
|
|
|
-
|
|
|
-struct page *
|
|
|
-follow_huge_pud(struct mm_struct *mm, unsigned long address,
|
|
|
- pud_t *pud, int write)
|
|
|
-{
|
|
|
- struct page *page;
|
|
|
-
|
|
|
- page = pte_page(*(pte_t *)pud);
|
|
|
- if (page)
|
|
|
- page += ((address & ~PUD_MASK) >> PAGE_SHIFT);
|
|
|
- return page;
|
|
|
-}
|
|
|
-
|
|
|
#endif
|
|
|
|
|
|
/* x86_64 also uses this file */
|