[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/HVM: drop __hvm_clear()
On 06/12/16 12:48, Jan Beulich wrote: > Rather than almost entirely duplicating __hvm_copy(), have __hvm_copy() > clear guest memory if the source pointer is NULL. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Ooh - thats a nice improvement. I'm sorry I didn't spot it when doing the API improvements to __hvm_copy(). > @@ -3224,95 +3227,8 @@ static enum hvm_copy_result __hvm_copy( > unmap_domain_page(p); > > addr += count; > - buf += count; > - todo -= count; > - put_page(page); > - } > - > - return HVMCOPY_okay; > -} > - > -static enum hvm_copy_result __hvm_clear(paddr_t addr, int size) > -{ > - struct vcpu *curr = current; > - unsigned long gfn; > - struct page_info *page; > - p2m_type_t p2mt; > - char *p; > - int count, todo = size; > - uint32_t pfec = PFEC_page_present | PFEC_write_access; > - > - /* > - * XXX Disable for 4.1.0: PV-on-HVM drivers will do grant-table ops > - * such as query_size. Grant-table code currently does copy_to/from_guest > - * accesses under the big per-domain lock, which this test would > disallow. > - * The test is not needed until we implement sleeping-on-waitqueue when > - * we access a paged-out frame, and that's post 4.1.0 now. > - */ > -#if 0 > - /* > - * If the required guest memory is paged out, this function may sleep. > - * Hence we bail immediately if called from atomic context. > - */ > - if ( in_atomic() ) > - return HVMCOPY_unhandleable; > -#endif > - > - while ( todo > 0 ) > - { > - count = min_t(int, PAGE_SIZE - (addr & ~PAGE_MASK), todo); > - > - gfn = paging_gva_to_gfn(curr, addr, &pfec); > - if ( gfn == gfn_x(INVALID_GFN) ) > - { > - if ( pfec & PFEC_page_paged ) > - return HVMCOPY_gfn_paged_out; > - if ( pfec & PFEC_page_shared ) > - return HVMCOPY_gfn_shared; > - return HVMCOPY_bad_gva_to_gfn; > - } > - > - page = get_page_from_gfn(curr->domain, gfn, &p2mt, P2M_UNSHARE); > - > - if ( !page ) > - return HVMCOPY_bad_gfn_to_mfn; > - > - if ( p2m_is_paging(p2mt) ) > - { > - put_page(page); > - p2m_mem_paging_populate(curr->domain, gfn); > - return HVMCOPY_gfn_paged_out; > - } > - if ( p2m_is_shared(p2mt) ) > - { > - put_page(page); > - return HVMCOPY_gfn_shared; > - } > - if ( p2m_is_grant(p2mt) ) > - { > - put_page(page); > - return HVMCOPY_unhandleable; > - } > - > - p = (char *)__map_domain_page(page) + (addr & ~PAGE_MASK); > - > - if ( p2m_is_discard_write(p2mt) ) > - { > - static unsigned long lastpage; > - if ( xchg(&lastpage, gfn) != gfn ) > - gdprintk(XENLOG_DEBUG, "guest attempted write to read-only" > - " memory page. gfn=%#lx, mfn=%#lx\n", > - gfn, page_to_mfn(page)); > - } > - else > - { > - memset(p, 0x00, count); > - paging_mark_dirty(curr->domain, page_to_mfn(page)); > - } > - > - unmap_domain_page(p); > - > - addr += count; > + if ( buf ) > + buf += count; Double space here. Otherwise, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |