diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index a0e88c3e..1551dd16 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -3749,6 +3749,7 @@ static int update_gmmu_ptes_locked(struct vm_gk20a *vm, | |||
3749 | u64 ctag = (u64)ctag_offset * (u64)ctag_granularity; | 3749 | u64 ctag = (u64)ctag_offset * (u64)ctag_granularity; |
3750 | u64 iova = 0; | 3750 | u64 iova = 0; |
3751 | u64 space_to_skip = buffer_offset; | 3751 | u64 space_to_skip = buffer_offset; |
3752 | u64 map_size = gpu_end - gpu_va; | ||
3752 | u32 page_size = vm->gmmu_page_sizes[pgsz_idx]; | 3753 | u32 page_size = vm->gmmu_page_sizes[pgsz_idx]; |
3753 | int err; | 3754 | int err; |
3754 | struct scatterlist *sgl = NULL; | 3755 | struct scatterlist *sgl = NULL; |
@@ -3787,6 +3788,7 @@ static int update_gmmu_ptes_locked(struct vm_gk20a *vm, | |||
3787 | } else { | 3788 | } else { |
3788 | iova = chunk->base + space_to_skip; | 3789 | iova = chunk->base + space_to_skip; |
3789 | length = chunk->length - space_to_skip; | 3790 | length = chunk->length - space_to_skip; |
3791 | length = min(length, map_size); | ||
3790 | space_to_skip = 0; | 3792 | space_to_skip = 0; |
3791 | 3793 | ||
3792 | err = update_gmmu_level_locked(vm, | 3794 | err = update_gmmu_level_locked(vm, |
@@ -3799,10 +3801,16 @@ static int update_gmmu_ptes_locked(struct vm_gk20a *vm, | |||
3799 | cacheable, unmapped_pte, | 3801 | cacheable, unmapped_pte, |
3800 | rw_flag, sparse, 0, priv, | 3802 | rw_flag, sparse, 0, priv, |
3801 | aperture); | 3803 | aperture); |
3804 | if (err) | ||
3805 | break; | ||
3802 | 3806 | ||
3803 | /* need to set explicit zero here */ | 3807 | /* need to set explicit zero here */ |
3804 | space_to_skip = 0; | 3808 | space_to_skip = 0; |
3805 | gpu_va += length; | 3809 | gpu_va += length; |
3810 | map_size -= length; | ||
3811 | |||
3812 | if (!map_size) | ||
3813 | break; | ||
3806 | } | 3814 | } |
3807 | } | 3815 | } |
3808 | } else { | 3816 | } else { |