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 <hollisb@xxxxxxxxxx>
# Date 1183738982 18000
# Node ID fced1ca6a18a7031c6857b45f7027455ec2bef7d
# Parent 790e4d5567dcd8bfb42ae1e67ad1f3dffd29ece1
[XEN][LINUX] Refactor grant table allocation into arch-specific code.
Signed-off-by: Hollis Blanchard <hollisb@xxxxxxxxxx>
diff -r 790e4d5567dc -r fced1ca6a18a arch/ia64/xen/hypervisor.c
--- a/arch/ia64/xen/hypervisor.c Thu Jul 05 16:58:26 2007 -0500
+++ b/arch/ia64/xen/hypervisor.c Fri Jul 06 11:23:02 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 790e4d5567dc -r fced1ca6a18a drivers/xen/core/gnttab.c
--- a/drivers/xen/core/gnttab.c Thu Jul 05 16:58:26 2007 -0500
+++ b/drivers/xen/core/gnttab.c Fri Jul 06 11:23:02 2007 -0500
@@ -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);
diff -r 790e4d5567dc -r fced1ca6a18a include/xen/gnttab.h
--- a/include/xen/gnttab.h Thu Jul 05 16:58:26 2007 -0500
+++ b/include/xen/gnttab.h Fri Jul 06 11:23:02 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
|