diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 179e6fc1..4872bb95 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -831,8 +831,15 @@ static int gk20a_vidmem_clear_all(struct gk20a *g) | |||
831 | } | 831 | } |
832 | 832 | ||
833 | if (gk20a_fence_out) { | 833 | if (gk20a_fence_out) { |
834 | err = gk20a_fence_wait(gk20a_fence_out, | 834 | unsigned long end_jiffies = jiffies + |
835 | gk20a_get_gr_idle_timeout(g)); | 835 | msecs_to_jiffies(gk20a_get_gr_idle_timeout(g)); |
836 | |||
837 | do { | ||
838 | unsigned int timeout = jiffies_to_msecs(end_jiffies - jiffies); | ||
839 | err = gk20a_fence_wait(gk20a_fence_out, | ||
840 | timeout); | ||
841 | } while ((err == -ERESTARTSYS) && time_before(jiffies, end_jiffies)); | ||
842 | |||
836 | gk20a_fence_put(gk20a_fence_out); | 843 | gk20a_fence_put(gk20a_fence_out); |
837 | if (err) { | 844 | if (err) { |
838 | gk20a_err(g->dev, | 845 | gk20a_err(g->dev, |
@@ -2880,8 +2887,15 @@ static int gk20a_gmmu_clear_vidmem_mem(struct gk20a *g, struct mem_desc *mem) | |||
2880 | } | 2887 | } |
2881 | 2888 | ||
2882 | if (gk20a_last_fence) { | 2889 | if (gk20a_last_fence) { |
2883 | err = gk20a_fence_wait(gk20a_last_fence, | 2890 | unsigned long end_jiffies = jiffies + |
2884 | gk20a_get_gr_idle_timeout(g)); | 2891 | msecs_to_jiffies(gk20a_get_gr_idle_timeout(g)); |
2892 | |||
2893 | do { | ||
2894 | unsigned int timeout = jiffies_to_msecs(end_jiffies - jiffies); | ||
2895 | err = gk20a_fence_wait(gk20a_last_fence, | ||
2896 | timeout); | ||
2897 | } while ((err == -ERESTARTSYS) && time_before(jiffies, end_jiffies)); | ||
2898 | |||
2885 | gk20a_fence_put(gk20a_last_fence); | 2899 | gk20a_fence_put(gk20a_last_fence); |
2886 | if (err) | 2900 | if (err) |
2887 | gk20a_err(g->dev, | 2901 | gk20a_err(g->dev, |