diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-03-31 08:21:55 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-04-03 11:55:20 -0400 |
commit | 371b173c12df8828df74da2c8edfc94182dccfae (patch) | |
tree | 491fc909e722109f10019d350f7101804f868e6c /drivers | |
parent | f0147665b2d9c3faa673e6b0001be596018c4e9c (diff) |
gpu: nvgpu: use nvgpu list for vidmem clear list
Use nvgpu list APIs instead of linux list APIs
for vidmem clear list
Jira NVGPU-13
Change-Id: I13f7c5a54fb199d15ad1402216f3275f0f0474af
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/1454012
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 17 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 12 |
2 files changed, 19 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 3cda3034..b1d709f0 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -823,7 +823,7 @@ static int gk20a_init_vidmem(struct mm_gk20a *mm) | |||
823 | 823 | ||
824 | INIT_WORK(&mm->vidmem.clear_mem_worker, gk20a_vidmem_clear_mem_worker); | 824 | INIT_WORK(&mm->vidmem.clear_mem_worker, gk20a_vidmem_clear_mem_worker); |
825 | atomic64_set(&mm->vidmem.bytes_pending, 0); | 825 | atomic64_set(&mm->vidmem.bytes_pending, 0); |
826 | INIT_LIST_HEAD(&mm->vidmem.clear_list_head); | 826 | nvgpu_init_list_node(&mm->vidmem.clear_list_head); |
827 | nvgpu_mutex_init(&mm->vidmem.clear_list_mutex); | 827 | nvgpu_mutex_init(&mm->vidmem.clear_list_mutex); |
828 | 828 | ||
829 | gk20a_dbg_info("registered vidmem: %zu MB", size / SZ_1M); | 829 | gk20a_dbg_info("registered vidmem: %zu MB", size / SZ_1M); |
@@ -3012,7 +3012,7 @@ int gk20a_gmmu_alloc_flags_vid_at(struct gk20a *g, unsigned long flags, | |||
3012 | mem->aperture = APERTURE_VIDMEM; | 3012 | mem->aperture = APERTURE_VIDMEM; |
3013 | mem->allocator = vidmem_alloc; | 3013 | mem->allocator = vidmem_alloc; |
3014 | 3014 | ||
3015 | INIT_LIST_HEAD(&mem->clear_list_entry); | 3015 | nvgpu_init_list_node(&mem->clear_list_entry); |
3016 | 3016 | ||
3017 | gk20a_dbg_fn("done at 0x%llx size %zu", addr, size); | 3017 | gk20a_dbg_fn("done at 0x%llx size %zu", addr, size); |
3018 | 3018 | ||
@@ -3038,8 +3038,8 @@ static void gk20a_gmmu_free_vid(struct gk20a *g, struct mem_desc *mem) | |||
3038 | 3038 | ||
3039 | if (mem->user_mem) { | 3039 | if (mem->user_mem) { |
3040 | nvgpu_mutex_acquire(&g->mm.vidmem.clear_list_mutex); | 3040 | nvgpu_mutex_acquire(&g->mm.vidmem.clear_list_mutex); |
3041 | was_empty = list_empty(&g->mm.vidmem.clear_list_head); | 3041 | was_empty = nvgpu_list_empty(&g->mm.vidmem.clear_list_head); |
3042 | list_add_tail(&mem->clear_list_entry, | 3042 | nvgpu_list_add_tail(&mem->clear_list_entry, |
3043 | &g->mm.vidmem.clear_list_head); | 3043 | &g->mm.vidmem.clear_list_head); |
3044 | atomic64_add(mem->size, &g->mm.vidmem.bytes_pending); | 3044 | atomic64_add(mem->size, &g->mm.vidmem.bytes_pending); |
3045 | nvgpu_mutex_release(&g->mm.vidmem.clear_list_mutex); | 3045 | nvgpu_mutex_release(&g->mm.vidmem.clear_list_mutex); |
@@ -3102,10 +3102,11 @@ static struct mem_desc *get_pending_mem_desc(struct mm_gk20a *mm) | |||
3102 | struct mem_desc *mem = NULL; | 3102 | struct mem_desc *mem = NULL; |
3103 | 3103 | ||
3104 | nvgpu_mutex_acquire(&mm->vidmem.clear_list_mutex); | 3104 | nvgpu_mutex_acquire(&mm->vidmem.clear_list_mutex); |
3105 | mem = list_first_entry_or_null(&mm->vidmem.clear_list_head, | 3105 | if (!nvgpu_list_empty(&mm->vidmem.clear_list_head)) { |
3106 | struct mem_desc, clear_list_entry); | 3106 | mem = nvgpu_list_first_entry(&mm->vidmem.clear_list_head, |
3107 | if (mem) | 3107 | mem_desc, clear_list_entry); |
3108 | list_del_init(&mem->clear_list_entry); | 3108 | nvgpu_list_del(&mem->clear_list_entry); |
3109 | } | ||
3109 | nvgpu_mutex_release(&mm->vidmem.clear_list_mutex); | 3110 | nvgpu_mutex_release(&mm->vidmem.clear_list_mutex); |
3110 | 3111 | ||
3111 | return mem; | 3112 | return mem; |
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h index 2c8eb16d..db99535a 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <asm/cacheflush.h> | 27 | #include <asm/cacheflush.h> |
28 | 28 | ||
29 | #include <nvgpu/allocator.h> | 29 | #include <nvgpu/allocator.h> |
30 | #include <nvgpu/list.h> | ||
30 | 31 | ||
31 | #ifdef CONFIG_ARM64 | 32 | #ifdef CONFIG_ARM64 |
32 | #define outer_flush_range(a, b) | 33 | #define outer_flush_range(a, b) |
@@ -76,11 +77,18 @@ struct mem_desc { | |||
76 | bool fixed; /* vidmem only */ | 77 | bool fixed; /* vidmem only */ |
77 | bool user_mem; /* vidmem only */ | 78 | bool user_mem; /* vidmem only */ |
78 | struct nvgpu_allocator *allocator; /* vidmem only */ | 79 | struct nvgpu_allocator *allocator; /* vidmem only */ |
79 | struct list_head clear_list_entry; /* vidmem only */ | 80 | struct nvgpu_list_node clear_list_entry; /* vidmem only */ |
80 | bool skip_wmb; | 81 | bool skip_wmb; |
81 | unsigned long flags; | 82 | unsigned long flags; |
82 | }; | 83 | }; |
83 | 84 | ||
85 | static inline struct mem_desc * | ||
86 | mem_desc_from_clear_list_entry(struct nvgpu_list_node *node) | ||
87 | { | ||
88 | return (struct mem_desc *) | ||
89 | ((uintptr_t)node - offsetof(struct mem_desc, clear_list_entry)); | ||
90 | }; | ||
91 | |||
84 | struct mem_desc_sub { | 92 | struct mem_desc_sub { |
85 | u32 offset; | 93 | u32 offset; |
86 | u32 size; | 94 | u32 size; |
@@ -416,7 +424,7 @@ struct mm_gk20a { | |||
416 | volatile bool cleared; | 424 | volatile bool cleared; |
417 | struct nvgpu_mutex first_clear_mutex; | 425 | struct nvgpu_mutex first_clear_mutex; |
418 | 426 | ||
419 | struct list_head clear_list_head; | 427 | struct nvgpu_list_node clear_list_head; |
420 | struct nvgpu_mutex clear_list_mutex; | 428 | struct nvgpu_mutex clear_list_mutex; |
421 | 429 | ||
422 | struct work_struct clear_mem_worker; | 430 | struct work_struct clear_mem_worker; |