diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-04-05 03:00:53 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-04-10 02:54:31 -0400 |
commit | a89d168202ceb8fdb317cd977cc71cd4efab8c19 (patch) | |
tree | 56ad904d419fe3aaff62776ae3336fa7fbcfce98 | |
parent | e4464fd552d0bee2ca149c6a51fbf88b0fafb531 (diff) |
gpu: nvgpu: use nvgpu list for profiler objects
Use nvgpu list APIs instead of linux list APIs
to store profiler objects
Jira NVGPU-13
Change-Id: I2a2715b3a86c6e526bbdbb040c283a3ddd7b24ba
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/1454691
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/common/nvgpu_common.c | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c | 33 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h | 9 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/vgpu.c | 2 |
5 files changed, 28 insertions, 20 deletions
diff --git a/drivers/gpu/nvgpu/common/nvgpu_common.c b/drivers/gpu/nvgpu/common/nvgpu_common.c index 843228e9..65d94092 100644 --- a/drivers/gpu/nvgpu/common/nvgpu_common.c +++ b/drivers/gpu/nvgpu/common/nvgpu_common.c | |||
@@ -54,7 +54,7 @@ static void nvgpu_init_vars(struct gk20a *g) | |||
54 | INIT_LIST_HEAD(&g->pending_sema_waits); | 54 | INIT_LIST_HEAD(&g->pending_sema_waits); |
55 | nvgpu_raw_spinlock_init(&g->pending_sema_waits_lock); | 55 | nvgpu_raw_spinlock_init(&g->pending_sema_waits_lock); |
56 | 56 | ||
57 | INIT_LIST_HEAD(&g->profiler_objects); | 57 | nvgpu_init_list_node(&g->profiler_objects); |
58 | } | 58 | } |
59 | 59 | ||
60 | static void nvgpu_init_timeout(struct gk20a *g) | 60 | static void nvgpu_init_timeout(struct gk20a *g) |
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c index 1eaca686..d7f8ceba 100644 --- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c | |||
@@ -430,15 +430,15 @@ int dbg_unbind_single_channel_gk20a(struct dbg_session_gk20a *dbg_s, | |||
430 | /* If there's a profiler ctx reservation record associated with this | 430 | /* If there's a profiler ctx reservation record associated with this |
431 | * session/channel pair, release it. | 431 | * session/channel pair, release it. |
432 | */ | 432 | */ |
433 | list_for_each_entry_safe(prof_obj, tmp_obj, &g->profiler_objects, | 433 | nvgpu_list_for_each_entry_safe(prof_obj, tmp_obj, &g->profiler_objects, |
434 | prof_obj_entry) { | 434 | dbg_profiler_object_data, prof_obj_entry) { |
435 | if ((prof_obj->session_id == dbg_s->id) && | 435 | if ((prof_obj->session_id == dbg_s->id) && |
436 | (prof_obj->ch->hw_chid == chid)) { | 436 | (prof_obj->ch->hw_chid == chid)) { |
437 | if (prof_obj->has_reservation) { | 437 | if (prof_obj->has_reservation) { |
438 | g->ops.dbg_session_ops. | 438 | g->ops.dbg_session_ops. |
439 | release_profiler_reservation(dbg_s, prof_obj); | 439 | release_profiler_reservation(dbg_s, prof_obj); |
440 | } | 440 | } |
441 | list_del(&prof_obj->prof_obj_entry); | 441 | nvgpu_list_del(&prof_obj->prof_obj_entry); |
442 | nvgpu_kfree(g, prof_obj); | 442 | nvgpu_kfree(g, prof_obj); |
443 | } | 443 | } |
444 | } | 444 | } |
@@ -536,13 +536,13 @@ int gk20a_dbg_gpu_dev_release(struct inode *inode, struct file *filp) | |||
536 | /* Per-context profiler objects were released when we called | 536 | /* Per-context profiler objects were released when we called |
537 | * dbg_unbind_all_channels. We could still have global ones. | 537 | * dbg_unbind_all_channels. We could still have global ones. |
538 | */ | 538 | */ |
539 | list_for_each_entry_safe(prof_obj, tmp_obj, &g->profiler_objects, | 539 | nvgpu_list_for_each_entry_safe(prof_obj, tmp_obj, &g->profiler_objects, |
540 | prof_obj_entry) { | 540 | dbg_profiler_object_data, prof_obj_entry) { |
541 | if (prof_obj->session_id == dbg_s->id) { | 541 | if (prof_obj->session_id == dbg_s->id) { |
542 | if (prof_obj->has_reservation) | 542 | if (prof_obj->has_reservation) |
543 | g->ops.dbg_session_ops. | 543 | g->ops.dbg_session_ops. |
544 | release_profiler_reservation(dbg_s, prof_obj); | 544 | release_profiler_reservation(dbg_s, prof_obj); |
545 | list_del(&prof_obj->prof_obj_entry); | 545 | nvgpu_list_del(&prof_obj->prof_obj_entry); |
546 | nvgpu_kfree(g, prof_obj); | 546 | nvgpu_kfree(g, prof_obj); |
547 | } | 547 | } |
548 | } | 548 | } |
@@ -1555,9 +1555,9 @@ static int nvgpu_ioctl_allocate_profiler_object( | |||
1555 | /* Return handle to client */ | 1555 | /* Return handle to client */ |
1556 | args->profiler_handle = prof_obj->prof_handle; | 1556 | args->profiler_handle = prof_obj->prof_handle; |
1557 | 1557 | ||
1558 | INIT_LIST_HEAD(&prof_obj->prof_obj_entry); | 1558 | nvgpu_init_list_node(&prof_obj->prof_obj_entry); |
1559 | 1559 | ||
1560 | list_add(&prof_obj->prof_obj_entry, &g->profiler_objects); | 1560 | nvgpu_list_add(&prof_obj->prof_obj_entry, &g->profiler_objects); |
1561 | clean_up: | 1561 | clean_up: |
1562 | nvgpu_mutex_release(&g->dbg_sessions_lock); | 1562 | nvgpu_mutex_release(&g->dbg_sessions_lock); |
1563 | return err; | 1563 | return err; |
@@ -1578,8 +1578,8 @@ static int nvgpu_ioctl_free_profiler_object( | |||
1578 | nvgpu_mutex_acquire(&g->dbg_sessions_lock); | 1578 | nvgpu_mutex_acquire(&g->dbg_sessions_lock); |
1579 | 1579 | ||
1580 | /* Remove profiler object from the list, if a match is found */ | 1580 | /* Remove profiler object from the list, if a match is found */ |
1581 | list_for_each_entry_safe(prof_obj, tmp_obj, &g->profiler_objects, | 1581 | nvgpu_list_for_each_entry_safe(prof_obj, tmp_obj, &g->profiler_objects, |
1582 | prof_obj_entry) { | 1582 | dbg_profiler_object_data, prof_obj_entry) { |
1583 | if (prof_obj->prof_handle == args->profiler_handle) { | 1583 | if (prof_obj->prof_handle == args->profiler_handle) { |
1584 | if (prof_obj->session_id != dbg_s->id) { | 1584 | if (prof_obj->session_id != dbg_s->id) { |
1585 | gk20a_err(dev_from_gk20a(g), | 1585 | gk20a_err(dev_from_gk20a(g), |
@@ -1591,7 +1591,7 @@ static int nvgpu_ioctl_free_profiler_object( | |||
1591 | if (prof_obj->has_reservation) | 1591 | if (prof_obj->has_reservation) |
1592 | g->ops.dbg_session_ops. | 1592 | g->ops.dbg_session_ops. |
1593 | release_profiler_reservation(dbg_s, prof_obj); | 1593 | release_profiler_reservation(dbg_s, prof_obj); |
1594 | list_del(&prof_obj->prof_obj_entry); | 1594 | nvgpu_list_del(&prof_obj->prof_obj_entry); |
1595 | nvgpu_kfree(g, prof_obj); | 1595 | nvgpu_kfree(g, prof_obj); |
1596 | obj_found = true; | 1596 | obj_found = true; |
1597 | break; | 1597 | break; |
@@ -1614,7 +1614,8 @@ static struct dbg_profiler_object_data *find_matching_prof_obj( | |||
1614 | struct gk20a *g = dbg_s->g; | 1614 | struct gk20a *g = dbg_s->g; |
1615 | struct dbg_profiler_object_data *prof_obj; | 1615 | struct dbg_profiler_object_data *prof_obj; |
1616 | 1616 | ||
1617 | list_for_each_entry(prof_obj, &g->profiler_objects, prof_obj_entry) { | 1617 | nvgpu_list_for_each_entry(prof_obj, &g->profiler_objects, |
1618 | dbg_profiler_object_data, prof_obj_entry) { | ||
1618 | if (prof_obj->prof_handle == profiler_handle) { | 1619 | if (prof_obj->prof_handle == profiler_handle) { |
1619 | if (prof_obj->session_id != dbg_s->id) { | 1620 | if (prof_obj->session_id != dbg_s->id) { |
1620 | gk20a_err(dev_from_gk20a(g), | 1621 | gk20a_err(dev_from_gk20a(g), |
@@ -1727,8 +1728,8 @@ static int nvgpu_profiler_reserve_acquire(struct dbg_session_gk20a *dbg_s, | |||
1727 | */ | 1728 | */ |
1728 | int my_tsgid = my_prof_obj->ch->tsgid; | 1729 | int my_tsgid = my_prof_obj->ch->tsgid; |
1729 | 1730 | ||
1730 | list_for_each_entry(prof_obj, &g->profiler_objects, | 1731 | nvgpu_list_for_each_entry(prof_obj, &g->profiler_objects, |
1731 | prof_obj_entry) { | 1732 | dbg_profiler_object_data, prof_obj_entry) { |
1732 | if (prof_obj->has_reservation && | 1733 | if (prof_obj->has_reservation && |
1733 | (prof_obj->ch->tsgid == my_tsgid)) { | 1734 | (prof_obj->ch->tsgid == my_tsgid)) { |
1734 | gk20a_err(dev_from_gk20a(g), | 1735 | gk20a_err(dev_from_gk20a(g), |
@@ -1751,8 +1752,8 @@ static int nvgpu_profiler_reserve_acquire(struct dbg_session_gk20a *dbg_s, | |||
1751 | */ | 1752 | */ |
1752 | struct channel_gk20a *my_ch = my_prof_obj->ch; | 1753 | struct channel_gk20a *my_ch = my_prof_obj->ch; |
1753 | 1754 | ||
1754 | list_for_each_entry(prof_obj, &g->profiler_objects, | 1755 | nvgpu_list_for_each_entry(prof_obj, &g->profiler_objects, |
1755 | prof_obj_entry) { | 1756 | dbg_profiler_object_data, prof_obj_entry) { |
1756 | if (prof_obj->has_reservation && | 1757 | if (prof_obj->has_reservation && |
1757 | (prof_obj->ch == my_ch)) { | 1758 | (prof_obj->ch == my_ch)) { |
1758 | gk20a_err(dev_from_gk20a(g), | 1759 | gk20a_err(dev_from_gk20a(g), |
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h index beb57664..e48d8050 100644 --- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h | |||
@@ -112,7 +112,14 @@ struct dbg_profiler_object_data { | |||
112 | u32 prof_handle; | 112 | u32 prof_handle; |
113 | struct channel_gk20a *ch; | 113 | struct channel_gk20a *ch; |
114 | bool has_reservation; | 114 | bool has_reservation; |
115 | struct list_head prof_obj_entry; | 115 | struct nvgpu_list_node prof_obj_entry; |
116 | }; | ||
117 | |||
118 | static inline struct dbg_profiler_object_data * | ||
119 | dbg_profiler_object_data_from_prof_obj_entry(struct nvgpu_list_node *node) | ||
120 | { | ||
121 | return (struct dbg_profiler_object_data *) | ||
122 | ((uintptr_t)node - offsetof(struct dbg_profiler_object_data, prof_obj_entry)); | ||
116 | }; | 123 | }; |
117 | 124 | ||
118 | int dbg_unbind_single_channel_gk20a(struct dbg_session_gk20a *dbg_s, | 125 | int dbg_unbind_single_channel_gk20a(struct dbg_session_gk20a *dbg_s, |
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 4fa8b76f..bfb8b204 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -1023,7 +1023,7 @@ struct gk20a { | |||
1023 | u32 dbg_regops_tmp_buf_ops; | 1023 | u32 dbg_regops_tmp_buf_ops; |
1024 | 1024 | ||
1025 | /* For profiler reservations */ | 1025 | /* For profiler reservations */ |
1026 | struct list_head profiler_objects; | 1026 | struct nvgpu_list_node profiler_objects; |
1027 | bool global_profiler_reservation_held; | 1027 | bool global_profiler_reservation_held; |
1028 | int profiler_reservation_count; | 1028 | int profiler_reservation_count; |
1029 | 1029 | ||
diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c index 871f0874..54078bca 100644 --- a/drivers/gpu/nvgpu/vgpu/vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/vgpu.c | |||
@@ -260,7 +260,7 @@ static int vgpu_init_support(struct platform_device *pdev) | |||
260 | nvgpu_mutex_init(&g->dbg_sessions_lock); | 260 | nvgpu_mutex_init(&g->dbg_sessions_lock); |
261 | nvgpu_mutex_init(&g->client_lock); | 261 | nvgpu_mutex_init(&g->client_lock); |
262 | 262 | ||
263 | INIT_LIST_HEAD(&g->profiler_objects); | 263 | nvgpu_init_list_node(&g->profiler_objects); |
264 | 264 | ||
265 | g->dbg_regops_tmp_buf = nvgpu_kzalloc(g, SZ_4K); | 265 | g->dbg_regops_tmp_buf = nvgpu_kzalloc(g, SZ_4K); |
266 | if (!g->dbg_regops_tmp_buf) { | 266 | if (!g->dbg_regops_tmp_buf) { |