WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [IA64] linux: remove dom0vp_populate_physmap hypercall

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [IA64] linux: remove dom0vp_populate_physmap hypercall
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 23 May 2006 12:44:37 +0000
Delivery-date: Tue, 23 May 2006 05:50:17 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID d86236cb824add297127444ab69ef5ed00b71506
# Parent  8c0d89f8d0f7aab80fd4e0331468bb299cf9ad1d
[IA64] linux: remove dom0vp_populate_physmap hypercall

dom0 vp model: remove populate_physmap hypercall which becomes unnecesarry
because xenmem operation is fully supported by the previous patch.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile |    2 
 linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c     |  174 +++++++++++---------
 linux-2.6-xen-sparse/arch/ia64/xen/util.c           |   19 +-
 linux-2.6-xen-sparse/include/asm-ia64/hypercall.h   |   24 --
 4 files changed, 113 insertions(+), 106 deletions(-)

diff -r 8c0d89f8d0f7 -r d86236cb824a 
linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile
--- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile       Fri May 12 
08:49:40 2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile       Fri May 12 
08:53:49 2006 -0600
@@ -8,7 +8,7 @@ obj-y   += core/
 #obj-y += char/
 obj-y  += console/
 obj-y  += evtchn/
-#obj-y += balloon/
+obj-$(CONFIG_XEN_IA64_DOM0_VP) += balloon/
 obj-y  += privcmd/
 obj-y  += xenbus/
 
diff -r 8c0d89f8d0f7 -r d86236cb824a 
linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c   Fri May 12 08:49:40 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c   Fri May 12 08:53:49 
2006 -0600
@@ -26,14 +26,8 @@
 #include <asm/page.h>
 #include <asm/hypervisor.h>
 #include <asm/hypercall.h>
-
-#define XEN_IA64_BALLOON_IS_NOT_YET
-#ifndef XEN_IA64_BALLOON_IS_NOT_YET
+#include <xen/interface/memory.h>
 #include <xen/balloon.h>
-#else
-#define balloon_lock(flags)    ((void)flags)
-#define balloon_unlock(flags)  ((void)flags)
-#endif
 
 //XXX xen/ia64 copy_from_guest() is broken.
 //    This is a temporal work around until it is fixed.
@@ -148,6 +142,39 @@ static void contiguous_bitmap_clear(
        }
 }
 
