diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.h | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c | 35 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h | 20 |
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 | ||
83 | struct dbg_session_data { | 83 | struct 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 | |||
88 | static inline struct dbg_session_data * | ||
89 | dbg_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 | ||
88 | struct dbg_session_channel_data { | 95 | struct 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 | ||
103 | static inline struct dbg_session_channel_data * | ||
104 | dbg_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 | |||
96 | struct dbg_profiler_object_data { | 110 | struct dbg_profiler_object_data { |
97 | int session_id; | 111 | int session_id; |
98 | u32 prof_handle; | 112 | u32 prof_handle; |