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

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



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.