+static unsigned long
+HYPERVISOR_populate_physmap(unsigned long gpfn, unsigned int extent_order,
+                           unsigned int address_bits)
+{
+       unsigned long ret;
+        struct xen_memory_reservation reservation = {
+               .nr_extents   = 1,
+                .address_bits = address_bits,
+                .extent_order = extent_order,
+                .domid        = DOMID_SELF
+        };
+       set_xen_guest_handle(reservation.extent_start, &gpfn);
+       ret = HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation);
+       BUG_ON(ret != 1);
+       return 0;
+}
+
+static unsigned long
+HYPERVISOR_remove_physmap(unsigned long gpfn, unsigned int extent_order)
+{
+       unsigned long ret;
+       struct xen_memory_reservation reservation = {
+               .nr_extents   = 1,
+               .address_bits = 0,
+               .extent_order = extent_order,
+               .domid        = DOMID_SELF
+       };
+       set_xen_guest_handle(reservation.extent_start, &gpfn);
+       ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation);
+       BUG_ON(ret != 1);
+       return 0;
+}
+
 /* Ensure multi-page extents are contiguous in machine memory. */
 int
 __xen_create_contiguous_region(unsigned long vstart,
@@ -156,29 +183,29 @@ __xen_create_contiguous_region(unsigned 
        unsigned long error = 0;
        unsigned long gphys = __pa(vstart);
        unsigned long start_gpfn = gphys >> PAGE_SHIFT;
-       unsigned long num_pfn = 1 << order;
+       unsigned long num_gpfn = 1 << order;
        unsigned long i;
        unsigned long flags;
 
-       scrub_pages(vstart, 1 << order);
+       scrub_pages(vstart, num_gpfn);
 
        balloon_lock(flags);
 
-       //XXX order
-       for (i = 0; i < num_pfn; i++) {
-               error = HYPERVISOR_zap_physmap(start_gpfn + i, 0);
-               if (error) {
-                       goto out;
-               }
+       error = HYPERVISOR_remove_physmap(start_gpfn, order);
+       if (error) {
+               goto fail;
        }
 
        error = HYPERVISOR_populate_physmap(start_gpfn, order, address_bits);
-       contiguous_bitmap_set(start_gpfn, 1UL << order);
+       if (error) {
+               goto fail;
+       }
+       contiguous_bitmap_set(start_gpfn, num_gpfn);
 #if 0
        {
        unsigned long mfn;
        unsigned long mfn_prev = ~0UL;
-       for (i = 0; i < 1 << order; i++) {
+       for (i = 0; i < num_gpfn; i++) {
                mfn = pfn_to_mfn_for_dma(start_gpfn + i);
                if (mfn_prev != ~0UL && mfn != mfn_prev + 1) {
                        xprintk("\n");
@@ -188,7 +215,7 @@ __xen_create_contiguous_region(unsigned 
                                vstart, virt_to_bus((void*)vstart),
                                phys_to_machine_for_dma(gphys));
                        xprintk("mfn: ");
-                       for (i = 0; i < 1 << order; i++) {
+                       for (i = 0; i < num_gpfn; i++) {
                                mfn = pfn_to_mfn_for_dma(start_gpfn + i);
                                xprintk("0x%lx ", mfn);
                        }
@@ -202,44 +229,73 @@ out:
 out:
        balloon_unlock(flags);
        return error;
+
+fail:
+       for (i = 0; i < num_gpfn; i++) {
+               error = HYPERVISOR_populate_physmap(start_gpfn + i, 0, 0);
+               if (error) {
+                       BUG();//XXX
+               }
+       }
+       goto out;
 }
 
 void
 __xen_destroy_contiguous_region(unsigned long vstart, unsigned int order)
 {
+       unsigned long flags;
        unsigned long error = 0;
-       unsigned long gphys = __pa(vstart);
-       unsigned long start_gpfn = gphys >> PAGE_SHIFT;
-       unsigned long num_pfn = 1 << order;
+       unsigned long start_gpfn = __pa(vstart) >> PAGE_SHIFT;
+       unsigned long num_gpfn = 1UL << order;
+       unsigned long* gpfns;
+       struct xen_memory_reservation reservation;
        unsigned long i;
-       unsigned long flags;
-
-       scrub_pages(vstart, 1 << order);
+
+       gpfns = kmalloc(sizeof(gpfns[0]) * num_gpfn,
+                       GFP_KERNEL | __GFP_NOFAIL);
+       for (i = 0; i < num_gpfn; i++) {
+               gpfns[i] = start_gpfn + i;
+       }
+
+       scrub_pages(vstart, num_gpfn);
 
        balloon_lock(flags);
 
-       contiguous_bitmap_clear(start_gpfn, 1UL << order);
-
-       //XXX order
-       for (i = 0; i < num_pfn; i++) {
-               error = HYPERVISOR_zap_physmap(start_gpfn + i, 0);
-               if (error) {
-                       goto out;
-               }
-       }
-
-       for (i = 0; i < num_pfn; i++) {
-               error = HYPERVISOR_populate_physmap(start_gpfn + i, 0, 0);
-               if (error) {
-                       goto out;
-               }
-       }
-
+       contiguous_bitmap_clear(start_gpfn, num_gpfn);
+       error = HYPERVISOR_remove_physmap(start_gpfn, order);
+       if (error) {
+               goto fail;
+       }
+
+       set_xen_guest_handle(reservation.extent_start, gpfns);
+       reservation.nr_extents   = num_gpfn;
+       reservation.address_bits = 0;
+       reservation.extent_order = 0;
+       reservation.domid        = DOMID_SELF;
+       error = HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation);
+       if (error != num_gpfn) {
+               error = -EFAULT;//XXX
+               goto fail;
+       }
+       error = 0;
 out:
        balloon_unlock(flags);
+       kfree(gpfns);
        if (error) {
-               //XXX
-       }
+               // error can't be returned.
+               BUG();//XXX
+       }
+       return;
+
+fail:
+       for (i = 0; i < num_gpfn; i++) {
+               int tmp_error;// don't overwrite error.
+               tmp_error = HYPERVISOR_populate_physmap(start_gpfn + i, 0, 0);
+               if (tmp_error) {
+                       BUG();//XXX
+               }
+       }
+       goto out;
 }
 
 
@@ -294,38 +350,6 @@ HYPERVISOR_grant_table_op(unsigned int c
 
        return ____HYPERVISOR_grant_table_op(cmd, uop, count);
 }
-
-
-///////////////////////////////////////////////////////////////////////////
-//XXX taken from balloon.c
-//    temporal hack until balloon driver support.
-#include <linux/module.h>
-
-struct page *balloon_alloc_empty_page_range(unsigned long nr_pages)
-{
-       unsigned long vstart;
-       unsigned int  order = get_order(nr_pages * PAGE_SIZE);
-
-       vstart = __get_free_pages(GFP_KERNEL, order);
-       if (vstart == 0)
-               return NULL;
-
-       return virt_to_page(vstart);
-}
-
-void balloon_dealloc_empty_page_range(
-       struct page *page, unsigned long nr_pages)
-{
-       __free_pages(page, get_order(nr_pages * PAGE_SIZE));
-}
-
-void balloon_update_driver_allowance(long delta)
-{
-}
-
-EXPORT_SYMBOL(balloon_alloc_empty_page_range);
-EXPORT_SYMBOL(balloon_dealloc_empty_page_range);
-EXPORT_SYMBOL(balloon_update_driver_allowance);
 
 
 ///////////////////////////////////////////////////////////////////////////
diff -r 8c0d89f8d0f7 -r d86236cb824a linux-2.6-xen-sparse/arch/ia64/xen/util.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/util.c Fri May 12 08:49:40 2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/util.c Fri May 12 08:53:49 2006 -0600
@@ -74,13 +74,18 @@ void free_vm_area(struct vm_struct *area
        // 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 error;
-               error = HYPERVISOR_populate_physmap(
-                       (area->phys_addr >> PAGE_SHIFT) + i, 0, 0);
-               if (error) {
-                       BUG();//XXX
-                       return;
-               }
+               unsigned long ret;
+               unsigned long gpfn = (area->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);
diff -r 8c0d89f8d0f7 -r d86236cb824a 
linux-2.6-xen-sparse/include/asm-ia64/hypercall.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Fri May 12 08:49:40 
2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Fri May 12 08:53:49 
2006 -0600
@@ -458,27 +458,6 @@ HYPERVISOR_machtophys(unsigned long mfn)
 }
 
 static inline unsigned long
-__HYPERVISOR_populate_physmap(unsigned long gpfn, unsigned int extent_order,
-                             unsigned int address_bits)
-{
-       return _hypercall_imm3(unsigned long, ia64_dom0vp_op,
-                              IA64_DOM0VP_populate_physmap, gpfn, 
-                              extent_order, address_bits);
-}
-
-static inline unsigned long
-HYPERVISOR_populate_physmap(unsigned long gpfn, unsigned int extent_order,
-                           unsigned int address_bits)
-{
-       unsigned long ret = 0;
-       if (running_on_xen) {
-               ret = __HYPERVISOR_populate_physmap(gpfn, extent_order,
-                                                   address_bits);
-       }
-       return ret;
-}
-
-static inline unsigned long
 __HYPERVISOR_zap_physmap(unsigned long gpfn, unsigned int extent_order)
 {
        return _hypercall_imm2(unsigned long, ia64_dom0vp_op,
@@ -503,6 +482,7 @@ __HYPERVISOR_add_physmap(unsigned long g
                               IA64_DOM0VP_add_physmap, gpfn, mfn, flags,
                               domid);
 }
+
 static inline unsigned long
 HYPERVISOR_add_physmap(unsigned long gpfn, unsigned long mfn,
                       unsigned int flags, domid_t domid)
@@ -522,8 +502,6 @@ HYPERVISOR_add_physmap(unsigned long gpf
 #define HYPERVISOR_ioremap(ioaddr, size)               (ioaddr)
 #define HYPERVISOR_phystomach(gpfn)                    (gpfn)
 #define HYPERVISOR_machtophys(mfn)                     (mfn)
-#define HYPERVISOR_populate_physmap(gpfn, extent_order, address_bits) \
-                                                       (0)
 #define HYPERVISOR_zap_physmap(gpfn, extent_order)     (0)
 #define HYPERVISOR_add_physmap(gpfn, mfn, flags)       (0)
 #endif

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [IA64] linux: remove dom0vp_populate_physmap hypercall, Xen patchbot-unstable <=