[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 01/23] xen: factor out construct_memop_from_reservation
No functional change. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> Cc: Jan Beulich <JBeulich@xxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/common/memory.c | 52 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/xen/common/memory.c b/xen/common/memory.c index e84ace9..d24b001 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -692,11 +692,43 @@ out: return rc; } +static int construct_memop_from_reservation( + const struct xen_memory_reservation *r, + struct memop_args *a) +{ + int rc; + 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 ) + { + rc = -EINVAL; + goto out; + } + 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; + + rc = 0; + out: + return rc; +} + 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 +750,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; 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 ( construct_memop_from_reservation(&reservation, &args) ) + return start_extent; if ( op == XENMEM_populate_physmap && (reservation.mem_flags & XENMEMF_populate_on_demand) ) -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |