[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 5 of 6] [XEN][LINUX] Refactor grant table allocation into arch-specific code



3 files changed, 28 insertions(+), 18 deletions(-)
arch/ia64/xen/hypervisor.c |    5 +++++
drivers/xen/core/gnttab.c  |   39 +++++++++++++++++++++------------------
include/xen/gnttab.h       |    2 ++


# HG changeset patch
# User Hollis Blanchard <hollisb@xxxxxxxxxx>
# Date 1183669279 18000
# Node ID 3ece3641ec01362c4333c74688a7f04ae4706ba4
# Parent  4d8b8e9dd58e1de258d7418f5dabf694501b1bd8
[XEN][LINUX] Refactor grant table allocation into arch-specific code.
In the future, x86 code should be moved out of drivers/xen/
Signed-off-by: Hollis Blanchard <hollisb@xxxxxxxxxx>

diff -r 4d8b8e9dd58e -r 3ece3641ec01 arch/ia64/xen/hypervisor.c
--- a/arch/ia64/xen/hypervisor.c        Thu Jul 05 16:01:18 2007 -0500
+++ b/arch/ia64/xen/hypervisor.c        Thu Jul 05 16:01:19 2007 -0500
@@ -408,6 +408,11 @@ __xen_destroy_contiguous_region(unsigned
 #include <linux/mm.h>
 #include <xen/interface/xen.h>
 #include <xen/gnttab.h>
+
+void *arch_gnttab_alloc_shared(unsigned long *frames)
+{
+       return __va(frames[0] << PAGE_SHIFT);
+}
 
 static void
 gnttab_map_grant_ref_pre(struct gnttab_map_grant_ref *uop)
diff -r 4d8b8e9dd58e -r 3ece3641ec01 drivers/xen/core/gnttab.c
--- a/drivers/xen/core/gnttab.c Thu Jul 05 16:01:18 2007 -0500
+++ b/drivers/xen/core/gnttab.c Thu Jul 05 16:01:19 2007 -0500
@@ -430,7 +430,8 @@ static inline unsigned int max_nr_grant_
 
 #ifdef CONFIG_XEN
 
-#ifndef __ia64__
+#ifdef __x86__
+/* XXX Move this code. */
 static int map_pte_fn(pte_t *pte, struct page *pmd_page,
                      unsigned long addr, void *data)
 {
@@ -448,7 +449,22 @@ static int unmap_pte_fn(pte_t *pte, stru
        set_pte_at(&init_mm, addr, pte, __pte(0));
        return 0;
 }
-#endif
+
+void *arch_gnttab_alloc_shared(unsigned long *frames)
+{
+       unsigned long *_frames = frames;
+       struct vm_struct *area;
+
+       area = alloc_vm_area(PAGE_SIZE * max_nr_grant_frames());
+       BUG_ON(area == NULL);
+
+       rc = apply_to_page_range(&init_mm, (unsigned long)area->addr,
+                       PAGE_SIZE * nr_gframes,
+                       map_pte_fn, &_frames);
+       BUG_ON(rc);
+       return area->addr;
+}
+#endif /* __x86__ */
 
 static int gnttab_map(unsigned int start_idx, unsigned int end_idx)
 {
@@ -473,21 +489,8 @@ static int gnttab_map(unsigned int start
 
        BUG_ON(rc || setup.status);
 
-#ifndef __ia64__
-       if (shared == NULL) {
-               struct vm_struct *area;
-               area = alloc_vm_area(PAGE_SIZE * max_nr_grant_frames());
-               BUG_ON(area == NULL);
-               shared = area->addr;
-       }
-       rc = apply_to_page_range(&init_mm, (unsigned long)shared,
-                                PAGE_SIZE * nr_gframes,
-                                map_pte_fn, &frames);
-       BUG_ON(rc);
-        frames -= nr_gframes; /* adjust after map_pte_fn() */
-#else
-       shared = __va(frames[0] << PAGE_SHIFT);
-#endif
+       if (shared == NULL)
+               shared = arch_gnttab_alloc_shared(frames);
 
        kfree(frames);
 
@@ -623,7 +626,7 @@ int gnttab_resume(void)
 
 int gnttab_suspend(void)
 {
-#ifndef __ia64__
+#ifdef CONFIG_X86
        apply_to_page_range(&init_mm, (unsigned long)shared,
                            PAGE_SIZE * nr_grant_frames,
                            unmap_pte_fn, NULL);
diff -r 4d8b8e9dd58e -r 3ece3641ec01 include/xen/gnttab.h
--- a/include/xen/gnttab.h      Thu Jul 05 16:01:18 2007 -0500
+++ b/include/xen/gnttab.h      Thu Jul 05 16:01:19 2007 -0500
@@ -117,6 +117,8 @@ int gnttab_suspend(void);
 int gnttab_suspend(void);
 int gnttab_resume(void);
 
+void *arch_gnttab_alloc_shared(unsigned long *frames);
+
 static inline void
 gnttab_set_map_op(struct gnttab_map_grant_ref *map, maddr_t addr,
                  uint32_t flags, grant_ref_t ref, domid_t domid)

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.