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/common/linux/ioctl_channel.c | 8 ++++---- drivers/gpu/nvgpu/common/linux/ioctl_tsg.c | 8 ++++---- 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 +- 6 files changed, 26 insertions(+), 17 deletions(-) (limited to 'drivers/gpu/nvgpu') diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c index 0e121aa7..8da9eacb 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c @@ -574,13 +574,13 @@ static int gk20a_event_id_release(struct inode *inode, struct file *filp) struct tsg_gk20a *tsg = g->fifo.tsg + event_id_data->id; nvgpu_mutex_acquire(&tsg->event_id_list_lock); - 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); } else { struct channel_gk20a *ch = g->fifo.channel + event_id_data->id; nvgpu_mutex_acquire(&ch->event_id_list_lock); - 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); } @@ -697,10 +697,10 @@ static int gk20a_channel_event_id_enable(struct channel_gk20a *ch, err = nvgpu_mutex_init(&event_id_data->lock); if (err) goto clean_up_free; - INIT_LIST_HEAD(&event_id_data->event_id_node); + nvgpu_init_list_node(&event_id_data->event_id_node); nvgpu_mutex_acquire(&ch->event_id_list_lock); - list_add_tail(&event_id_data->event_id_node, &ch->event_id_list); + nvgpu_list_add_tail(&event_id_data->event_id_node, &ch->event_id_list); nvgpu_mutex_release(&ch->event_id_list_lock); fd_install(local_fd, file); diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c b/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c index 55a909dd..433b7c5d 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c @@ -55,8 +55,8 @@ static int gk20a_tsg_get_event_data_from_id(struct tsg_gk20a *tsg, bool event_found = false; nvgpu_mutex_acquire(&tsg->event_id_list_lock); - list_for_each_entry(local_event_id_data, &tsg->event_id_list, - event_id_node) { + nvgpu_list_for_each_entry(local_event_id_data, &tsg->event_id_list, + gk20a_event_id_data, event_id_node) { if (local_event_id_data->event_id == event_id) { event_found = true; break; @@ -148,10 +148,10 @@ static int gk20a_tsg_event_id_enable(struct tsg_gk20a *tsg, if (err) goto clean_up_free; - INIT_LIST_HEAD(&event_id_data->event_id_node); + nvgpu_init_list_node(&event_id_data->event_id_node); nvgpu_mutex_acquire(&tsg->event_id_list_lock); - list_add_tail(&event_id_data->event_id_node, &tsg->event_id_list); + nvgpu_list_add_tail(&event_id_data->event_id_node, &tsg->event_id_list); nvgpu_mutex_release(&tsg->event_id_list_lock); fd_install(local_fd, file); 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