gpu: nvgpu: Fixes to static offset mappings

This patch addresses two issues in fixes offset mappings:
- VA unmapping did not use lists safely. This caused an application hang
if the application did not free all (fixed offset) buffers before quiting.
- GPU was not powered closing AS node. If the address space had areas that
were not freed, the driver tried to access hw without powering it up first.

Change-Id: Ida526d222ea4e03b8d765eca16574ddc1823e60d
Signed-off-by: Arto Merilainen <amerilainen@nvidia.com>
Reviewed-on: http://git-master/r/405872
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
Arto Merilainen
2014-05-06 18:05:31 +03:00
committed by Dan Willemsen
parent 93044a4dc2
commit 219eb3d26b
2 changed files with 8 additions and 3 deletions

View File

@@ -73,6 +73,7 @@ static int gk20a_as_alloc_share(struct gk20a_as *as,
*/
int gk20a_as_release_share(struct gk20a_as_share *as_share)
{
struct gk20a *g = as_share->vm->mm->g;
int err;
gk20a_dbg_fn("");
@@ -80,7 +81,10 @@ int gk20a_as_release_share(struct gk20a_as_share *as_share)
if (atomic_dec_return(&as_share->ref_cnt) > 0)
return 0;
gk20a_busy(g->dev);
err = gk20a_vm_release_share(as_share);
gk20a_idle(g->dev);
release_as_share_id(as_share->as, as_share->id);
kfree(as_share);
return err;

View File

@@ -2350,14 +2350,15 @@ int gk20a_vm_free_space(struct gk20a_as_share *as_share,
mutex_lock(&vm->update_gmmu_lock);
va_node = addr_to_reservation(vm, args->offset);
if (va_node) {
struct mapped_buffer_node *buffer;
struct mapped_buffer_node *buffer, *n;
/* there is no need to unallocate the buffers in va. Just
* convert them into normal buffers */
list_for_each_entry(buffer,
&va_node->va_buffers_list, va_buffers_list)
list_for_each_entry_safe(buffer, n,
&va_node->va_buffers_list, va_buffers_list) {
list_del_init(&buffer->va_buffers_list);
}
list_del(&va_node->reserved_va_list);