drm/amdgpu: Correct the IB size of bo update mapping.
authorEmily Deng <Emily.Deng@amd.com>
Fri, 29 Dec 2017 05:13:08 +0000 (13:13 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Sun, 31 Dec 2017 03:24:20 +0000 (22:24 -0500)
The amdgpu_vm_frag_ptes will call amdgpu_vm_update_ptes, and for buffer
object that has shadow buffer, need twice commands.

Signed-off-by: Emily Deng <Emily.Deng@amd.com>
Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

index e623109..d451080 100644 (file)
@@ -1200,13 +1200,19 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
          *
          * The second command is for the shadow pagetables.
         */
-       ncmds = ((nptes >> min(adev->vm_manager.block_size, 11u)) + 1) * 2;
+       if (vm->root.base.bo->shadow)
+               ncmds = ((nptes >> min(adev->vm_manager.block_size, 11u)) + 1) * 2;
+       else
+               ncmds = ((nptes >> min(adev->vm_manager.block_size, 11u)) + 1);
 
        /* padding, etc. */
        ndw = 64;
 
        /* one PDE write for each huge page */
-       ndw += ((nptes >> adev->vm_manager.block_size) + 1) * 6;
+       if (vm->root.base.bo->shadow)
+               ndw += ((nptes >> adev->vm_manager.block_size) + 1) * 6 * 2;
+       else
+               ndw += ((nptes >> adev->vm_manager.block_size) + 1) * 6;
 
        if (pages_addr) {
                /* copy commands needed */