[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v8 03/15] x86/mm: rewrite virt_to_xen_l*e
On Fri, 2020-08-07 at 16:05 +0200, Jan Beulich wrote: > On 27.07.2020 16:21, Hongyan Xia wrote: > > From: Wei Liu <wei.liu2@xxxxxxxxxx> > > > > Rewrite those functions to use the new APIs. Modify its callers to > > unmap > > the pointer returned. Since alloc_xen_pagetable_new() is almost > > never > > useful unless accompanied by page clearing and a mapping, introduce > > a > > helper alloc_map_clear_xen_pt() for this sequence. > > > > Note that the change of virt_to_xen_l1e() also requires > > vmap_to_mfn() to > > unmap the page, which requires domain_page.h header in vmap. > > > > Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> > > Signed-off-by: Hongyan Xia <hongyxia@xxxxxxxxxx> > > Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> > > > > --- > > Changed in v8: > > - s/virtual address/linear address/. > > - BUG_ON() on NULL return in vmap_to_mfn(). > > The justification for this should be recorded in the description. In Will do. > reply to v7 I did even suggest how to easily address the issue you > did notice with large pages, as well as alternative behavior for > vmap_to_mfn(). One thing about adding SMALL_PAGES is that vmap is common code and I am not sure if the Arm side is happy with it. > > > --- a/xen/include/asm-x86/page.h > > +++ b/xen/include/asm-x86/page.h > > @@ -291,7 +291,15 @@ 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) _mfn(l1e_get_pfn(*virt_to_xen_l1e((unsigned > > long)(va)))) > > + > > +#define vmap_to_mfn(va) > > ({ \ > > + const l1_pgentry_t *pl1e_ = virt_to_xen_l1e((unsigned > > long)(va)); \ > > + mfn_t > > mfn_; \ > > + BUG_ON(!pl1e_); > > \ > > + mfn_ = > > l1e_get_mfn(*pl1e_); \ > > + unmap_domain_page(pl1e_); > > \ > > + mfn_; }) > > Additionally - no idea why I only notice this now, this wants some > further formatting adjustment: Either > > #define vmap_to_mfn(va) > ({ \ > const l1_pgentry_t *pl1e_ = virt_to_xen_l1e((unsigned > long)(va)); \ > mfn_t > mfn_; \ > BUG_ON(!pl1e_); > \ > mfn_ = > l1e_get_mfn(*pl1e_); \ > unmap_domain_page(pl1e_); > \ > mfn_; > \ > }) > > or (preferably imo) > > #define vmap_to_mfn(va) > ({ \ > const l1_pgentry_t *pl1e_ = virt_to_xen_l1e((unsigned long)(va)); > \ > mfn_t > mfn_; \ > BUG_ON(!pl1e_); > \ > mfn_ = > l1e_get_mfn(*pl1e_); \ > unmap_domain_page(pl1e_); > \ > mfn_; > \ > }) Will do so in the next rev. Hongyan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |