Skip to contentSkip to conversation

Refactor grant table allocation into arch-specific code

PATCH New Hollis Blanchard 1 participant 1 message Jul 6, 2007 Xen hypervisor interface

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Refactor grant table allocation into arch-specific code

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

# HG changeset patch
# User Hollis Blanchard <[email protected]>
# Date 1183738982 18000
# Node ID fced1ca6a18a7031c6857b45f7027455ec2bef7d
# Parent 790e4d5567dcd8bfb42ae1e67ad1f3dffd29ece1 [XEN][LINUX] Refactor grant table allocation into arch-specific code.

arch/ia64/xen/hypervisor.c +5 -0
diff -r 790e4d5567dc -r fced1ca6a18a arch/ia64/xen/hypervisor.c
@@ -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)
drivers/xen/core/gnttab.c +17 -14
diff -r 790e4d5567dc -r fced1ca6a18a drivers/xen/core/gnttab.c
@@ -430,7 +430,7 @@ static inline unsigned int max_nr_grant_
 
 #ifdef CONFIG_XEN
 
-#ifndef __ia64__
+#ifdef CONFIG_X86
 static int map_pte_fn(pte_t *pte, struct page *pmd_page,
 		      unsigned long addr, void *data)
 {
@@ -448,7 +448,15 @@ 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)
+{
+	struct vm_struct *area;
+	area = alloc_vm_area(PAGE_SIZE * max_nr_grant_frames());
+	BUG_ON(area == NULL);
+	return area->addr;
+}
+#endif /* CONFIG_X86 */
 
 static int gnttab_map(unsigned int start_idx, unsigned int end_idx)
 {
@@ -473,21 +481,16 @@ 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;
-	}
+	if (shared == NULL)
+		shared = arch_gnttab_alloc_shared(frames);
+
+#ifdef CONFIG_X86
 	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
+	frames -= nr_gframes; /* adjust after map_pte_fn() */
+#endif /* CONFIG_X86 */
 
 	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);
include/xen/gnttab.h +2 -0
diff -r 790e4d5567dc -r fced1ca6a18a include/xen/gnttab.h
@@ -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)