mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
gpu: nvgpu: fix timeout retry usage in mm_gk20a.c
Loop conditions of timeout checking introduced in commit2109478311("gpu: nvgpu: Use timeout retry API in mm_gk20a.c") were flipped by accident, so each usage in a loop actually did not wait enough but ran only one iteration. Fix the conditions to loop as long as the timeout is NOT expired. Also restore l2 flush timeout to 10 ms from 1, which was done in commit030ef82bdd("gpu: nvgpu: increase l2 flush timeout") but overwritten by the above "use timeout" commit. Bug 200260715 Change-Id: I0db16be79a1a27caa3d97fac9d4361582cc232e8 Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: http://git-master/r/1268482 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-by: Alex Waterman <alexw@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
0859cf9539
commit
54810444d2
@@ -5049,7 +5049,7 @@ int gk20a_mm_fb_flush(struct gk20a *g)
|
|||||||
udelay(5);
|
udelay(5);
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
} while (nvgpu_timeout_check(&timeout));
|
} while (!nvgpu_timeout_check(&timeout));
|
||||||
|
|
||||||
if (nvgpu_timeout_peek(&timeout)) {
|
if (nvgpu_timeout_peek(&timeout)) {
|
||||||
if (g->ops.fb.dump_vpr_wpr_info)
|
if (g->ops.fb.dump_vpr_wpr_info)
|
||||||
@@ -5092,7 +5092,7 @@ static void gk20a_mm_l2_invalidate_locked(struct gk20a *g)
|
|||||||
udelay(5);
|
udelay(5);
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
} while (nvgpu_timeout_check(&timeout));
|
} while (!nvgpu_timeout_check(&timeout));
|
||||||
|
|
||||||
if (nvgpu_timeout_peek(&timeout))
|
if (nvgpu_timeout_peek(&timeout))
|
||||||
gk20a_warn(dev_from_gk20a(g),
|
gk20a_warn(dev_from_gk20a(g),
|
||||||
@@ -5125,7 +5125,7 @@ void gk20a_mm_l2_flush(struct gk20a *g, bool invalidate)
|
|||||||
if (!g->power_on)
|
if (!g->power_on)
|
||||||
goto hw_was_off;
|
goto hw_was_off;
|
||||||
|
|
||||||
nvgpu_timeout_init(g, &timeout, 200, NVGPU_TIMER_RETRY_TIMER);
|
nvgpu_timeout_init(g, &timeout, 2000, NVGPU_TIMER_RETRY_TIMER);
|
||||||
|
|
||||||
mutex_lock(&mm->l2_op_lock);
|
mutex_lock(&mm->l2_op_lock);
|
||||||
|
|
||||||
@@ -5147,7 +5147,7 @@ void gk20a_mm_l2_flush(struct gk20a *g, bool invalidate)
|
|||||||
udelay(5);
|
udelay(5);
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
} while (nvgpu_timeout_check_msg(&timeout,
|
} while (!nvgpu_timeout_check_msg(&timeout,
|
||||||
"l2_flush_dirty too many retries"));
|
"l2_flush_dirty too many retries"));
|
||||||
|
|
||||||
trace_gk20a_mm_l2_flush_done(dev_name(g->dev));
|
trace_gk20a_mm_l2_flush_done(dev_name(g->dev));
|
||||||
@@ -5192,7 +5192,7 @@ void gk20a_mm_cbc_clean(struct gk20a *g)
|
|||||||
udelay(5);
|
udelay(5);
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
} while (nvgpu_timeout_check_msg(&timeout,
|
} while (!nvgpu_timeout_check_msg(&timeout,
|
||||||
"l2_clean_comptags too many retries"));
|
"l2_clean_comptags too many retries"));
|
||||||
|
|
||||||
mutex_unlock(&mm->l2_op_lock);
|
mutex_unlock(&mm->l2_op_lock);
|
||||||
@@ -5259,7 +5259,7 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm)
|
|||||||
if (fb_mmu_ctrl_pri_fifo_space_v(data) != 0)
|
if (fb_mmu_ctrl_pri_fifo_space_v(data) != 0)
|
||||||
break;
|
break;
|
||||||
udelay(2);
|
udelay(2);
|
||||||
} while (nvgpu_timeout_check_msg(&timeout,
|
} while (!nvgpu_timeout_check_msg(&timeout,
|
||||||
"wait mmu fifo space"));
|
"wait mmu fifo space"));
|
||||||
|
|
||||||
if (nvgpu_timeout_peek(&timeout))
|
if (nvgpu_timeout_peek(&timeout))
|
||||||
@@ -5283,7 +5283,7 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm)
|
|||||||
fb_mmu_ctrl_pri_fifo_empty_false_f())
|
fb_mmu_ctrl_pri_fifo_empty_false_f())
|
||||||
break;
|
break;
|
||||||
udelay(2);
|
udelay(2);
|
||||||
} while (nvgpu_timeout_check_msg(&timeout,
|
} while (!nvgpu_timeout_check_msg(&timeout,
|
||||||
"wait mmu invalidate"));
|
"wait mmu invalidate"));
|
||||||
|
|
||||||
trace_gk20a_mm_tlb_invalidate_done(dev_name(g->dev));
|
trace_gk20a_mm_tlb_invalidate_done(dev_name(g->dev));
|
||||||
|
|||||||
Reference in New Issue
Block a user