diff options
author | Sami Kiminki <skiminki@nvidia.com> | 2014-10-27 13:39:46 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:12:08 -0400 |
commit | ca474ca33f13c432bb43f7705f762907682e1219 (patch) | |
tree | 222a4ff59ea2b38426b88b72c2bf12b28b862c70 | |
parent | d11fbfe7b1b68b3aab93f7703896d95d40b79a58 (diff) |
gpu: nvgpu: ALLOC_AS: don't fail on default big page size
gk20a_vm_alloc_share() fails when the default big page size is
requested but ops.mm.set_big_page_size is unset. Rework the logic a
bit to allow userspace to explicitly request the default big page
size, too.
Change-Id: I2a28c6d979fbf1dde5559ce9eb5f1310d232e27f
Signed-off-by: Sami Kiminki <skiminki@nvidia.com>
Reviewed-on: http://git-master/r/590456
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index c37f790e..1cdb2f8a 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -2341,6 +2341,7 @@ int gk20a_vm_alloc_share(struct gk20a_as_share *as_share, u32 big_page_size) | |||
2341 | struct vm_gk20a *vm; | 2341 | struct vm_gk20a *vm; |
2342 | char name[32]; | 2342 | char name[32]; |
2343 | int err; | 2343 | int err; |
2344 | u32 default_big_page_size; | ||
2344 | 2345 | ||
2345 | gk20a_dbg_fn(""); | 2346 | gk20a_dbg_fn(""); |
2346 | 2347 | ||
@@ -2354,11 +2355,15 @@ int gk20a_vm_alloc_share(struct gk20a_as_share *as_share, u32 big_page_size) | |||
2354 | 2355 | ||
2355 | snprintf(name, sizeof(name), "gk20a_as_%d", as_share->id); | 2356 | snprintf(name, sizeof(name), "gk20a_as_%d", as_share->id); |
2356 | 2357 | ||
2357 | if (big_page_size && !g->ops.mm.set_big_page_size) | 2358 | default_big_page_size = |
2358 | return -EINVAL; | 2359 | gk20a_get_platform(g->dev)->default_big_page_size; |
2360 | |||
2359 | if (big_page_size == 0) | 2361 | if (big_page_size == 0) |
2360 | big_page_size = | 2362 | big_page_size = default_big_page_size; |
2361 | gk20a_get_platform(g->dev)->default_big_page_size; | 2363 | |
2364 | if (big_page_size != default_big_page_size && | ||
2365 | !g->ops.mm.set_big_page_size) | ||
2366 | return -EINVAL; | ||
2362 | 2367 | ||
2363 | err = gk20a_init_vm(mm, vm, big_page_size, big_page_size << 10, | 2368 | err = gk20a_init_vm(mm, vm, big_page_size, big_page_size << 10, |
2364 | mm->channel.size, true, name); | 2369 | mm->channel.size, true, name); |