]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
Refactor grant table allocation into arch-specific code.
authorkfraser <kfraser@localhost.localdomain>
Fri, 6 Jul 2007 16:33:03 +0000 (17:33 +0100)
committerkfraser <kfraser@localhost.localdomain>
Fri, 6 Jul 2007 16:33:03 +0000 (17:33 +0100)
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
arch/ia64/xen/hypervisor.c
drivers/xen/core/gnttab.c
include/xen/gnttab.h

index 29d07dc1607897243c083c530af1118523ff5708..bd8c8584191dc6ba2a7580d201d3142006c5b87e 100644 (file)
@@ -409,6 +409,11 @@ __xen_destroy_contiguous_region(unsigned long vstart, unsigned int order)
 #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)
 {
index d3ce6056d9cca6ef6afbb4a67ac68d3fa430f3ad..161a67321e3b06504077cd55a4de03a01b20ce6a 100644 (file)
@@ -430,7 +430,7 @@ static inline unsigned int max_nr_grant_frames(void)
 
 #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, struct page *pmd_page,
        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_idx, unsigned int end_idx)
 
        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);
index affb8d05dc19075e7385ec6fdeaae0d59705f4f2..b8bb06fee90833e59379e726df6dd1479d631dc3 100644 (file)
@@ -117,6 +117,8 @@ static inline void gnttab_reset_grant_page(struct page *page)
 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)