Lines Matching refs:pmd
331 pmd_t *pmd; in lookup_address_in_pgd() local
346 pmd = pmd_offset(pud, address); in lookup_address_in_pgd()
347 if (pmd_none(*pmd)) in lookup_address_in_pgd()
351 if (pmd_large(*pmd) || !pmd_present(*pmd)) in lookup_address_in_pgd()
352 return (pte_t *)pmd; in lookup_address_in_pgd()
356 return pte_offset_kernel(pmd, address); in lookup_address_in_pgd()
462 pmd_t *pmd; in __set_pmd_pte() local
466 pmd = pmd_offset(pud, address); in __set_pmd_pte()
467 set_pte_atomic((pte_t *)pmd, pte); in __set_pmd_pte()
738 static bool try_to_free_pmd_page(pmd_t *pmd) in try_to_free_pmd_page() argument
743 if (!pmd_none(pmd[i])) in try_to_free_pmd_page()
746 free_page((unsigned long)pmd); in try_to_free_pmd_page()
762 static bool unmap_pte_range(pmd_t *pmd, unsigned long start, unsigned long end) in unmap_pte_range() argument
764 pte_t *pte = pte_offset_kernel(pmd, start); in unmap_pte_range()
773 if (try_to_free_pte_page((pte_t *)pmd_page_vaddr(*pmd))) { in unmap_pte_range()
774 pmd_clear(pmd); in unmap_pte_range()
780 static void __unmap_pmd_range(pud_t *pud, pmd_t *pmd, in __unmap_pmd_range() argument
783 if (unmap_pte_range(pmd, start, end)) in __unmap_pmd_range()
790 pmd_t *pmd = pmd_offset(pud, start); in unmap_pmd_range() local
799 __unmap_pmd_range(pud, pmd, start, pre_end); in unmap_pmd_range()
802 pmd++; in unmap_pmd_range()
809 if (pmd_large(*pmd)) in unmap_pmd_range()
810 pmd_clear(pmd); in unmap_pmd_range()
812 __unmap_pmd_range(pud, pmd, start, start + PMD_SIZE); in unmap_pmd_range()
815 pmd++; in unmap_pmd_range()
822 return __unmap_pmd_range(pud, pmd, start, end); in unmap_pmd_range()
885 static int alloc_pte_page(pmd_t *pmd) in alloc_pte_page() argument
891 set_pmd(pmd, __pmd(__pa(pte) | _KERNPG_TABLE)); in alloc_pte_page()
897 pmd_t *pmd = (pmd_t *)get_zeroed_page(GFP_KERNEL | __GFP_NOTRACK); in alloc_pmd_page() local
898 if (!pmd) in alloc_pmd_page()
901 set_pud(pud, __pud(__pa(pmd) | _KERNPG_TABLE)); in alloc_pmd_page()
907 unsigned num_pages, pmd_t *pmd, pgprot_t pgprot) in populate_pte() argument
911 pte = pte_offset_kernel(pmd, start); in populate_pte()
932 pmd_t *pmd; in populate_pmd() local
949 pmd = pmd_offset(pud, start); in populate_pmd()
950 if (pmd_none(*pmd)) in populate_pmd()
951 if (alloc_pte_page(pmd)) in populate_pmd()
954 populate_pte(cpa, start, pre_end, cur_pages, pmd, pgprot); in populate_pmd()
976 pmd = pmd_offset(pud, start); in populate_pmd()
978 set_pmd(pmd, __pmd(cpa->pfn | _PAGE_PSE | in populate_pmd()
990 pmd = pmd_offset(pud, start); in populate_pmd()
991 if (pmd_none(*pmd)) in populate_pmd()
992 if (alloc_pte_page(pmd)) in populate_pmd()
996 pmd, pgprot); in populate_pmd()