[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] use clear_domain_page() instead of open coding it
On 19/10/15 15:51, Jan Beulich wrote: > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> mm bits: Acked-by: George Dunlap <george.dunlap@xxxxxxxxxx> > > --- a/xen/arch/x86/hvm/stdvga.c > +++ b/xen/arch/x86/hvm/stdvga.c > @@ -552,8 +552,7 @@ void stdvga_init(struct domain *d) > { > struct hvm_hw_stdvga *s = &d->arch.hvm_domain.stdvga; > struct page_info *pg; > - void *p; > - int i; > + unsigned int i; > > memset(s, 0, sizeof(*s)); > spin_lock_init(&s->lock); > @@ -564,9 +563,7 @@ void stdvga_init(struct domain *d) > if ( pg == NULL ) > break; > s->vram_page[i] = pg; > - p = __map_domain_page(pg); > - clear_page(p); > - unmap_domain_page(p); > + clear_domain_page(_mfn(page_to_mfn(pg))); > } > > if ( i == ARRAY_SIZE(s->vram_page) ) > --- a/xen/arch/x86/hvm/vmx/vvmx.c > +++ b/xen/arch/x86/hvm/vmx/vvmx.c > @@ -68,7 +68,7 @@ int nvmx_vcpu_initialise(struct vcpu *v) > if ( cpu_has_vmx_vmcs_shadowing ) > { > struct page_info *vmread_bitmap, *vmwrite_bitmap; > - unsigned long *vr, *vw; > + unsigned long *vw; > > vmread_bitmap = alloc_domheap_page(NULL, 0); > if ( !vmread_bitmap ) > @@ -78,6 +78,8 @@ int nvmx_vcpu_initialise(struct vcpu *v) > } > v->arch.hvm_vmx.vmread_bitmap = vmread_bitmap; > > + clear_domain_page(_mfn(page_to_mfn(vmread_bitmap))); > + > vmwrite_bitmap = alloc_domheap_page(NULL, 0); > if ( !vmwrite_bitmap ) > { > @@ -86,10 +88,7 @@ int nvmx_vcpu_initialise(struct vcpu *v) > } > v->arch.hvm_vmx.vmwrite_bitmap = vmwrite_bitmap; > > - vr = __map_domain_page(vmread_bitmap); > vw = __map_domain_page(vmwrite_bitmap); > - > - clear_page(vr); > clear_page(vw); > > /* > @@ -101,7 +100,6 @@ int nvmx_vcpu_initialise(struct vcpu *v) > set_bit(IO_BITMAP_B, vw); > set_bit(VMCS_HIGH(IO_BITMAP_B), vw); > > - unmap_domain_page(vr); > unmap_domain_page(vw); > } > > --- a/xen/arch/x86/mm/p2m.c > +++ b/xen/arch/x86/mm/p2m.c > @@ -1907,7 +1907,7 @@ p2m_flush_table(struct p2m_domain *p2m) > { > struct page_info *top, *pg; > struct domain *d = p2m->domain; > - void *p; > + mfn_t mfn; > > p2m_lock(p2m); > > @@ -1928,15 +1928,14 @@ p2m_flush_table(struct p2m_domain *p2m) > p2m->np2m_base = P2M_BASE_EADDR; > > /* Zap the top level of the trie */ > - top = mfn_to_page(pagetable_get_mfn(p2m_get_pagetable(p2m))); > - p = __map_domain_page(top); > - clear_page(p); > - unmap_domain_page(p); > + mfn = pagetable_get_mfn(p2m_get_pagetable(p2m)); > + clear_domain_page(mfn); > > /* Make sure nobody else is using this p2m table */ > nestedhvm_vmcx_flushtlb(p2m); > > /* Free the rest of the trie pages back to the paging pool */ > + top = mfn_to_page(mfn); > while ( (pg = page_list_remove_head(&p2m->pages)) ) > if ( pg != top ) > d->arch.paging.free_page(d, pg); > --- a/xen/arch/x86/mm/paging.c > +++ b/xen/arch/x86/mm/paging.c > @@ -78,12 +78,10 @@ static mfn_t paging_new_log_dirty_page(s > static mfn_t paging_new_log_dirty_leaf(struct domain *d) > { > mfn_t mfn = paging_new_log_dirty_page(d); > + > if ( mfn_valid(mfn) ) > - { > - void *leaf = map_domain_page(mfn); > - clear_page(leaf); > - unmap_domain_page(leaf); > - } > + clear_domain_page(mfn); > + > return mfn; > } > > --- a/xen/arch/x86/mm/shadow/common.c > +++ b/xen/arch/x86/mm/shadow/common.c > @@ -1437,8 +1437,7 @@ mfn_t shadow_alloc(struct domain *d, > unsigned int pages = shadow_size(shadow_type); > struct page_list_head tmp_list; > cpumask_t mask; > - void *p; > - int i; > + unsigned int i; > > ASSERT(paging_locked_by_me(d)); > ASSERT(shadow_type != SH_type_none); > @@ -1484,10 +1483,7 @@ mfn_t shadow_alloc(struct domain *d, > flush_tlb_mask(&mask); > } > /* Now safe to clear the page for reuse */ > - p = __map_domain_page(sp); > - ASSERT(p != NULL); > - clear_page(p); > - unmap_domain_page(p); > + clear_domain_page(page_to_mfn(sp)); > INIT_PAGE_LIST_ENTRY(&sp->list); > page_list_add(sp, &tmp_list); > sp->u.sh.type = shadow_type; > --- a/xen/common/page_alloc.c > +++ b/xen/common/page_alloc.c > @@ -1959,22 +1959,16 @@ __initcall(pagealloc_keyhandler_init); > > void scrub_one_page(struct page_info *pg) > { > - void *p; > - > if ( unlikely(pg->count_info & PGC_broken) ) > return; > > - p = __map_domain_page(pg); > - > #ifndef NDEBUG > /* Avoid callers relying on allocations returning zeroed pages. */ > - memset(p, 0xc2, PAGE_SIZE); > + unmap_domain_page(memset(__map_domain_page(pg), 0xc2, PAGE_SIZE)); > #else > /* For a production build, clear_page() is the fastest way to scrub. */ > - clear_page(p); > + clear_domain_page(_mfn(page_to_mfn(pg))); > #endif > - > - unmap_domain_page(p); > } > > static void dump_heap(unsigned char key) > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |