From 03bcab9730b57e0ea4c121576fa3da6036d20a00 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Tue, 19 Dec 2017 04:59:37 -0800 Subject: gpu: nvgpu: fix non-IOMMU mappings In __nvgpu_gmmu_do_update_page_table(), and in case of non-IOMMU mappings, we call nvgpu_sgt_get_phys() to get physical address But this API ignores mapping attributes including l3_alloc attribute specified by user space, and this breaks L3 cache allocations Fix this by using g->ops.mm.gpu_phys_addr() which also considers the mapping attributes and returns appropriate physical address Jira GPUT19X-10 Bug 200279508 Change-Id: Ibc0d29f7cb576a9d6893a97b1912d9ff4bc78e02 Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1621245 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Seshendra Gadagottu GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom Tested-by: Alex Waterman Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/mm/gmmu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/gpu/nvgpu/common/mm') diff --git a/drivers/gpu/nvgpu/common/mm/gmmu.c b/drivers/gpu/nvgpu/common/mm/gmmu.c index 22f73083..1455822c 100644 --- a/drivers/gpu/nvgpu/common/mm/gmmu.c +++ b/drivers/gpu/nvgpu/common/mm/gmmu.c @@ -533,7 +533,8 @@ static int __nvgpu_gmmu_do_update_page_table(struct vm_gk20a *vm, continue; } - phys_addr = nvgpu_sgt_get_phys(sgt, sgl) + space_to_skip; + phys_addr = g->ops.mm.gpu_phys_addr(g, attrs, + nvgpu_sgt_get_phys(sgt, sgl)) + space_to_skip; chunk_length = min(length, nvgpu_sgt_get_length(sgt, sgl) - space_to_skip); -- cgit v1.2.2