[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] use clear_domain_page() instead of open coding it
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- 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) Attachment:
use-clear_domain_page.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |