summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c9
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.h2
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