summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2017-04-04 04:32:42 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-04-10 02:54:26 -0400
commite4464fd552d0bee2ca149c6a51fbf88b0fafb531 (patch)
tree8124ac83f97483839522aaf644e1bde00b128177 /drivers/gpu/nvgpu
parentdb2ee5c127afc3c270b0a5c0e74660f0532dafbe (diff)
gpu: nvgpu: use nvgpu list for channel and debug session lists
Use nvgpu list APIs instead of linux list APIs to store channel list in debug session and to store debug session list in channel Jira NVGPU-13 Change-Id: Iaf89524955a155adcb8a24505df6613bd9c4ccfb Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/1454690 Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c2
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c35
-rw-r--r--drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h20
4 files changed, 39 insertions, 20 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 81901c52..94d193ed 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -2641,7 +2641,7 @@ int gk20a_init_channel_support(struct gk20a *g, u32 chid)
2641 nvgpu_raw_spinlock_init(&c->timeout.lock); 2641 nvgpu_raw_spinlock_init(&c->timeout.lock);
2642 2642
2643 INIT_LIST_HEAD(&c->joblist.dynamic.jobs); 2643 INIT_LIST_HEAD(&c->joblist.dynamic.jobs);
2644 INIT_LIST_HEAD(&c->dbg_s_list); 2644 nvgpu_init_list_node(&c->dbg_s_list);
2645 INIT_LIST_HEAD(&c->event_id_list); 2645 INIT_LIST_HEAD(&c->event_id_list);
2646 INIT_LIST_HEAD(&c->worker_item); 2646 INIT_LIST_HEAD(&c->worker_item);
2647 2647
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h
index 8c863124..223aa641 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h
@@ -224,7 +224,7 @@ struct channel_gk20a {
224 struct gk20a_cs_snapshot_client *cs_client; 224 struct gk20a_cs_snapshot_client *cs_client;
225#endif 225#endif
226 struct nvgpu_mutex dbg_s_lock; 226 struct nvgpu_mutex dbg_s_lock;
227 struct list_head dbg_s_list; 227 struct nvgpu_list_node dbg_s_list;
228 228
229 struct list_head event_id_list; 229 struct list_head event_id_list;
230 struct nvgpu_mutex event_id_list_lock; 230 struct nvgpu_mutex event_id_list_lock;
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
index 1ebb1900..1eaca686 100644
--- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
@@ -47,13 +47,13 @@ nvgpu_dbg_gpu_get_session_channel(struct dbg_session_gk20a *dbg_s)
47 struct gk20a *g = dbg_s->g; 47 struct gk20a *g = dbg_s->g;
48 48
49 nvgpu_mutex_acquire(&dbg_s->ch_list_lock); 49 nvgpu_mutex_acquire(&dbg_s->ch_list_lock);
50 if (list_empty(&dbg_s->ch_list)) { 50 if (nvgpu_list_empty(&dbg_s->ch_list)) {
51 nvgpu_mutex_release(&dbg_s->ch_list_lock); 51 nvgpu_mutex_release(&dbg_s->ch_list_lock);
52 return NULL; 52 return NULL;
53 } 53 }
54 54
55 ch_data = list_first_entry(&dbg_s->ch_list, 55 ch_data = nvgpu_list_first_entry(&dbg_s->ch_list,
56 struct dbg_session_channel_data, 56 dbg_session_channel_data,
57 ch_entry); 57 ch_entry);
58 ch = g->fifo.channel + ch_data->chid; 58 ch = g->fifo.channel + ch_data->chid;
59 59
@@ -138,7 +138,7 @@ static int gk20a_dbg_gpu_do_dev_open(struct inode *inode,
138 dbg_session->is_timeout_disabled = false; 138 dbg_session->is_timeout_disabled = false;
139 139
140 init_waitqueue_head(&dbg_session->dbg_events.wait_queue); 140 init_waitqueue_head(&dbg_session->dbg_events.wait_queue);
141 INIT_LIST_HEAD(&dbg_session->ch_list); 141 nvgpu_init_list_node(&dbg_session->ch_list);
142 err = nvgpu_mutex_init(&dbg_session->ch_list_lock); 142 err = nvgpu_mutex_init(&dbg_session->ch_list_lock);
143 if (err) 143 if (err)
144 goto err_free_session; 144 goto err_free_session;
@@ -305,7 +305,8 @@ void gk20a_dbg_gpu_post_events(struct channel_gk20a *ch)
305 /* guard against the session list being modified */ 305 /* guard against the session list being modified */
306 nvgpu_mutex_acquire(&ch->dbg_s_lock); 306 nvgpu_mutex_acquire(&ch->dbg_s_lock);
307 307
308 list_for_each_entry(session_data, &ch->dbg_s_list, dbg_s_entry) { 308 nvgpu_list_for_each_entry(session_data, &ch->dbg_s_list,
309 dbg_session_data, dbg_s_entry) {
309 dbg_s = session_data->dbg_s; 310 dbg_s = session_data->dbg_s;
310 if (dbg_s->dbg_events.events_enabled) { 311 if (dbg_s->dbg_events.events_enabled) {
311 gk20a_dbg(gpu_dbg_gpu_dbg, "posting event on session id %d", 312 gk20a_dbg(gpu_dbg_gpu_dbg, "posting event on session id %d",
@@ -333,7 +334,8 @@ bool gk20a_dbg_gpu_broadcast_stop_trigger(struct channel_gk20a *ch)
333 /* guard against the session list being modified */ 334 /* guard against the session list being modified */
334 nvgpu_mutex_acquire(&ch->dbg_s_lock); 335 nvgpu_mutex_acquire(&ch->dbg_s_lock);
335 336
336 list_for_each_entry(session_data, &ch->dbg_s_list, dbg_s_entry) { 337 nvgpu_list_for_each_entry(session_data, &ch->dbg_s_list,
338 dbg_session_data, dbg_s_entry) {
337 dbg_s = session_data->dbg_s; 339 dbg_s = session_data->dbg_s;
338 if (dbg_s->broadcast_stop_trigger) { 340 if (dbg_s->broadcast_stop_trigger) {
339 gk20a_dbg(gpu_dbg_gpu_dbg | gpu_dbg_fn | gpu_dbg_intr, 341 gk20a_dbg(gpu_dbg_gpu_dbg | gpu_dbg_fn | gpu_dbg_intr,
@@ -358,7 +360,8 @@ int gk20a_dbg_gpu_clear_broadcast_stop_trigger(struct channel_gk20a *ch)
358 /* guard against the session list being modified */ 360 /* guard against the session list being modified */
359 nvgpu_mutex_acquire(&ch->dbg_s_lock); 361 nvgpu_mutex_acquire(&ch->dbg_s_lock);
360 362
361 list_for_each_entry(session_data, &ch->dbg_s_list, dbg_s_entry) { 363 nvgpu_list_for_each_entry(session_data, &ch->dbg_s_list,
364 dbg_session_data, dbg_s_entry) {
362 dbg_s = session_data->dbg_s; 365 dbg_s = session_data->dbg_s;
363 if (dbg_s->broadcast_stop_trigger) { 366 if (dbg_s->broadcast_stop_trigger) {
364 gk20a_dbg(gpu_dbg_gpu_dbg | gpu_dbg_fn | gpu_dbg_intr, 367 gk20a_dbg(gpu_dbg_gpu_dbg | gpu_dbg_fn | gpu_dbg_intr,
@@ -440,10 +443,10 @@ int dbg_unbind_single_channel_gk20a(struct dbg_session_gk20a *dbg_s,
440 } 443 }
441 } 444 }
442 445
443 list_del_init(&ch_data->ch_entry); 446 nvgpu_list_del(&ch_data->ch_entry);
444 447
445 session_data = ch_data->session_data; 448 session_data = ch_data->session_data;
446 list_del_init(&session_data->dbg_s_entry); 449 nvgpu_list_del(&session_data->dbg_s_entry);
447 nvgpu_kfree(dbg_s->g, session_data); 450 nvgpu_kfree(dbg_s->g, session_data);
448 451
449 fput(ch_data->ch_f); 452 fput(ch_data->ch_f);
@@ -459,7 +462,8 @@ static int dbg_unbind_all_channels_gk20a(struct dbg_session_gk20a *dbg_s)
459 462
460 nvgpu_mutex_acquire(&g->dbg_sessions_lock); 463 nvgpu_mutex_acquire(&g->dbg_sessions_lock);
461 nvgpu_mutex_acquire(&dbg_s->ch_list_lock); 464 nvgpu_mutex_acquire(&dbg_s->ch_list_lock);
462 list_for_each_entry_safe(ch_data, tmp, &dbg_s->ch_list, ch_entry) 465 nvgpu_list_for_each_entry_safe(ch_data, tmp, &dbg_s->ch_list,
466 dbg_session_channel_data, ch_entry)
463 dbg_unbind_single_channel_gk20a(dbg_s, ch_data); 467 dbg_unbind_single_channel_gk20a(dbg_s, ch_data);
464 nvgpu_mutex_release(&dbg_s->ch_list_lock); 468 nvgpu_mutex_release(&dbg_s->ch_list_lock);
465 nvgpu_mutex_release(&g->dbg_sessions_lock); 469 nvgpu_mutex_release(&g->dbg_sessions_lock);
@@ -486,7 +490,8 @@ static int dbg_unbind_channel_gk20a(struct dbg_session_gk20a *dbg_s,
486 } 490 }
487 491
488 nvgpu_mutex_acquire(&dbg_s->ch_list_lock); 492 nvgpu_mutex_acquire(&dbg_s->ch_list_lock);
489 list_for_each_entry(ch_data, &dbg_s->ch_list, ch_entry) { 493 nvgpu_list_for_each_entry(ch_data, &dbg_s->ch_list,
494 dbg_session_channel_data, ch_entry) {
490 if (ch->hw_chid == ch_data->chid) { 495 if (ch->hw_chid == ch_data->chid) {
491 channel_found = true; 496 channel_found = true;
492 break; 497 break;
@@ -591,7 +596,7 @@ static int dbg_bind_channel_gk20a(struct dbg_session_gk20a *dbg_s,
591 ch_data->ch_f = f; 596 ch_data->ch_f = f;
592 ch_data->channel_fd = args->channel_fd; 597 ch_data->channel_fd = args->channel_fd;
593 ch_data->chid = ch->hw_chid; 598 ch_data->chid = ch->hw_chid;
594 INIT_LIST_HEAD(&ch_data->ch_entry); 599 nvgpu_init_list_node(&ch_data->ch_entry);
595 600
596 session_data = nvgpu_kzalloc(g, sizeof(*session_data)); 601 session_data = nvgpu_kzalloc(g, sizeof(*session_data));
597 if (!session_data) { 602 if (!session_data) {
@@ -600,13 +605,13 @@ static int dbg_bind_channel_gk20a(struct dbg_session_gk20a *dbg_s,
600 return -ENOMEM; 605 return -ENOMEM;
601 } 606 }
602 session_data->dbg_s = dbg_s; 607 session_data->dbg_s = dbg_s;
603 INIT_LIST_HEAD(&session_data->dbg_s_entry); 608 nvgpu_init_list_node(&session_data->dbg_s_entry);
604 ch_data->session_data = session_data; 609 ch_data->session_data = session_data;
605 610
606 list_add(&session_data->dbg_s_entry, &ch->dbg_s_list); 611 nvgpu_list_add(&session_data->dbg_s_entry, &ch->dbg_s_list);
607 612
608 nvgpu_mutex_acquire(&dbg_s->ch_list_lock); 613 nvgpu_mutex_acquire(&dbg_s->ch_list_lock);
609 list_add_tail(&ch_data->ch_entry, &dbg_s->ch_list); 614 nvgpu_list_add_tail(&ch_data->ch_entry, &dbg_s->ch_list);
610 nvgpu_mutex_release(&dbg_s->ch_list_lock); 615 nvgpu_mutex_release(&dbg_s->ch_list_lock);
611 616
612 nvgpu_mutex_release(&ch->dbg_s_lock); 617 nvgpu_mutex_release(&ch->dbg_s_lock);
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
index e8d2dbe5..beb57664 100644
--- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
@@ -69,7 +69,7 @@ struct dbg_session_gk20a {
69 struct gk20a *g; 69 struct gk20a *g;
70 70
71 /* list of bound channels, if any */ 71 /* list of bound channels, if any */
72 struct list_head ch_list; 72 struct nvgpu_list_node ch_list;
73 struct nvgpu_mutex ch_list_lock; 73 struct nvgpu_mutex ch_list_lock;
74 74
75 /* event support */ 75 /* event support */
@@ -82,17 +82,31 @@ struct dbg_session_gk20a {
82 82
83struct dbg_session_data { 83struct dbg_session_data {
84 struct dbg_session_gk20a *dbg_s; 84 struct dbg_session_gk20a *dbg_s;
85 struct list_head dbg_s_entry; 85 struct nvgpu_list_node dbg_s_entry;
86};
87
88static inline struct dbg_session_data *
89dbg_session_data_from_dbg_s_entry(struct nvgpu_list_node *node)
90{
91 return (struct dbg_session_data *)
92 ((uintptr_t)node - offsetof(struct dbg_session_data, dbg_s_entry));
86}; 93};
87 94
88struct dbg_session_channel_data { 95struct dbg_session_channel_data {
89 struct file *ch_f; 96 struct file *ch_f;
90 int channel_fd; 97 int channel_fd;
91 int chid; 98 int chid;
92 struct list_head ch_entry; 99 struct nvgpu_list_node ch_entry;
93 struct dbg_session_data *session_data; 100 struct dbg_session_data *session_data;
94}; 101};
95 102
103static inline struct dbg_session_channel_data *
104dbg_session_channel_data_from_ch_entry(struct nvgpu_list_node *node)
105{
106 return (struct dbg_session_channel_data *)
107 ((uintptr_t)node - offsetof(struct dbg_session_channel_data, ch_entry));
108};
109
96struct dbg_profiler_object_data { 110struct dbg_profiler_object_data {
97 int session_id; 111 int session_id;
98 u32 prof_handle; 112 u32 prof_handle;