Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4dcaebbf authored by David Vrabel's avatar David Vrabel Committed by Konrad Rzeszutek Wilk
Browse files

xen: use generic functions instead of xen_{alloc, free}_vm_area()



Replace calls to the Xen-specific xen_alloc_vm_area() and
xen_free_vm_area() functions with the generic equivalent
(alloc_vm_area() and free_vm_area()).

On x86, these were identical already.

Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent a102a9ec
Loading
Loading
Loading
Loading
+0 −29
Original line number Diff line number Diff line
/******************************************************************************
 * arch/ia64/include/asm/xen/grant_table.h
 *
 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
 *                    VA Linux Systems Japan K.K.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#ifndef _ASM_IA64_XEN_GRANT_TABLE_H
#define _ASM_IA64_XEN_GRANT_TABLE_H

struct vm_struct *xen_alloc_vm_area(unsigned long size);
void xen_free_vm_area(struct vm_struct *area);

#endif /* _ASM_IA64_XEN_GRANT_TABLE_H */
+0 −62
Original line number Diff line number Diff line
@@ -31,68 +31,6 @@

#include <asm/xen/hypervisor.h>

struct vm_struct *xen_alloc_vm_area(unsigned long size)
{
	int order;
	unsigned long virt;
	unsigned long nr_pages;
	struct vm_struct *area;

	order = get_order(size);
	virt = __get_free_pages(GFP_KERNEL, order);
	if (virt == 0)
		goto err0;
	nr_pages = 1 << order;
	scrub_pages(virt, nr_pages);

	area = kmalloc(sizeof(*area), GFP_KERNEL);
	if (area == NULL)
		goto err1;

	area->flags = VM_IOREMAP;
	area->addr = (void *)virt;
	area->size = size;
	area->pages = NULL;
	area->nr_pages = nr_pages;
	area->phys_addr = 0;	/* xenbus_map_ring_valloc uses this field!  */

	return area;

err1:
	free_pages(virt, order);
err0:
	return NULL;
}
EXPORT_SYMBOL_GPL(xen_alloc_vm_area);

void xen_free_vm_area(struct vm_struct *area)
{
	unsigned int order = get_order(area->size);
	unsigned long i;
	unsigned long phys_addr = __pa(area->addr);

	/* This area is used for foreign page mappping.
	 * So underlying machine page may not be assigned. */
	for (i = 0; i < (1 << order); i++) {
		unsigned long ret;
		unsigned long gpfn = (phys_addr >> PAGE_SHIFT) + i;
		struct xen_memory_reservation reservation = {
			.nr_extents   = 1,
			.address_bits = 0,
			.extent_order = 0,
			.domid        = DOMID_SELF
		};
		set_xen_guest_handle(reservation.extent_start, &gpfn);
		ret = HYPERVISOR_memory_op(XENMEM_populate_physmap,
					   &reservation);
		BUG_ON(ret != 1);
	}
	free_pages((unsigned long)area->addr, order);
	kfree(area);
}
EXPORT_SYMBOL_GPL(xen_free_vm_area);


/****************************************************************************
 * grant table hack
 * cmd: GNTTABOP_xxx
+0 −7
Original line number Diff line number Diff line
#ifndef _ASM_X86_XEN_GRANT_TABLE_H
#define _ASM_X86_XEN_GRANT_TABLE_H

#define xen_alloc_vm_area(size)	alloc_vm_area(size)
#define xen_free_vm_area(area)	free_vm_area(area)

#endif /* _ASM_X86_XEN_GRANT_TABLE_H */
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes,

	if (shared == NULL) {
		struct vm_struct *area =
			xen_alloc_vm_area(PAGE_SIZE * max_nr_gframes);
			alloc_vm_area(PAGE_SIZE * max_nr_gframes);
		BUG_ON(area == NULL);
		shared = area->addr;
		*__shared = shared;
+3 −3
Original line number Diff line number Diff line
@@ -443,7 +443,7 @@ int xenbus_map_ring_valloc(struct xenbus_device *dev, int gnt_ref, void **vaddr)

	*vaddr = NULL;

	area = xen_alloc_vm_area(PAGE_SIZE);
	area = alloc_vm_area(PAGE_SIZE);
	if (!area)
		return -ENOMEM;

@@ -453,7 +453,7 @@ int xenbus_map_ring_valloc(struct xenbus_device *dev, int gnt_ref, void **vaddr)
		BUG();

	if (op.status != GNTST_okay) {
		xen_free_vm_area(area);
		free_vm_area(area);
		xenbus_dev_fatal(dev, op.status,
				 "mapping in shared page %d from domain %d",
				 gnt_ref, dev->otherend_id);
@@ -552,7 +552,7 @@ int xenbus_unmap_ring_vfree(struct xenbus_device *dev, void *vaddr)
		BUG();

	if (op.status == GNTST_okay)
		xen_free_vm_area(area);
		free_vm_area(area);
	else
		xenbus_dev_error(dev, op.status,
				 "unmapping page at handle %d error %d",
Loading