mirror of https://gitee.com/openkylin/linux.git
drm/amdgpu: Update pin_size values before unpinning BO
At least in theory, ttm_bo_validate may move the BO, in which case the pin_size accounting would be inconsistent with when the BO was pinned. Cc: stable@vger.kernel.org Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
5c53d19b76
commit
34d6d59986
|
@ -790,15 +790,6 @@ int amdgpu_bo_unpin(struct amdgpu_bo *bo)
|
||||||
bo->pin_count--;
|
bo->pin_count--;
|
||||||
if (bo->pin_count)
|
if (bo->pin_count)
|
||||||
return 0;
|
return 0;
|
||||||
for (i = 0; i < bo->placement.num_placement; i++) {
|
|
||||||
bo->placements[i].lpfn = 0;
|
|
||||||
bo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT;
|
|
||||||
}
|
|
||||||
r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
|
|
||||||
if (unlikely(r)) {
|
|
||||||
dev_err(adev->dev, "%p validate failed for unpin\n", bo);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bo->tbo.mem.mem_type == TTM_PL_VRAM) {
|
if (bo->tbo.mem.mem_type == TTM_PL_VRAM) {
|
||||||
adev->vram_pin_size -= amdgpu_bo_size(bo);
|
adev->vram_pin_size -= amdgpu_bo_size(bo);
|
||||||
|
@ -808,7 +799,14 @@ int amdgpu_bo_unpin(struct amdgpu_bo *bo)
|
||||||
adev->gart_pin_size -= amdgpu_bo_size(bo);
|
adev->gart_pin_size -= amdgpu_bo_size(bo);
|
||||||
}
|
}
|
||||||
|
|
||||||
error:
|
for (i = 0; i < bo->placement.num_placement; i++) {
|
||||||
|
bo->placements[i].lpfn = 0;
|
||||||
|
bo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT;
|
||||||
|
}
|
||||||
|
r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
|
||||||
|
if (unlikely(r))
|
||||||
|
dev_err(adev->dev, "%p validate failed for unpin\n", bo);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue