[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V3 5/8] x86: Introduce function to get pmd entry pointer
On Tue, Nov 11, 2014 at 06:43:43AM +0100, Juergen Gross wrote: > Introduces lookup_pmd_address() to get the address of the pmd entry > related to a virtual address in the current address space. This > function is needed for support of a virtual mapped sparse p2m list > in xen pv domains. > What is wrong with using 'lookup_address' ? > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> > --- > arch/x86/include/asm/pgtable_types.h | 1 + > arch/x86/mm/pageattr.c | 20 ++++++++++++++++++++ > 2 files changed, 21 insertions(+) > > diff --git a/arch/x86/include/asm/pgtable_types.h > b/arch/x86/include/asm/pgtable_types.h > index 0778964..d83f5e7 100644 > --- a/arch/x86/include/asm/pgtable_types.h > +++ b/arch/x86/include/asm/pgtable_types.h > @@ -396,6 +396,7 @@ static inline void update_page_count(int level, unsigned > long pages) { } > extern pte_t *lookup_address(unsigned long address, unsigned int *level); > extern pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address, > unsigned int *level); > +extern pmd_t *lookup_pmd_address(unsigned long address); > extern phys_addr_t slow_virt_to_phys(void *__address); > extern int kernel_map_pages_in_pgd(pgd_t *pgd, u64 pfn, unsigned long > address, > unsigned numpages, unsigned long page_flags); > diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c > index 36de293..1298108 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 > -- > 2.1.2 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |