[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] factor out construct_memop_from_reservation
commit a714fdb0858130a74998ab7c8bb0d58b5d614def Author: Wei Liu <wei.liu2@xxxxxxxxxx> AuthorDate: Fri Feb 27 17:56:20 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Feb 27 17:56:20 2015 +0100 factor out construct_memop_from_reservation No functional change. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/common/memory.c | 46 +++++++++++++++++++++++++++++----------------- 1 files changed, 29 insertions(+), 17 deletions(-) diff --git a/xen/common/memory.c b/xen/common/memory.c index e84ace9..9d9d43c 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -692,11 +692,37 @@ out: return rc; } +static int construct_memop_from_reservation( + const struct xen_memory_reservation *r, + struct memop_args *a) +{ + unsigned int address_bits; + + a->extent_list = r->extent_start; + a->nr_extents = r->nr_extents; + a->extent_order = r->extent_order; + a->memflags = 0; + + address_bits = XENMEMF_get_address_bits(r->mem_flags); + if ( (address_bits != 0) && + (address_bits < (get_order_from_pages(max_page) + PAGE_SHIFT)) ) + { + if ( address_bits <= PAGE_SHIFT ) + return -EINVAL; + a->memflags = MEMF_bits(address_bits); + } + + a->memflags |= MEMF_node(XENMEMF_get_node(r->mem_flags)); + if ( r->mem_flags & XENMEMF_exact_node_request ) + a->memflags |= MEMF_exact_node; + + return 0; +} + long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg) { struct domain *d; long rc; - unsigned int address_bits; struct xen_memory_reservation reservation; struct memop_args args; domid_t domid; @@ -718,25 +744,11 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg) if ( unlikely(start_extent >= reservation.nr_extents) ) return start_extent; - args.extent_list = reservation.extent_start; - args.nr_extents = reservation.nr_extents; - args.extent_order = reservation.extent_order; + if ( construct_memop_from_reservation(&reservation, &args) ) + return start_extent; args.nr_done = start_extent; args.preempted = 0; - args.memflags = 0; - - address_bits = XENMEMF_get_address_bits(reservation.mem_flags); - if ( (address_bits != 0) && - (address_bits < (get_order_from_pages(max_page) + PAGE_SHIFT)) ) - { - if ( address_bits <= PAGE_SHIFT ) - return start_extent; - args.memflags = MEMF_bits(address_bits); - } - args.memflags |= MEMF_node(XENMEMF_get_node(reservation.mem_flags)); - if ( reservation.mem_flags & XENMEMF_exact_node_request ) - args.memflags |= MEMF_exact_node; if ( op == XENMEM_populate_physmap && (reservation.mem_flags & XENMEMF_populate_on_demand) ) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |