summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
diff options
context:
space:
mode:
authorDavid Nieto <dmartineznie@nvidia.com>2017-03-13 21:45:37 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-03-24 00:05:35 -0400
commit2a502bdd5f3c93b87286456ca901ad43b0f14906 (patch)
treeaba5c18b07b393e0306588d9ba4707a6c272ae6b /drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
parenta84f601fbaf6b40e14a321eda1e83d93e55cebba (diff)
gpu: nvgpu: pass gk20a struct to gk20a_busy
After driver remove, the device structure passed in gk20a_busy can be invalid. To solve this the prototype of the function is modified to pass the gk20a struct instead of the device pointer. bug 200277762 JIRA: EVLR-1023 Change-Id: I08eb74bd3578834d45115098ed9936ebbb436fdf Signed-off-by: David Nieto <dmartineznie@nvidia.com> Reviewed-on: http://git-master/r/1320194 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> GVS: Gerrit_Virtual_Submit
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
index fb70c88b..0efbcf06 100644
--- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
@@ -766,14 +766,14 @@ static int nvgpu_dbg_gpu_ioctl_clear_single_sm_error_state(
766 if (sm_id >= gr->no_of_sm) 766 if (sm_id >= gr->no_of_sm)
767 return -EINVAL; 767 return -EINVAL;
768 768
769 err = gk20a_busy(g->dev); 769 err = gk20a_busy(g);
770 if (err) 770 if (err)
771 return err; 771 return err;
772 772
773 err = gr_gk20a_elpg_protected_call(g, 773 err = gr_gk20a_elpg_protected_call(g,
774 g->ops.gr.clear_sm_error_state(g, ch, sm_id)); 774 g->ops.gr.clear_sm_error_state(g, ch, sm_id));
775 775
776 gk20a_idle(g->dev); 776 gk20a_idle(g);
777 777
778 return err; 778 return err;
779} 779}
@@ -819,7 +819,7 @@ static int nvgpu_dbg_gpu_ioctl_write_single_sm_error_state(
819 } 819 }
820 } 820 }
821 821
822 err = gk20a_busy(g->dev); 822 err = gk20a_busy(g);
823 if (err) 823 if (err)
824 goto err_free; 824 goto err_free;
825 825
@@ -827,7 +827,7 @@ static int nvgpu_dbg_gpu_ioctl_write_single_sm_error_state(
827 g->ops.gr.update_sm_error_state(g, ch, 827 g->ops.gr.update_sm_error_state(g, ch,
828 sm_id, sm_error_state)); 828 sm_id, sm_error_state));
829 829
830 gk20a_idle(g->dev); 830 gk20a_idle(g);
831 831
832err_free: 832err_free:
833 kfree(sm_error_state); 833 kfree(sm_error_state);
@@ -843,7 +843,7 @@ nvgpu_dbg_gpu_ioctl_suspend_resume_contexts(struct dbg_session_gk20a *dbg_s,
843 int err = 0; 843 int err = 0;
844 int ctx_resident_ch_fd = -1; 844 int ctx_resident_ch_fd = -1;
845 845
846 err = gk20a_busy(g->dev); 846 err = gk20a_busy(g);
847 if (err) 847 if (err)
848 return err; 848 return err;
849 849
@@ -866,7 +866,7 @@ nvgpu_dbg_gpu_ioctl_suspend_resume_contexts(struct dbg_session_gk20a *dbg_s,
866 args->resident_context_fd = ctx_resident_ch_fd; 866 args->resident_context_fd = ctx_resident_ch_fd;
867 } 867 }
868 868
869 gk20a_idle(g->dev); 869 gk20a_idle(g);
870 870
871 return err; 871 return err;
872} 872}
@@ -905,7 +905,7 @@ static int nvgpu_dbg_gpu_ioctl_access_fb_memory(struct dbg_session_gk20a *dbg_s,
905 size = args->size; 905 size = args->size;
906 offset = 0; 906 offset = 0;
907 907
908 err = gk20a_busy(g->dev); 908 err = gk20a_busy(g);
909 if (err) 909 if (err)
910 goto fail_free_buffer; 910 goto fail_free_buffer;
911 911
@@ -940,7 +940,7 @@ static int nvgpu_dbg_gpu_ioctl_access_fb_memory(struct dbg_session_gk20a *dbg_s,
940 } 940 }
941 941
942fail_idle: 942fail_idle:
943 gk20a_idle(g->dev); 943 gk20a_idle(g);
944fail_free_buffer: 944fail_free_buffer:
945 nvgpu_big_free(g, buffer); 945 nvgpu_big_free(g, buffer);
946fail_dmabuf_put: 946fail_dmabuf_put:
@@ -972,11 +972,11 @@ long gk20a_dbg_gpu_dev_ioctl(struct file *filp, unsigned int cmd,
972 } 972 }
973 973
974 if (!g->gr.sw_ready) { 974 if (!g->gr.sw_ready) {
975 err = gk20a_busy(g->dev); 975 err = gk20a_busy(g);
976 if (err) 976 if (err)
977 return err; 977 return err;
978 978
979 gk20a_idle(g->dev); 979 gk20a_idle(g);
980 } 980 }
981 981
982 /* protect from threaded user space calls */ 982 /* protect from threaded user space calls */
@@ -1283,7 +1283,7 @@ static int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode)
1283 (g->dbg_powergating_disabled_refcount++ == 0)) { 1283 (g->dbg_powergating_disabled_refcount++ == 0)) {
1284 1284
1285 gk20a_dbg(gpu_dbg_gpu_dbg | gpu_dbg_fn, "module busy"); 1285 gk20a_dbg(gpu_dbg_gpu_dbg | gpu_dbg_fn, "module busy");
1286 err = gk20a_busy(g->dev); 1286 err = gk20a_busy(g);
1287 if (err) 1287 if (err)
1288 return err; 1288 return err;
1289 1289
@@ -1338,7 +1338,7 @@ static int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode)
1338 gk20a_pmu_pg_global_enable(g, true); 1338 gk20a_pmu_pg_global_enable(g, true);
1339 1339
1340 gk20a_dbg(gpu_dbg_gpu_dbg | gpu_dbg_fn, "module idle"); 1340 gk20a_dbg(gpu_dbg_gpu_dbg | gpu_dbg_fn, "module idle");
1341 gk20a_idle(g->dev); 1341 gk20a_idle(g);
1342 } 1342 }
1343 1343
1344 dbg_s->is_pg_disabled = false; 1344 dbg_s->is_pg_disabled = false;
@@ -1381,7 +1381,7 @@ static int nvgpu_dbg_gpu_ioctl_smpc_ctxsw_mode(struct dbg_session_gk20a *dbg_s,
1381 gk20a_dbg_fn("%s smpc ctxsw mode = %d", 1381 gk20a_dbg_fn("%s smpc ctxsw mode = %d",
1382 dev_name(dbg_s->dev), args->mode); 1382 dev_name(dbg_s->dev), args->mode);
1383 1383
1384 err = gk20a_busy(g->dev); 1384 err = gk20a_busy(g);
1385 if (err) { 1385 if (err) {
1386 gk20a_err(dev_from_gk20a(g), "failed to poweron"); 1386 gk20a_err(dev_from_gk20a(g), "failed to poweron");
1387 return err; 1387 return err;
@@ -1409,7 +1409,7 @@ static int nvgpu_dbg_gpu_ioctl_smpc_ctxsw_mode(struct dbg_session_gk20a *dbg_s,
1409 err = g->ops.regops.apply_smpc_war(dbg_s); 1409 err = g->ops.regops.apply_smpc_war(dbg_s);
1410 clean_up: 1410 clean_up:
1411 nvgpu_mutex_release(&g->dbg_sessions_lock); 1411 nvgpu_mutex_release(&g->dbg_sessions_lock);
1412 gk20a_idle(g->dev); 1412 gk20a_idle(g);
1413 return err; 1413 return err;
1414} 1414}
1415 1415
@@ -1433,8 +1433,7 @@ static int nvgpu_dbg_gpu_ioctl_hwpm_ctxsw_mode(struct dbg_session_gk20a *dbg_s,
1433 "session doesn't have a valid reservation"); 1433 "session doesn't have a valid reservation");
1434 } 1434 }
1435 1435
1436 1436 err = gk20a_busy(g);
1437 err = gk20a_busy(g->dev);
1438 if (err) { 1437 if (err) {
1439 gk20a_err(dev_from_gk20a(g), "failed to poweron"); 1438 gk20a_err(dev_from_gk20a(g), "failed to poweron");
1440 return err; 1439 return err;
@@ -1462,7 +1461,7 @@ static int nvgpu_dbg_gpu_ioctl_hwpm_ctxsw_mode(struct dbg_session_gk20a *dbg_s,
1462 */ 1461 */
1463 clean_up: 1462 clean_up:
1464 nvgpu_mutex_release(&g->dbg_sessions_lock); 1463 nvgpu_mutex_release(&g->dbg_sessions_lock);
1465 gk20a_idle(g->dev); 1464 gk20a_idle(g);
1466 return err; 1465 return err;
1467} 1466}
1468 1467
@@ -1480,7 +1479,7 @@ static int nvgpu_dbg_gpu_ioctl_suspend_resume_sm(
1480 if (!ch) 1479 if (!ch)
1481 return -EINVAL; 1480 return -EINVAL;
1482 1481
1483 err = gk20a_busy(g->dev); 1482 err = gk20a_busy(g);
1484 if (err) { 1483 if (err) {
1485 gk20a_err(dev_from_gk20a(g), "failed to poweron"); 1484 gk20a_err(dev_from_gk20a(g), "failed to poweron");
1486 return err; 1485 return err;
@@ -1512,7 +1511,7 @@ static int nvgpu_dbg_gpu_ioctl_suspend_resume_sm(
1512 1511
1513clean_up: 1512clean_up:
1514 nvgpu_mutex_release(&g->dbg_sessions_lock); 1513 nvgpu_mutex_release(&g->dbg_sessions_lock);
1515 gk20a_idle(g->dev); 1514 gk20a_idle(g);
1516 1515
1517 return err; 1516 return err;
1518} 1517}
@@ -1807,7 +1806,7 @@ static int gk20a_perfbuf_map(struct dbg_session_gk20a *dbg_s,
1807 goto fail_unmap; 1806 goto fail_unmap;
1808 } 1807 }
1809 1808
1810 err = gk20a_busy(g->dev); 1809 err = gk20a_busy(g);
1811 if (err) { 1810 if (err) {
1812 gk20a_err(dev_from_gk20a(g), "failed to poweron"); 1811 gk20a_err(dev_from_gk20a(g), "failed to poweron");
1813 goto fail_unmap; 1812 goto fail_unmap;
@@ -1830,7 +1829,7 @@ static int gk20a_perfbuf_map(struct dbg_session_gk20a *dbg_s,
1830 perf_pmasys_mem_block_valid_true_f() | 1829 perf_pmasys_mem_block_valid_true_f() |
1831 perf_pmasys_mem_block_target_lfb_f()); 1830 perf_pmasys_mem_block_target_lfb_f());
1832 1831
1833 gk20a_idle(g->dev); 1832 gk20a_idle(g);
1834 1833
1835 return 0; 1834 return 0;
1836 1835
@@ -1848,7 +1847,7 @@ static int gk20a_perfbuf_unmap(struct dbg_session_gk20a *dbg_s,
1848 if (!g->allow_all) 1847 if (!g->allow_all)
1849 return -EACCES; 1848 return -EACCES;
1850 1849
1851 err = gk20a_busy(g->dev); 1850 err = gk20a_busy(g);
1852 if (err) { 1851 if (err) {
1853 gk20a_err(dev_from_gk20a(g), "failed to poweron"); 1852 gk20a_err(dev_from_gk20a(g), "failed to poweron");
1854 return err; 1853 return err;
@@ -1864,7 +1863,7 @@ static int gk20a_perfbuf_unmap(struct dbg_session_gk20a *dbg_s,
1864 perf_pmasys_mem_block_valid_false_f() | 1863 perf_pmasys_mem_block_valid_false_f() |
1865 perf_pmasys_mem_block_target_f(0)); 1864 perf_pmasys_mem_block_target_f(0));
1866 1865
1867 gk20a_idle(g->dev); 1866 gk20a_idle(g);
1868 1867
1869 gk20a_vm_unmap_buffer(&g->mm.pmu.vm, args->offset, NULL); 1868 gk20a_vm_unmap_buffer(&g->mm.pmu.vm, args->offset, NULL);
1870 1869