summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/as_gk20a.c
diff options
context:
space:
mode:
authorSami Kiminki <skiminki@nvidia.com>2015-05-04 11:41:23 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-11-18 12:45:07 -0500
commit9d2c9072c8b9a7742db3974d6027df9d44e0953f (patch)
tree15ed7e5a3495db6032b43381641d102837decfad /drivers/gpu/nvgpu/gk20a/as_gk20a.c
parent503d3a0b1002685e65efb8b99a2362117ee62104 (diff)
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 <skiminki@nvidia.com> Reviewed-on: http://git-master/r/738558 Reviewed-on: http://git-master/r/833253 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/as_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/as_gk20a.c7
1 files changed, 4 insertions, 3 deletions
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)
38} 38}
39 39
40int gk20a_as_alloc_share(struct gk20a_as *as, 40int gk20a_as_alloc_share(struct gk20a_as *as,
41 u32 flags, struct gk20a_as_share **out) 41 u32 big_page_size, u32 flags,
42 struct gk20a_as_share **out)
42{ 43{
43 struct gk20a *g = gk20a_from_as(as); 44 struct gk20a *g = gk20a_from_as(as);
44 struct gk20a_as_share *as_share; 45 struct gk20a_as_share *as_share;
@@ -59,7 +60,7 @@ int gk20a_as_alloc_share(struct gk20a_as *as,
59 err = gk20a_busy(g->dev); 60 err = gk20a_busy(g->dev);
60 if (err) 61 if (err)
61 goto failed; 62 goto failed;
62 err = g->ops.mm.vm_alloc_share(as_share, flags); 63 err = g->ops.mm.vm_alloc_share(as_share, big_page_size, flags);
63 gk20a_idle(g->dev); 64 gk20a_idle(g->dev);
64 65
65 if (err) 66 if (err)
@@ -332,7 +333,7 @@ int gk20a_as_dev_open(struct inode *inode, struct file *filp)
332 333
333 g = container_of(inode->i_cdev, struct gk20a, as.cdev); 334 g = container_of(inode->i_cdev, struct gk20a, as.cdev);
334 335
335 err = gk20a_as_alloc_share(&g->as, 0, &as_share); 336 err = gk20a_as_alloc_share(&g->as, 0, 0, &as_share);
336 if (err) { 337 if (err) {
337 gk20a_dbg_fn("failed to alloc share"); 338 gk20a_dbg_fn("failed to alloc share");
338 return err; 339 return err;