From 56df8c58088b5c8b4a09ce6f5e195614251bf8d0 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Thu, 23 Mar 2017 15:32:14 +0530 Subject: gpu: nvgpu: use new List APIs to free channels Use new APIs from to access free channel list Define channel_gk20a_from_free_chs() to convert a list node to struct channel_gk20a Jira NVGPU-13 Change-Id: Idaf58f04be1c7fc553bea7c8de45951bf82bb340 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/1303025 Reviewed-by: svccoveritychecker GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 12 ++++++------ drivers/gpu/nvgpu/gk20a/channel_gk20a.h | 10 +++++++++- drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 2 +- drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | 2 +- drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 2facb595..cd49b4a9 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -92,10 +92,10 @@ static struct channel_gk20a *allocate_channel(struct fifo_gk20a *f) platform = gk20a_get_platform(f->g->dev); nvgpu_mutex_acquire(&f->free_chs_mutex); - if (!list_empty(&f->free_chs)) { - ch = list_first_entry(&f->free_chs, struct channel_gk20a, - free_chs); - list_del(&ch->free_chs); + if (!nvgpu_list_empty(&f->free_chs)) { + ch = nvgpu_list_first_entry(&f->free_chs, channel_gk20a, + free_chs); + nvgpu_list_del(&ch->free_chs); WARN_ON(atomic_read(&ch->ref_count)); WARN_ON(ch->referenceable); f->used_channels++; @@ -120,7 +120,7 @@ static void free_channel(struct fifo_gk20a *f, /* refcount is zero here and channel is in a freed/dead state */ nvgpu_mutex_acquire(&f->free_chs_mutex); /* add to head to increase visibility of timing-related bugs */ - list_add(&ch->free_chs, &f->free_chs); + nvgpu_list_add(&ch->free_chs, &f->free_chs); f->used_channels--; nvgpu_mutex_release(&f->free_chs_mutex); @@ -3007,7 +3007,7 @@ int gk20a_init_channel_support(struct gk20a *g, u32 chid) if (err) goto fail_8; - list_add(&c->free_chs, &g->fifo.free_chs); + nvgpu_list_add(&c->free_chs, &g->fifo.free_chs); return 0; diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index d530f47d..fd36ff1f 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -157,7 +158,7 @@ struct channel_gk20a_ref_action { struct channel_gk20a { struct gk20a *g; /* set only when channel is active */ - struct list_head free_chs; + struct nvgpu_list_node free_chs; struct nvgpu_spinlock ref_obtain_lock; bool referenceable; @@ -270,6 +271,13 @@ struct channel_gk20a { bool is_privileged_channel; }; +static inline struct channel_gk20a * +channel_gk20a_from_free_chs(struct nvgpu_list_node *node) +{ + return (struct channel_gk20a *) + ((uintptr_t)node - offsetof(struct channel_gk20a, free_chs)); +}; + static inline bool gk20a_channel_as_bound(struct channel_gk20a *ch) { return !!ch->vm; diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index 743bc1f5..6a9a22b2 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c @@ -935,7 +935,7 @@ static int gk20a_init_fifo_setup_sw(struct gk20a *g) init_runlist(g, f); - INIT_LIST_HEAD(&f->free_chs); + nvgpu_init_list_node(&f->free_chs); nvgpu_mutex_init(&f->free_chs_mutex); if (g->ops.mm.is_bar1_supported(g)) diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h index 06269fa5..a399e95f 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h @@ -169,7 +169,7 @@ struct fifo_gk20a { unsigned int used_channels; struct channel_gk20a *channel; /* zero-kref'd channels here */ - struct list_head free_chs; + struct nvgpu_list_node free_chs; struct nvgpu_mutex free_chs_mutex; struct nvgpu_mutex gr_reset_mutex; diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c index 497f8c91..cfe9322e 100644 --- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c @@ -296,7 +296,7 @@ static int vgpu_init_fifo_setup_sw(struct gk20a *g) init_runlist(g, f); - INIT_LIST_HEAD(&f->free_chs); + nvgpu_init_list_node(&f->free_chs); nvgpu_mutex_init(&f->free_chs_mutex); for (chid = 0; chid < f->num_channels; chid++) { -- cgit v1.2.2