diff options
author | David Vrabel <david.vrabel@citrix.com> | 2014-12-15 17:41:00 +0100 |
---|---|---|
committer | David Vrabel <david.vrabel@citrix.com> | 2014-12-15 17:41:00 +0100 |
commit | f1d04b23b2015b4c3c0a8419677179b133afea08 (patch) | |
tree | 7ab467f8725f1a0e07b01ef32f3b3f412a3384d2 /arch/x86/mm/pageattr.c | |
parent | Revert "swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single" (diff) | |
parent | xen: switch to post-init routines in xen mmu.c earlier (diff) | |
download | linux-f1d04b23b2015b4c3c0a8419677179b133afea08.tar.xz linux-f1d04b23b2015b4c3c0a8419677179b133afea08.zip |
Merge branch 'devel/for-linus-3.19' into stable/for-linus-3.19
Diffstat (limited to 'arch/x86/mm/pageattr.c')
-rw-r--r-- | arch/x86/mm/pageattr.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 36de293caf25..129810887e83 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c @@ -384,6 +384,26 @@ static pte_t *_lookup_address_cpa(struct cpa_data *cpa, unsigned long address, } /* + * 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() * areas on 32-bit NUMA systems. The percpu areas can |