Good catch, Reviewed-by: Chunming Zhou <david1.zhou at amd.com> On 2017å¹´12æ??28æ?¥ 11:17, Emily Deng wrote: > 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 at amd.com> > --- > 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 */