[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 24 of 25] libxc: do not align/lock buffers which do not need it
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1287650255 -3600 # Node ID 42caa87197dfe69901d4d20c6432b5914b62ac07 # Parent 970a248771788f44fac6e4139972deb3af40a280 libxc: do not align/lock buffers which do not need it On restore: region_mfn is passed to xc_map_foreign_range and xc_map_foreign_bulk. In both cases the buffer is accessed from the ioctl handler in the kernel and not from any hypercall. Therefore normal copy_{to,from}_user handling in the kernel will cope with any faulting access. p2m_batch is passed to xc_domain_memory_populate_physmap which takes care of bouncing the buffer already. On save: pfn_type is passed to xc_map_foreign_bulk which does not need locking as per region_mfn above. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> diff -r 970a24877178 -r 42caa87197df tools/libxc/xc_domain_restore.c --- a/tools/libxc/xc_domain_restore.c Thu Oct 21 09:37:35 2010 +0100 +++ b/tools/libxc/xc_domain_restore.c Thu Oct 21 09:37:35 2010 +0100 @@ -1172,10 +1172,8 @@ int xc_domain_restore(xc_interface *xch, ctx->p2m = calloc(dinfo->p2m_size, sizeof(xen_pfn_t)); pfn_type = calloc(dinfo->p2m_size, sizeof(unsigned long)); - region_mfn = xc_memalign(PAGE_SIZE, ROUNDUP( - MAX_BATCH_SIZE * sizeof(xen_pfn_t), PAGE_SHIFT)); - ctx->p2m_batch = xc_memalign( - PAGE_SIZE, ROUNDUP(MAX_BATCH_SIZE * sizeof(xen_pfn_t), PAGE_SHIFT)); + region_mfn = malloc(ROUNDUP(MAX_BATCH_SIZE * sizeof(xen_pfn_t), PAGE_SHIFT)); + ctx->p2m_batch = malloc(ROUNDUP(MAX_BATCH_SIZE * sizeof(xen_pfn_t), PAGE_SHIFT)); if ( (ctx->p2m == NULL) || (pfn_type == NULL) || (region_mfn == NULL) || (ctx->p2m_batch == NULL) ) @@ -1189,18 +1187,6 @@ int xc_domain_restore(xc_interface *xch, ROUNDUP(MAX_BATCH_SIZE * sizeof(xen_pfn_t), PAGE_SHIFT)); memset(ctx->p2m_batch, 0, ROUNDUP(MAX_BATCH_SIZE * sizeof(xen_pfn_t), PAGE_SHIFT)); - - if ( lock_pages(xch, region_mfn, sizeof(xen_pfn_t) * MAX_BATCH_SIZE) ) - { - PERROR("Could not lock region_mfn"); - goto out; - } - - if ( lock_pages(xch, ctx->p2m_batch, sizeof(xen_pfn_t) * MAX_BATCH_SIZE) ) - { - ERROR("Could not lock p2m_batch"); - goto out; - } /* Get the domain's shared-info frame. */ domctl.cmd = XEN_DOMCTL_getdomaininfo; diff -r 970a24877178 -r 42caa87197df tools/libxc/xc_domain_save.c --- a/tools/libxc/xc_domain_save.c Thu Oct 21 09:37:35 2010 +0100 +++ b/tools/libxc/xc_domain_save.c Thu Oct 21 09:37:35 2010 +0100 @@ -1071,8 +1071,7 @@ int xc_domain_save(xc_interface *xch, in analysis_phase(xch, dom, ctx, HYPERCALL_BUFFER(to_skip), 0); - pfn_type = xc_memalign(PAGE_SIZE, ROUNDUP( - MAX_BATCH_SIZE * sizeof(*pfn_type), PAGE_SHIFT)); + pfn_type = malloc(ROUNDUP(MAX_BATCH_SIZE * sizeof(*pfn_type), PAGE_SHIFT)); pfn_batch = calloc(MAX_BATCH_SIZE, sizeof(*pfn_batch)); pfn_err = malloc(MAX_BATCH_SIZE * sizeof(*pfn_err)); if ( (pfn_type == NULL) || (pfn_batch == NULL) || (pfn_err == NULL) ) @@ -1083,12 +1082,6 @@ int xc_domain_save(xc_interface *xch, in } memset(pfn_type, 0, ROUNDUP(MAX_BATCH_SIZE * sizeof(*pfn_type), PAGE_SHIFT)); - - if ( lock_pages(xch, pfn_type, MAX_BATCH_SIZE * sizeof(*pfn_type)) ) - { - PERROR("Unable to lock pfn_type array"); - goto out; - } /* Setup the mfn_to_pfn table mapping */ if ( !(ctx->live_m2p = xc_map_m2p(xch, ctx->max_mfn, PROT_READ, &ctx->m2p_mfn0)) ) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |