On 06/05/2018 04:20 PM, zhoucm1 wrote: > > > On 2018å¹´06æ??05æ?¥ 16:14, Christian König wrote: >> Am 05.06.2018 um 10:09 schrieb Junwei Zhang: >>> From: Christian König <ckoenig.leichtzumerken at gmail.com> >>> >>> (comments: I cannot receive amdgfx mail recently and reply the mail directly, >>> so send it out with my update v2, tested with Unigine Heaven, glmark2, gputest, >>> some cases from vulkan PRT test) >>> >>> v2: store bo_va as well >>> >>> We need to put the lose ends on the invalid list because it is possible >>> that we need to split up huge pages for them. >>> >>> Signed-off-by: Christian König <christian.koenig at amd.com> >>> Signed-off-by: Junwei Zhang <Jerry.Zhang at amd.com> >> >> Good catch that assigning the bo_va is also missing. David can you take a look >> and give a review? > Feel free add my RB on it, it looks very good. Thanks you all. I will apply the patch. Jerry > > Regards, > David Zhou >> >> Since I'm a co-author I can't do it myself. >> >> Thanks, >> Christian. >> >>> --- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 6 ++++-- >>> 1 file changed, 4 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >>> index 850cd66..cc9d486 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >>> @@ -2172,7 +2172,8 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device >>> *adev, >>> before->last = saddr - 1; >>> before->offset = tmp->offset; >>> before->flags = tmp->flags; >>> - list_add(&before->list, &tmp->list); >>> + before->bo_va = tmp->bo_va; >>> + list_add(&before->list, &tmp->bo_va->invalids); >>> } >>> /* Remember mapping split at the end */ >>> @@ -2182,7 +2183,8 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device >>> *adev, >>> after->offset = tmp->offset; >>> after->offset += after->start - tmp->start; >>> after->flags = tmp->flags; >>> - list_add(&after->list, &tmp->list); >>> + after->bo_va = tmp->bo_va; >>> + list_add(&after->list, &tmp->bo_va->invalids); >>> } >>> list_del(&tmp->list); >> >