Refactor grant table allocation into arch-specific code
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.
Signed-off-by Hollis Blanchard <[email protected]>
arch/ia64/xen/hypervisor.c +5 -0
@@ -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
@@ -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, struset_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 startBUG_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
@@ -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)