summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
diff options
context:
space:
mode:
authorPeter Daifuku <pdaifuku@nvidia.com>2016-12-06 19:54:07 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2016-12-17 22:15:50 -0500
commit1b539a33d8dca88dafffda8f410d6847a891c7e4 (patch)
treeea89b764b9b14d3d30b1bc9171b5ad2baa511502 /drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
parent8ef013e36ec2dc3be878d057024290e00b7aad49 (diff)
gpu: nvgpu: update vsms_mapping ioctl
Update vsms_mapping ioctl to copy from the internal sm_to_cluster array to new nvgpu_gpu_vsms_mapping_entry array before copying the latter back to user. Bug 200260086 Change-Id: I0fccc6fb6e0d6b6f737b3a44818d2b47438cd3c8 Signed-off-by: Peter Daifuku <pdaifuku@nvidia.com> Reviewed-on: http://git-master/r/1266174 (cherry picked from commit e28882c05491cb8f9573ff71c2d7309e5714e385) Reviewed-on: http://git-master/r/1269623 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c b/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
index 5660f521..defa4fdd 100644
--- a/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
@@ -582,11 +582,24 @@ static int gk20a_ctrl_vsm_mapping(struct gk20a *g,
582{ 582{
583 int err = 0; 583 int err = 0;
584 struct gr_gk20a *gr = &g->gr; 584 struct gr_gk20a *gr = &g->gr;
585 size_t write_size = gr->no_of_sm * sizeof(struct sm_info); 585 size_t write_size = gr->no_of_sm *
586 sizeof(struct nvgpu_gpu_vsms_mapping_entry);
587 struct nvgpu_gpu_vsms_mapping_entry *vsms_buf;
588 u32 i;
589
590 vsms_buf = kzalloc(write_size, GFP_KERNEL);
591 if (vsms_buf == NULL)
592 return -ENOMEM;
593
594 for (i = 0; i < gr->no_of_sm; i++) {
595 vsms_buf[i].gpc_index = gr->sm_to_cluster[i].gpc_index;
596 vsms_buf[i].tpc_index = gr->sm_to_cluster[i].tpc_index;
597 }
586 598
587 err = copy_to_user((void __user *)(uintptr_t) 599 err = copy_to_user((void __user *)(uintptr_t)
588 args->vsms_map_buf_addr, 600 args->vsms_map_buf_addr,
589 gr->sm_to_cluster, write_size); 601 vsms_buf, write_size);
602 kfree(vsms_buf);
590 603
591 return err; 604 return err;
592} 605}