diff options
author | David Nieto <dmartineznie@nvidia.com> | 2017-03-13 21:45:37 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-03-24 00:05:35 -0400 |
commit | 2a502bdd5f3c93b87286456ca901ad43b0f14906 (patch) | |
tree | aba5c18b07b393e0306588d9ba4707a6c272ae6b /drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c | |
parent | a84f601fbaf6b40e14a321eda1e83d93e55cebba (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.c | 45 |
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 | ||
832 | err_free: | 832 | err_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 | ||
942 | fail_idle: | 942 | fail_idle: |
943 | gk20a_idle(g->dev); | 943 | gk20a_idle(g); |
944 | fail_free_buffer: | 944 | fail_free_buffer: |
945 | nvgpu_big_free(g, buffer); | 945 | nvgpu_big_free(g, buffer); |
946 | fail_dmabuf_put: | 946 | fail_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 | ||
1513 | clean_up: | 1512 | clean_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 | ||