diff options
author | Aingara Paramakuru <aparamakuru@nvidia.com> | 2015-10-05 20:56:17 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2015-10-22 10:40:08 -0400 |
commit | fb3a1d31cd84771b659050ea1aa920bdf06ffb04 (patch) | |
tree | bfc6ee985d685353c41720cca252d2b9ab4fa86c /drivers/gpu/nvgpu/vgpu/gr_vgpu.c | |
parent | ee18a3ae2699513ab3762757432355b5624ce4a0 (diff) |
gpu: nvgpu: vgpu: fix notification handling
Take a channel ref when handling a notification from
the server, to prevent the channel from being closed.
Also, mark the channel as faulted before calling
g20a_channel_abort, to keep the semantics the same
as the native driver.
Bug 1653186
Change-Id: I0cb8ce7bad22a4d508eade6ff63a412296a02fc9
Signed-off-by: Aingara Paramakuru <aparamakuru@nvidia.com>
Reviewed-on: http://git-master/r/811885
Signed-off-by: Seema Khowala <seemaj@nvidia.com>
Reviewed-on: http://git-master/r/817021
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/gr_vgpu.c')
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/gr_vgpu.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c index 7dfc970e..b259a0c3 100644 --- a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c | |||
@@ -851,9 +851,12 @@ int vgpu_init_gr_support(struct gk20a *g) | |||
851 | int vgpu_gr_isr(struct gk20a *g, struct tegra_vgpu_gr_intr_info *info) | 851 | int vgpu_gr_isr(struct gk20a *g, struct tegra_vgpu_gr_intr_info *info) |
852 | { | 852 | { |
853 | struct fifo_gk20a *f = &g->fifo; | 853 | struct fifo_gk20a *f = &g->fifo; |
854 | struct channel_gk20a *ch = &f->channel[info->chid]; | 854 | struct channel_gk20a *ch = gk20a_channel_get(&f->channel[info->chid]); |
855 | 855 | ||
856 | gk20a_dbg_fn(""); | 856 | gk20a_dbg_fn(""); |
857 | if (!ch) | ||
858 | return 0; | ||
859 | |||
857 | if (info->type != TEGRA_VGPU_GR_INTR_NOTIFY && | 860 | if (info->type != TEGRA_VGPU_GR_INTR_NOTIFY && |
858 | info->type != TEGRA_VGPU_GR_INTR_SEMAPHORE) | 861 | info->type != TEGRA_VGPU_GR_INTR_SEMAPHORE) |
859 | gk20a_err(dev_from_gk20a(g), "gr intr (%d) on ch %u", | 862 | gk20a_err(dev_from_gk20a(g), "gr intr (%d) on ch %u", |
@@ -899,6 +902,7 @@ int vgpu_gr_isr(struct gk20a *g, struct tegra_vgpu_gr_intr_info *info) | |||
899 | break; | 902 | break; |
900 | } | 903 | } |
901 | 904 | ||
905 | gk20a_channel_put(ch); | ||
902 | return 0; | 906 | return 0; |
903 | } | 907 | } |
904 | 908 | ||