WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH 3/6] xen/grant-table: Support mappings required b

On Thu, Oct 20, 2011 at 11:35:54AM -0400, Daniel De Graaf wrote:
> Allow mappings without GNTMAP_contains_pte and allow unmapping to
> specify if the PTEs should be cleared.
> 
> Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
> ---
>  drivers/xen/gntdev.c      |    3 ++-
>  drivers/xen/grant-table.c |   23 ++++-------------------
>  include/xen/grant_table.h |    2 +-
>  3 files changed, 7 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
> index 3987132..5227506 100644
> --- a/drivers/xen/gntdev.c
> +++ b/drivers/xen/gntdev.c
> @@ -312,7 +312,8 @@ static int __unmap_grant_pages(struct grant_map *map, int 
> offset, int pages)
>               }
>       }
>  
> -     err = gnttab_unmap_refs(map->unmap_ops + offset, map->pages + offset, 
> pages);
> +     err = gnttab_unmap_refs(map->unmap_ops + offset, map->pages + offset,
> +                             pages, true);
>       if (err)
>               return err;
>  
> diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
> index bf1c094..a02d139 100644
> --- a/drivers/xen/grant-table.c
> +++ b/drivers/xen/grant-table.c
> @@ -472,24 +472,9 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
>                               (map_ops[i].host_addr & ~PAGE_MASK));
>                       mfn = pte_mfn(*pte);
>               } else {
> -                     /* If you really wanted to do this:
> -                      * mfn = PFN_DOWN(map_ops[i].dev_bus_addr);
> -                      *
> -                      * The reason we do not implement it is b/c on the
> -                      * unmap path (gnttab_unmap_refs) we have no means of
> -                      * checking whether the page is !GNTMAP_contains_pte.

Can you mention how you are addressing the !GNTMAP_contains_pte on unmap issue?
(or how it is already addressed).

> -                      *
> -                      * That is without some extra data-structure to carry
> -                      * the struct page, bool clear_pte, and list_head next
> -                      * tuples and deal with allocation/delallocation, etc.
> -                      *
> -                      * The users of this API set the GNTMAP_contains_pte
> -                      * flag so lets just return not supported until it
> -                      * becomes neccessary to implement.
> -                      */
> -                     return -EOPNOTSUPP;
> +                     mfn = PFN_DOWN(map_ops[i].dev_bus_addr);
>               }
> -             ret = m2p_add_override(mfn, pages[i], &kmap_ops[i]);
> +             ret = m2p_add_override(mfn, pages[i], kmap_ops ? &kmap_ops[i] : 
> NULL);
>               if (ret)
>                       return ret;
>       }
> @@ -499,7 +484,7 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
>  EXPORT_SYMBOL_GPL(gnttab_map_refs);
>  
>  int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
> -             struct page **pages, unsigned int count)
> +             struct page **pages, unsigned int count, bool clear_pte)
>  {
>       int i, ret;
>  
> @@ -511,7 +496,7 @@ int gnttab_unmap_refs(struct gnttab_unmap_grant_ref 
> *unmap_ops,
>               return ret;
>  
>       for (i = 0; i < count; i++) {
> -             ret = m2p_remove_override(pages[i], true /* clear the PTE */);
> +             ret = m2p_remove_override(pages[i], clear_pte);
>               if (ret)
>                       return ret;
>       }
> diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h
> index 11e2dfc..37da54d 100644
> --- a/include/xen/grant_table.h
> +++ b/include/xen/grant_table.h
> @@ -158,6 +158,6 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
>                       struct gnttab_map_grant_ref *kmap_ops,
>                   struct page **pages, unsigned int count);
>  int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
> -                   struct page **pages, unsigned int count);
> +                   struct page **pages, unsigned int count, bool clear_pte);
>  
>  #endif /* __ASM_GNTTAB_H__ */
> -- 
> 1.7.6.4
> 
> 
> _______________________________________________
> 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