mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: Move deferred interrupt wait code
Move the code that waits for deferred interrupts to nvgpu_common.c and make it global. Also rename that function to use nvgpu_ as the function prefix. Bug 1816516 Bug 1807277 Change-Id: I42c4982ea853af5489051534219bfe8b253c2784 Signed-off-by: Alex Waterman <alexw@nvidia.com> Reviewed-on: http://git-master/r/1250027 (cherry picked from commit cb6fb03e20b08e5c3606ae8a5a9c237bfdf9e7da) Reviewed-on: http://git-master/r/1274475 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
91d977ced4
commit
9e2f7d98d4
@@ -231,3 +231,42 @@ const struct firmware *nvgpu_request_firmware(struct gk20a *g,
|
||||
|
||||
return fw;
|
||||
}
|
||||
|
||||
/**
|
||||
* cyclic_delta - Returns delta of cyclic integers a and b.
|
||||
*
|
||||
* @a - First integer
|
||||
* @b - Second integer
|
||||
*
|
||||
* Note: if a is ahead of b, delta is positive.
|
||||
*/
|
||||
static int cyclic_delta(int a, int b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
/**
|
||||
* nvgpu_wait_for_deferred_interrupts - Wait for interrupts to complete
|
||||
*
|
||||
* @g - The GPU to wait on.
|
||||
*
|
||||
* Waits until all interrupt handlers that have been scheduled to run have
|
||||
* completed.
|
||||
*/
|
||||
void nvgpu_wait_for_deferred_interrupts(struct gk20a *g)
|
||||
{
|
||||
int stall_irq_threshold = atomic_read(&g->hw_irq_stall_count);
|
||||
int nonstall_irq_threshold = atomic_read(&g->hw_irq_nonstall_count);
|
||||
|
||||
/* wait until all stalling irqs are handled */
|
||||
wait_event(g->sw_irq_stall_last_handled_wq,
|
||||
cyclic_delta(stall_irq_threshold,
|
||||
atomic_read(&g->sw_irq_stall_last_handled))
|
||||
<= 0);
|
||||
|
||||
/* wait until all non-stalling irqs are handled */
|
||||
wait_event(g->sw_irq_nonstall_last_handled_wq,
|
||||
cyclic_delta(nonstall_irq_threshold,
|
||||
atomic_read(&g->sw_irq_nonstall_last_handled))
|
||||
<= 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user