X-Git-Url: http://git.cascardo.info/?p=cascardo%2Flinux.git;a=blobdiff_plain;f=arch%2Fx86%2Fmm%2Fpageattr.c;h=536ea2fb6e335677df559390520c3312976dcb81;hp=dfaf2e0f5f8fc504908266cd1767e16fb64afaff;hb=eb64c3c6cdb8fa8a4d324eb71a9033b62e150918;hpb=61de8e53640ceeda564a65170a46c1edc2b37e11 diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index dfaf2e0f5f8f..536ea2fb6e33 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c @@ -383,6 +383,26 @@ static pte_t *_lookup_address_cpa(struct cpa_data *cpa, unsigned long address, return lookup_address(address, level); } +/* + * Lookup the PMD entry for a virtual address. Return a pointer to the entry + * or NULL if not present. + */ +pmd_t *lookup_pmd_address(unsigned long address) +{ + pgd_t *pgd; + pud_t *pud; + + pgd = pgd_offset_k(address); + if (pgd_none(*pgd)) + return NULL; + + pud = pud_offset(pgd, address); + if (pud_none(*pud) || pud_large(*pud) || !pud_present(*pud)) + return NULL; + + return pmd_offset(pud, address); +} + /* * This is necessary because __pa() does not work on some * kinds of memory, like vmalloc() or the alloc_remap()