mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: wait for running jobs to finish before shutdown
In gk20a_pm_shutdown(), we currently call __pm_runtime_disable() which prevents h/w access to new requests made after shutdown() call Also, once gk20a_pm_shutdown() completes, platform code will just rail gate the GPU But it is possible that some other thread is already accessing h/w while shutdown() was triggered and this can result in hang Hence, wait until all currently executing jobs are finished before returning from gk20a_pm_shutdown() Also, we need to wait for GPU's usage count to become 1 since platform code will increase the usage count and then call shutdown(). Hence usage count of 1 indicates that GPU is idle Bug 200099940 Change-Id: I1f2457829e2737c07302d13f355353a30c3b4e67 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/734920 Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Tested-by: Bharat Nihalani <bnihalani@nvidia.com>
This commit is contained in:
committed by
Ishan Mittal
parent
d65a93b80c
commit
7ddd6e261e
@@ -1122,8 +1122,27 @@ static int gk20a_pm_disable_clk(struct device *dev)
|
||||
|
||||
static void gk20a_pm_shutdown(struct platform_device *pdev)
|
||||
{
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
unsigned long timeout = jiffies +
|
||||
msecs_to_jiffies(GK20A_WAIT_FOR_IDLE_MS);
|
||||
int ref_cnt;
|
||||
#endif
|
||||
|
||||
dev_info(&pdev->dev, "shutting down");
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
/* Prevent more requests by disabling Runtime PM */
|
||||
__pm_runtime_disable(&pdev->dev, false);
|
||||
|
||||
/* Wait until current running requests are finished */
|
||||
while (time_before(jiffies, timeout)) {
|
||||
ref_cnt = atomic_read(&pdev->dev.power.usage_count);
|
||||
if (ref_cnt > 1)
|
||||
msleep(1);
|
||||
else
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
Reference in New Issue
Block a user