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

[Xen-devel] [PATCH RFC 34/39] xen/gntdev: xen_shim_domain() support



From: Ankur Arora <ankur.a.arora@xxxxxxxxxx>

GNTTABOP_map_grant_ref treats host_addr as an OUT parameter for
xen_shim_domaim().

Accordingly it's updated in struct gnttab_unmap_grant_ref before it gets
used via GNTTABOP_unmap_grant_ref.

Co-developed-by: Joao Martins <joao.m.martins@xxxxxxxxxx>
Signed-off-by: Ankur Arora <ankur.a.arora@xxxxxxxxxx>
Signed-off-by: Joao Martins <joao.m.martins@xxxxxxxxxx>
---
 drivers/xen/gntdev.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
index 5efc5eee9544..8540a51f7597 100644
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@ -351,6 +351,8 @@ int gntdev_map_grant_pages(struct gntdev_grant_map *map)
                }
 
                map->unmap_ops[i].handle = map->map_ops[i].handle;
+               if (xen_shim_domain())
+                       map->unmap_ops[i].host_addr = map->map_ops[i].host_addr;
                if (use_ptemod)
                        map->kunmap_ops[i].handle = map->kmap_ops[i].handle;
 #ifdef CONFIG_XEN_GRANT_DMA_ALLOC
@@ -1122,7 +1124,9 @@ static int gntdev_mmap(struct file *flip, struct 
vm_area_struct *vma)
                                (map->flags & GNTMAP_readonly))
                        goto out_unlock_put;
        } else {
-               map->flags = GNTMAP_host_map;
+               map->flags = 0;
+               if (!xen_shim_domain())
+                       map->flags = GNTMAP_host_map;
                if (!(vma->vm_flags & VM_WRITE))
                        map->flags |= GNTMAP_readonly;
        }
@@ -1207,7 +1211,7 @@ static int __init gntdev_init(void)
 {
        int err;
 
-       if (!xen_domain())
+       if (!xen_domain() && !xen_shim_domain_get())
                return -ENODEV;
 
        use_ptemod = !xen_feature(XENFEAT_auto_translated_physmap);
@@ -1215,6 +1219,7 @@ static int __init gntdev_init(void)
        err = misc_register(&gntdev_miscdev);
        if (err != 0) {
                pr_err("Could not register gntdev device\n");
+               xen_shim_domain_put();
                return err;
        }
        return 0;
@@ -1223,6 +1228,7 @@ static int __init gntdev_init(void)
 static void __exit gntdev_exit(void)
 {
        misc_deregister(&gntdev_miscdev);
+       xen_shim_domain_put();
 }
 
 module_init(gntdev_init);
-- 
2.11.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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