summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
diff options
context:
space:
mode:
authorPrateek Sethi <prsethi@nvidia.com>2018-05-04 01:00:18 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-05-14 05:44:10 -0400
commit4dac924aba27aa46267fb39f3ed968318292a7f5 (patch)
tree077a169898690265649bd88cf7e78dfe206a6ad2 /drivers/gpu/nvgpu/vgpu/gr_vgpu.c
parent7a28547892bfa73d31c1423b33e98030840a4f6d (diff)
gpu: nvgpu: nvhost: PC_SAMPLING ioctl failure.
NVGPU_DBG_GPU_IOCTL_PC_SAMPLING ioctl is not handled properly for HV case for both Linux and QNX. Currently guest vm is trying to perform gpu memory read and write operations which supposed to be done by RM server, causing the crash. This patch is supposed to fix ioctl failure. Bug 2052040 Change-Id: Ia0773959b84739a1bced858331764751520a3561 Signed-off-by: Prateek Sethi <prsethi@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1708102 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Sourab Gupta <sourabg@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Sourab Gupta <sourabg@nvidia.com> Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/gr_vgpu.c')
-rw-r--r--drivers/gpu/nvgpu/vgpu/gr_vgpu.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
index 1e633d5f..9d765984 100644
--- a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
@@ -1310,3 +1310,30 @@ int vgpu_gr_init_fs_state(struct gk20a *g)
1310 1310
1311 return g->ops.gr.init_sm_id_table(g); 1311 return g->ops.gr.init_sm_id_table(g);
1312} 1312}
1313
1314int vgpu_gr_update_pc_sampling(struct channel_gk20a *ch, bool enable)
1315{
1316 struct tegra_vgpu_cmd_msg msg;
1317 struct tegra_vgpu_channel_update_pc_sampling *p =
1318 &msg.params.update_pc_sampling;
1319 struct gk20a *g;
1320 int err = -EINVAL;
1321
1322 if (!ch->g)
1323 return err;
1324 g = ch->g;
1325 nvgpu_log_fn(g, " ");
1326
1327 msg.cmd = TEGRA_VGPU_CMD_UPDATE_PC_SAMPLING;
1328 msg.handle = vgpu_get_handle(g);
1329 p->handle = ch->virt_ctx;
1330 if (enable)
1331 p->mode = TEGRA_VGPU_ENABLE_SAMPLING;
1332 else
1333 p->mode = TEGRA_VGPU_DISABLE_SAMPLING;
1334
1335 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
1336 WARN_ON(err || msg.ret);
1337
1338 return err ? err : msg.ret;
1339}