From f474a9e0e41d62f6a804c6501068da621556013e Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Tue, 11 Apr 2017 17:48:00 +0530 Subject: gpu: nvgpu: use nvgpu list for event id list Use nvgpu list APIs instead of linux list APIs to store event IDs into channel and TSGs Jira NVGPU-13 Change-Id: I51e4b6ab3b38c845a870901b4d498927ca404a78 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/1460574 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 7 ++++--- drivers/gpu/nvgpu/gk20a/channel_gk20a.h | 11 +++++++++-- drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | 7 ++++--- drivers/gpu/nvgpu/gk20a/tsg_gk20a.h | 2 +- 4 files changed, 18 insertions(+), 9 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a') diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 88600f46..b729e0f8 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -828,10 +828,11 @@ struct channel_gk20a *gk20a_open_new_channel(struct gk20a *g, /* unhook all events created on this channel */ nvgpu_mutex_acquire(&ch->event_id_list_lock); - list_for_each_entry_safe(event_id_data, event_id_data_temp, + nvgpu_list_for_each_entry_safe(event_id_data, event_id_data_temp, &ch->event_id_list, + gk20a_event_id_data, event_id_node) { - list_del_init(&event_id_data->event_id_node); + nvgpu_list_del(&event_id_data->event_id_node); } nvgpu_mutex_release(&ch->event_id_list_lock); @@ -2644,7 +2645,7 @@ int gk20a_init_channel_support(struct gk20a *g, u32 chid) INIT_LIST_HEAD(&c->joblist.dynamic.jobs); nvgpu_init_list_node(&c->dbg_s_list); - INIT_LIST_HEAD(&c->event_id_list); + nvgpu_init_list_node(&c->event_id_list); INIT_LIST_HEAD(&c->worker_item); err = nvgpu_mutex_init(&c->ioctl_lock); diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index 223aa641..0514c5b8 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h @@ -109,7 +109,14 @@ struct gk20a_event_id_data { wait_queue_head_t event_id_wq; struct nvgpu_mutex lock; - struct list_head event_id_node; + struct nvgpu_list_node event_id_node; +}; + +static inline struct gk20a_event_id_data * +gk20a_event_id_data_from_event_id_node(struct nvgpu_list_node *node) +{ + return (struct gk20a_event_id_data *) + ((uintptr_t)node - offsetof(struct gk20a_event_id_data, event_id_node)); }; /* @@ -226,7 +233,7 @@ struct channel_gk20a { struct nvgpu_mutex dbg_s_lock; struct nvgpu_list_node dbg_s_list; - struct list_head event_id_list; + struct nvgpu_list_node event_id_list; struct nvgpu_mutex event_id_list_lock; bool has_timedout; diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c index 5f07ade7..d1e667b6 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c @@ -145,7 +145,7 @@ int gk20a_init_tsg_support(struct gk20a *g, u32 tsgid) nvgpu_init_list_node(&tsg->ch_list); init_rwsem(&tsg->ch_list_lock); - INIT_LIST_HEAD(&tsg->event_id_list); + nvgpu_init_list_node(&tsg->event_id_list); err = nvgpu_mutex_init(&tsg->event_id_list_lock); if (err) { tsg->in_use = true; /* make this TSG unusable */ @@ -297,10 +297,11 @@ void gk20a_tsg_release(struct kref *ref) /* unhook all events created on this TSG */ nvgpu_mutex_acquire(&tsg->event_id_list_lock); - list_for_each_entry_safe(event_id_data, event_id_data_temp, + nvgpu_list_for_each_entry_safe(event_id_data, event_id_data_temp, &tsg->event_id_list, + gk20a_event_id_data, event_id_node) { - list_del_init(&event_id_data->event_id_node); + nvgpu_list_del(&event_id_data->event_id_node); } nvgpu_mutex_release(&tsg->event_id_list_lock); diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h index 730a80b6..178b8672 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h @@ -52,7 +52,7 @@ struct tsg_gk20a { u32 interleave_level; - struct list_head event_id_list; + struct nvgpu_list_node event_id_list; struct nvgpu_mutex event_id_list_lock; u32 runlist_id; -- cgit v1.2.2