[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] x86/vmap: handle superpages in vmap_to_mfn()
On 03.12.2020 12:21, Hongyan Xia wrote: > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -5194,6 +5194,60 @@ l1_pgentry_t *virt_to_xen_l1e(unsigned long v) > } \ > } while ( false ) > > +/* Translate mapped Xen address to MFN. */ > +mfn_t xen_map_to_mfn(unsigned long va) > +{ > +#define CHECK_MAPPED(cond_) \ > + if ( !(cond_) ) \ > + { \ > + ASSERT_UNREACHABLE(); \ > + ret = INVALID_MFN; \ > + goto out; \ > + } \ This should be coded such that use sites ... > + bool locking = system_state > SYS_STATE_boot; > + unsigned int l2_offset = l2_table_offset(va); > + unsigned int l1_offset = l1_table_offset(va); > + const l3_pgentry_t *pl3e = virt_to_xen_l3e(va); > + const l2_pgentry_t *pl2e = NULL; > + const l1_pgentry_t *pl1e = NULL; > + struct page_info *l3page; > + mfn_t ret; > + > + L3T_INIT(l3page); > + CHECK_MAPPED(pl3e) > + l3page = virt_to_page(pl3e); > + L3T_LOCK(l3page); > + > + CHECK_MAPPED(l3e_get_flags(*pl3e) & _PAGE_PRESENT) ... will properly require a statement-ending semicolon. With additionally the trailing underscore dropped from the macro's parameter name Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Or wait, > --- a/xen/include/asm-x86/mm.h > +++ b/xen/include/asm-x86/mm.h > @@ -578,6 +578,7 @@ mfn_t alloc_xen_pagetable_new(void); > void free_xen_pagetable_new(mfn_t mfn); > > l1_pgentry_t *virt_to_xen_l1e(unsigned long v); > +mfn_t xen_map_to_mfn(unsigned long va); This is now a pretty proper companion of map_page_to_xen(), and hence imo ought to be declared next to that one rather than here. Ultimately Arm may also need to gain an implementation. > --- a/xen/include/asm-x86/page.h > +++ b/xen/include/asm-x86/page.h > @@ -291,7 +291,7 @@ void copy_page_sse2(void *, const void *); > #define pfn_to_paddr(pfn) __pfn_to_paddr(pfn) > #define paddr_to_pfn(pa) __paddr_to_pfn(pa) > #define paddr_to_pdx(pa) pfn_to_pdx(paddr_to_pfn(pa)) > -#define vmap_to_mfn(va) l1e_get_mfn(*virt_to_xen_l1e((unsigned > long)(va))) > +#define vmap_to_mfn(va) xen_map_to_mfn((unsigned long)va) You've lost parentheses around va. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |