diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index cf239b552..68a303924 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -418,7 +418,7 @@ void gk20a_disable_channel_no_update(struct channel_gk20a *ch) ccsr_channel_enable_clr_true_f()); } -static int gk20a_wait_channel_idle(struct channel_gk20a *ch) +int gk20a_wait_channel_idle(struct channel_gk20a *ch) { bool channel_idle = false; unsigned long end_jiffies = jiffies + @@ -435,8 +435,11 @@ static int gk20a_wait_channel_idle(struct channel_gk20a *ch) } while (time_before(jiffies, end_jiffies) || !tegra_platform_is_silicon()); - if (!channel_idle) - gk20a_err(dev_from_gk20a(ch->g), "channel jobs not freed"); + if (!channel_idle) { + gk20a_err(dev_from_gk20a(ch->g), "jobs not freed for channel %d\n", + ch->hw_chid); + return -EBUSY; + } return 0; } diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index e37511cb8..dd0197d6f 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h @@ -170,4 +170,6 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed); void gk20a_init_channel(struct gpu_ops *gops); +int gk20a_wait_channel_idle(struct channel_gk20a *ch); + #endif /*__CHANNEL_GK20A_H__*/