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

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



Patches 1 thru 4 are applied. This one (patch 5) breaks the x86 build and
even if that is fixed breaks the semantics of gnttab_map()
(apply_to_page_range() is invoked on every call, not just when
shared==NULL).

 -- Keir


On 5/7/07 23:27, "Hollis Blanchard" <hollisb@xxxxxxxxxx> wrote:

> 3 files changed, 27 insertions(+), 18 deletions(-)
> arch/ia64/xen/hypervisor.c |    5 +++++
> drivers/xen/core/gnttab.c  |   38 ++++++++++++++++++++------------------
> include/xen/gnttab.h       |    2 ++
> 
> 
> # HG changeset patch
> # User Hollis Blanchard <hollisb@xxxxxxxxxx>
> # Date 1183674347 18000
> # Node ID 9def23611685442dc9688ad8f81db9a5031b4b5f
> # Parent  790e4d5567dcd8bfb42ae1e67ad1f3dffd29ece1
> [XEN][LINUX] Refactor grant table allocation into arch-specific code.
> Signed-off-by: Hollis Blanchard <hollisb@xxxxxxxxxx>
> 
> diff -r 790e4d5567dc -r 9def23611685 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 Thu Jul 05 17:25:47 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 9def23611685 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 Thu Jul 05 17:25:47 2007 -0500
> @@ -430,7 +430,7 @@ static inline unsigned int max_nr_grant_
>  
>  #ifdef CONFIG_XEN
>  
> -#ifndef __ia64__
> +#ifdef __x86__
>  static int map_pte_fn(pte_t *pte, struct page *pmd_page,
>      unsigned long addr, void *data)
>  {
> @@ -448,7 +448,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 +488,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 +625,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 9def23611685 include/xen/gnttab.h
> --- a/include/xen/gnttab.h Thu Jul 05 16:58:26 2007 -0500
> +++ b/include/xen/gnttab.h Thu Jul 05 17:25:47 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


_______________________________________________
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®.