summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c
diff options
context:
space:
mode:
authorKonsta Holtta <kholtta@nvidia.com>2018-01-16 08:38:13 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-01-20 05:19:02 -0500
commit3ccf5c85fbc329cc5a72b86f83379d7a151a1f5a (patch)
treedcf5471132826f285b5ad0c38b789ff177a8fec9 /drivers/gpu/nvgpu/common/linux/ioctl_dbg.c
parent4021d42cbb37c6d7cd30bd132d1d08d004422917 (diff)
gpu: nvgpu: add g->sw_ready flag
Fix a race condition where we'd still be booting up the gpu and/or initializing the driver but elsewhere assume that all is done already. Some userspace APIs to make sure that we're ready by testing g->gr.sw_ready, but this flag is set in the middle of bootup; there are other things after gr initialization. Add a new flag that is enabled after bootup is fully complete at the end of finalize_poweron, and change the checks in user API paths to test the new flag only. These checks are only in the ioctl paths for ctrl, dbg and tsg, and in the ctrl device's opening path. The gr.sw_ready flag is still left there to signify whether just gr has had its bookkeeping initialized. Bug 200370011 Change-Id: I2995500e06de46430d9b835de1e9d60b3f01744e Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1640124 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux/ioctl_dbg.c')
-rw-r--r--drivers/gpu/nvgpu/common/linux/ioctl_dbg.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c b/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c
index 9372fca8..ebb869c3 100644
--- a/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c
+++ b/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c
@@ -1835,7 +1835,7 @@ long gk20a_dbg_gpu_dev_ioctl(struct file *filp, unsigned int cmd,
1835 return -EFAULT; 1835 return -EFAULT;
1836 } 1836 }
1837 1837
1838 if (!g->gr.sw_ready) { 1838 if (!g->sw_ready) {
1839 err = gk20a_busy(g); 1839 err = gk20a_busy(g);
1840 if (err) 1840 if (err)
1841 return err; 1841 return err;