From 9d2c9072c8b9a7742db3974d6027df9d44e0953f Mon Sep 17 00:00:00 2001 From: Sami Kiminki Date: Mon, 4 May 2015 18:41:23 +0300 Subject: gpu: nvgpu: User-space managed address space support Implement NVGPU_GPU_IOCTL_ALLOC_AS_FLAGS_USERSPACE_MANAGED, which enables creating userspace-managed GPU address spaces. When an address space is marked as userspace-managed, the following changes are in effect: - Only fixed-address mappings are allowed. - VA space allocation for fixed-address mappings is not required, except to mark space as sparse. - Maps and unmaps are always immediate. In particular, the mapping ref increments at kickoffs and decrements at job completion are skipped. Bug 1614735 Bug 1623949 Bug 1660392 Change-Id: I834fe19b3f65e9b02c268952383eddee0e465759 Signed-off-by: Sami Kiminki Reviewed-on: http://git-master/r/738558 Reviewed-on: http://git-master/r/833253 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/as_gk20a.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/as_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/as_gk20a.c b/drivers/gpu/nvgpu/gk20a/as_gk20a.c index 87b32add..b6b38541 100644 --- a/drivers/gpu/nvgpu/gk20a/as_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/as_gk20a.c @@ -38,7 +38,8 @@ static void release_as_share_id(struct gk20a_as *as, int id) } int gk20a_as_alloc_share(struct gk20a_as *as, - u32 flags, struct gk20a_as_share **out) + u32 big_page_size, u32 flags, + struct gk20a_as_share **out) { struct gk20a *g = gk20a_from_as(as); struct gk20a_as_share *as_share; @@ -59,7 +60,7 @@ int gk20a_as_alloc_share(struct gk20a_as *as, err = gk20a_busy(g->dev); if (err) goto failed; - err = g->ops.mm.vm_alloc_share(as_share, flags); + err = g->ops.mm.vm_alloc_share(as_share, big_page_size, flags); gk20a_idle(g->dev); if (err) @@ -332,7 +333,7 @@ int gk20a_as_dev_open(struct inode *inode, struct file *filp) g = container_of(inode->i_cdev, struct gk20a, as.cdev); - err = gk20a_as_alloc_share(&g->as, 0, &as_share); + err = gk20a_as_alloc_share(&g->as, 0, 0, &as_share); if (err) { gk20a_dbg_fn("failed to alloc share"); return err; -- cgit v1.2.2