diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-03-31 08:57:00 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-04-03 11:55:20 -0400 |
commit | 6c58737bed4477f3e3199956b29b3948a465c14d (patch) | |
tree | c8d2fa0af638c5082d7765ab1ce091c95d6e527d /drivers | |
parent | cd3cf04cac5f740135becb0fc70a16cfb8c2aaba (diff) |
gpu: nvgpu: use nvgpu list to store ch in TSG
Use nvgpu list APIs instead of linux list APIs
to store channel entries in TSG
Jira NVGPU-13
Change-Id: I2f64fffc5c43487e1c9e6ccef59c60f079c09da4
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/1454014
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/channel_gk20a.h | 9 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | 10 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/tsg_gk20a.h | 2 |
3 files changed, 14 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index fd36ff1f..37b1d945 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h | |||
@@ -190,7 +190,7 @@ struct channel_gk20a { | |||
190 | struct nvgpu_mutex ioctl_lock; | 190 | struct nvgpu_mutex ioctl_lock; |
191 | 191 | ||
192 | int tsgid; | 192 | int tsgid; |
193 | struct list_head ch_entry; /* channel's entry in TSG */ | 193 | struct nvgpu_list_node ch_entry; /* channel's entry in TSG */ |
194 | 194 | ||
195 | struct channel_gk20a_joblist joblist; | 195 | struct channel_gk20a_joblist joblist; |
196 | struct nvgpu_allocator fence_allocator; | 196 | struct nvgpu_allocator fence_allocator; |
@@ -278,6 +278,13 @@ channel_gk20a_from_free_chs(struct nvgpu_list_node *node) | |||
278 | ((uintptr_t)node - offsetof(struct channel_gk20a, free_chs)); | 278 | ((uintptr_t)node - offsetof(struct channel_gk20a, free_chs)); |
279 | }; | 279 | }; |
280 | 280 | ||
281 | static inline struct channel_gk20a * | ||
282 | channel_gk20a_from_ch_entry(struct nvgpu_list_node *node) | ||
283 | { | ||
284 | return (struct channel_gk20a *) | ||
285 | ((uintptr_t)node - offsetof(struct channel_gk20a, ch_entry)); | ||
286 | }; | ||
287 | |||
281 | static inline bool gk20a_channel_as_bound(struct channel_gk20a *ch) | 288 | static inline bool gk20a_channel_as_bound(struct channel_gk20a *ch) |
282 | { | 289 | { |
283 | return !!ch->vm; | 290 | return !!ch->vm; |
diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c index 1715c06a..cc3d94e4 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | |||
@@ -44,7 +44,7 @@ int gk20a_enable_tsg(struct tsg_gk20a *tsg) | |||
44 | struct channel_gk20a *ch; | 44 | struct channel_gk20a *ch; |
45 | 45 | ||
46 | down_read(&tsg->ch_list_lock); | 46 | down_read(&tsg->ch_list_lock); |
47 | list_for_each_entry(ch, &tsg->ch_list, ch_entry) { | 47 | nvgpu_list_for_each_entry(ch, &tsg->ch_list, channel_gk20a, ch_entry) { |
48 | g->ops.fifo.enable_channel(ch); | 48 | g->ops.fifo.enable_channel(ch); |
49 | } | 49 | } |
50 | up_read(&tsg->ch_list_lock); | 50 | up_read(&tsg->ch_list_lock); |
@@ -58,7 +58,7 @@ int gk20a_disable_tsg(struct tsg_gk20a *tsg) | |||
58 | struct channel_gk20a *ch; | 58 | struct channel_gk20a *ch; |
59 | 59 | ||
60 | down_read(&tsg->ch_list_lock); | 60 | down_read(&tsg->ch_list_lock); |
61 | list_for_each_entry(ch, &tsg->ch_list, ch_entry) { | 61 | nvgpu_list_for_each_entry(ch, &tsg->ch_list, channel_gk20a, ch_entry) { |
62 | g->ops.fifo.disable_channel(ch); | 62 | g->ops.fifo.disable_channel(ch); |
63 | } | 63 | } |
64 | up_read(&tsg->ch_list_lock); | 64 | up_read(&tsg->ch_list_lock); |
@@ -127,7 +127,7 @@ int gk20a_tsg_bind_channel(struct tsg_gk20a *tsg, | |||
127 | } | 127 | } |
128 | 128 | ||
129 | down_write(&tsg->ch_list_lock); | 129 | down_write(&tsg->ch_list_lock); |
130 | list_add_tail(&ch->ch_entry, &tsg->ch_list); | 130 | nvgpu_list_add_tail(&ch->ch_entry, &tsg->ch_list); |
131 | up_write(&tsg->ch_list_lock); | 131 | up_write(&tsg->ch_list_lock); |
132 | 132 | ||
133 | kref_get(&tsg->refcount); | 133 | kref_get(&tsg->refcount); |
@@ -145,7 +145,7 @@ int gk20a_tsg_unbind_channel(struct channel_gk20a *ch) | |||
145 | struct tsg_gk20a *tsg = &f->tsg[ch->tsgid]; | 145 | struct tsg_gk20a *tsg = &f->tsg[ch->tsgid]; |
146 | 146 | ||
147 | down_write(&tsg->ch_list_lock); | 147 | down_write(&tsg->ch_list_lock); |
148 | list_del_init(&ch->ch_entry); | 148 | nvgpu_list_del(&ch->ch_entry); |
149 | up_write(&tsg->ch_list_lock); | 149 | up_write(&tsg->ch_list_lock); |
150 | 150 | ||
151 | kref_put(&tsg->refcount, gk20a_tsg_release); | 151 | kref_put(&tsg->refcount, gk20a_tsg_release); |
@@ -168,7 +168,7 @@ int gk20a_init_tsg_support(struct gk20a *g, u32 tsgid) | |||
168 | tsg->in_use = false; | 168 | tsg->in_use = false; |
169 | tsg->tsgid = tsgid; | 169 | tsg->tsgid = tsgid; |
170 | 170 | ||
171 | INIT_LIST_HEAD(&tsg->ch_list); | 171 | nvgpu_init_list_node(&tsg->ch_list); |
172 | init_rwsem(&tsg->ch_list_lock); | 172 | init_rwsem(&tsg->ch_list_lock); |
173 | 173 | ||
174 | INIT_LIST_HEAD(&tsg->event_id_list); | 174 | INIT_LIST_HEAD(&tsg->event_id_list); |
diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h index f95ae008..b1f1640e 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h | |||
@@ -45,7 +45,7 @@ struct tsg_gk20a { | |||
45 | 45 | ||
46 | struct kref refcount; | 46 | struct kref refcount; |
47 | 47 | ||
48 | struct list_head ch_list; | 48 | struct nvgpu_list_node ch_list; |
49 | int num_active_channels; | 49 | int num_active_channels; |
50 | struct rw_semaphore ch_list_lock; | 50 | struct rw_semaphore ch_list_lock; |
51 | 51 | ||