diff options
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 9 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 2 |
2 files changed, 6 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index f327294a..f46f7a81 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -950,7 +950,7 @@ static int gk20a_init_vidmem(struct mm_gk20a *mm) | |||
950 | mutex_init(&mm->vidmem.first_clear_mutex); | 950 | mutex_init(&mm->vidmem.first_clear_mutex); |
951 | 951 | ||
952 | INIT_WORK(&mm->vidmem.clear_mem_worker, gk20a_vidmem_clear_mem_worker); | 952 | INIT_WORK(&mm->vidmem.clear_mem_worker, gk20a_vidmem_clear_mem_worker); |
953 | atomic_set(&mm->vidmem.clears_pending, 0); | 953 | atomic64_set(&mm->vidmem.bytes_pending, 0); |
954 | INIT_LIST_HEAD(&mm->vidmem.clear_list_head); | 954 | INIT_LIST_HEAD(&mm->vidmem.clear_list_head); |
955 | mutex_init(&mm->vidmem.clear_list_mutex); | 955 | mutex_init(&mm->vidmem.clear_list_mutex); |
956 | 956 | ||
@@ -3093,7 +3093,7 @@ int gk20a_gmmu_alloc_attr_vid_at(struct gk20a *g, enum dma_attr attr, | |||
3093 | WARN_ON(attr != 0 && attr != DMA_ATTR_NO_KERNEL_MAPPING); | 3093 | WARN_ON(attr != 0 && attr != DMA_ATTR_NO_KERNEL_MAPPING); |
3094 | 3094 | ||
3095 | mutex_lock(&g->mm.vidmem.clear_list_mutex); | 3095 | mutex_lock(&g->mm.vidmem.clear_list_mutex); |
3096 | before_pending = atomic_read(&g->mm.vidmem.clears_pending); | 3096 | before_pending = atomic64_read(&g->mm.vidmem.bytes_pending); |
3097 | addr = __gk20a_gmmu_alloc(vidmem_alloc, at, size); | 3097 | addr = __gk20a_gmmu_alloc(vidmem_alloc, at, size); |
3098 | mutex_unlock(&g->mm.vidmem.clear_list_mutex); | 3098 | mutex_unlock(&g->mm.vidmem.clear_list_mutex); |
3099 | if (!addr) { | 3099 | if (!addr) { |
@@ -3156,7 +3156,7 @@ static void gk20a_gmmu_free_attr_vid(struct gk20a *g, enum dma_attr attr, | |||
3156 | was_empty = list_empty(&g->mm.vidmem.clear_list_head); | 3156 | was_empty = list_empty(&g->mm.vidmem.clear_list_head); |
3157 | list_add_tail(&mem->clear_list_entry, | 3157 | list_add_tail(&mem->clear_list_entry, |
3158 | &g->mm.vidmem.clear_list_head); | 3158 | &g->mm.vidmem.clear_list_head); |
3159 | atomic_inc(&g->mm.vidmem.clears_pending); | 3159 | atomic64_add(mem->size, &g->mm.vidmem.bytes_pending); |
3160 | mutex_unlock(&g->mm.vidmem.clear_list_mutex); | 3160 | mutex_unlock(&g->mm.vidmem.clear_list_mutex); |
3161 | 3161 | ||
3162 | if (was_empty) { | 3162 | if (was_empty) { |
@@ -3245,7 +3245,8 @@ static void gk20a_vidmem_clear_mem_worker(struct work_struct *work) | |||
3245 | (u64)get_vidmem_page_alloc(mem->sgt->sgl)); | 3245 | (u64)get_vidmem_page_alloc(mem->sgt->sgl)); |
3246 | gk20a_free_sgtable(&mem->sgt); | 3246 | gk20a_free_sgtable(&mem->sgt); |
3247 | 3247 | ||
3248 | WARN_ON(atomic_dec_return(&mm->vidmem.clears_pending) < 0); | 3248 | WARN_ON(atomic64_sub_return(mem->size, |
3249 | &g->mm.vidmem.bytes_pending) < 0); | ||
3249 | mem->size = 0; | 3250 | mem->size = 0; |
3250 | mem->aperture = APERTURE_INVALID; | 3251 | mem->aperture = APERTURE_INVALID; |
3251 | 3252 | ||
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h index 75209063..b25a7789 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h | |||
@@ -424,7 +424,7 @@ struct mm_gk20a { | |||
424 | struct mutex clear_list_mutex; | 424 | struct mutex clear_list_mutex; |
425 | 425 | ||
426 | struct work_struct clear_mem_worker; | 426 | struct work_struct clear_mem_worker; |
427 | atomic_t clears_pending; | 427 | atomic64_t bytes_pending; |
428 | } vidmem; | 428 | } vidmem; |
429 | }; | 429 | }; |
430 | 430 | ||