|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCHv4 14/14] xen/gntdev: provide find_special_page VMA operation
On Mon, 26 Jan 2015, David Vrabel wrote:
> For a PV guest, use the find_special_page op to find the right page.
> To handle VMAs being split, remember the start of the original VMA so
> the correct index in the pages array can be calculated.
>
> Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
Very nice.
Reviewed-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> drivers/xen/gntdev.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
> index 8ea10eb..826e731 100644
> --- a/drivers/xen/gntdev.c
> +++ b/drivers/xen/gntdev.c
> @@ -93,6 +93,7 @@ struct grant_map {
> struct gnttab_map_grant_ref *kmap_ops;
> struct gnttab_unmap_grant_ref *kunmap_ops;
> struct page **pages;
> + unsigned long pages_vm_start;
> };
>
> static int unmap_grant_pages(struct grant_map *map, int offset, int pages);
> @@ -444,9 +445,18 @@ static void gntdev_vma_close(struct vm_area_struct *vma)
> gntdev_put_map(priv, map);
> }
>
> +static struct page *gntdev_vma_find_special_page(struct vm_area_struct *vma,
> + unsigned long addr)
> +{
> + struct grant_map *map = vma->vm_private_data;
> +
> + return map->pages[(addr - map->pages_vm_start) >> PAGE_SHIFT];
> +}
> +
> static struct vm_operations_struct gntdev_vmops = {
> .open = gntdev_vma_open,
> .close = gntdev_vma_close,
> + .find_special_page = gntdev_vma_find_special_page,
> };
>
> /* ------------------------------------------------------------------ */
> @@ -870,6 +880,8 @@ static int gntdev_mmap(struct file *flip, struct
> vm_area_struct *vma)
> vma->vm_end - vma->vm_start,
> set_grant_ptes_as_special, NULL);
> }
> +
> + map->pages_vm_start = vma->vm_start;
> }
>
> return 0;
> --
> 1.7.10.4
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |