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 <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 7fbe971..7eb23b5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1584,13 +1584,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 */
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to