diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4890-drm-amdgpu-Warn-and-update-pin_size-values-when-dest.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4890-drm-amdgpu-Warn-and-update-pin_size-values-when-dest.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4890-drm-amdgpu-Warn-and-update-pin_size-values-when-dest.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4890-drm-amdgpu-Warn-and-update-pin_size-values-when-dest.patch new file mode 100644 index 00000000..e3da7ea6 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4890-drm-amdgpu-Warn-and-update-pin_size-values-when-dest.patch @@ -0,0 +1,84 @@ +From 398cee6e91a6e4dc849e126ae3582da85ea1bbf7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com> +Date: Wed, 11 Jul 2018 12:42:55 +0200 +Subject: [PATCH 4890/5725] drm/amdgpu: Warn and update pin_size values when + destroying a pinned BO +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This shouldn't happen, but if it does, we'll get a backtrace of the +caller, and update the pin_size values as needed. + +v2: +* Check bo->pin_count instead of placement flags (Christian König) + +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Raveendra Talabattula <raveendra.talabattula@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 33 +++++++++++++++++++++++------- + 1 file changed, 26 insertions(+), 7 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +index b483732..aecee98 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +@@ -63,6 +63,27 @@ static bool amdgpu_need_backup(struct amdgpu_device *adev) + return true; + } + ++/** ++ * amdgpu_bo_subtract_pin_size - Remove BO from pin_size accounting ++ * ++ * @bo: &amdgpu_bo buffer object ++ * ++ * This function is called when a BO stops being pinned, and updates the ++ * &amdgpu_device pin_size values accordingly. ++ */ ++static void amdgpu_bo_subtract_pin_size(struct amdgpu_bo *bo) ++{ ++ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); ++ ++ if (bo->tbo.mem.mem_type == TTM_PL_VRAM) { ++ atomic64_sub(amdgpu_bo_size(bo), &adev->vram_pin_size); ++ atomic64_sub(amdgpu_vram_mgr_bo_visible_size(bo), ++ &adev->visible_pin_size); ++ } else if (bo->tbo.mem.mem_type == TTM_PL_TT) { ++ atomic64_sub(amdgpu_bo_size(bo), &adev->gart_pin_size); ++ } ++} ++ + static void amdgpu_ttm_bo_destroy(struct ttm_buffer_object *tbo) + { + struct amdgpu_device *adev = amdgpu_ttm_adev(tbo->bdev); +@@ -71,6 +92,10 @@ static void amdgpu_ttm_bo_destroy(struct ttm_buffer_object *tbo) + + if (bo->tbo.mem.mem_type == AMDGPU_PL_DGMA_IMPORT) + kfree(tbo->mem.bus.addr); ++ ++ if (WARN_ON_ONCE(bo->pin_count > 0)) ++ amdgpu_bo_subtract_pin_size(bo); ++ + if (bo->kfd_bo) + amdgpu_amdkfd_unreserve_system_memory_limit(bo); + +@@ -1008,13 +1033,7 @@ int amdgpu_bo_unpin(struct amdgpu_bo *bo) + if (bo->pin_count) + return 0; + +- if (bo->tbo.mem.mem_type == TTM_PL_VRAM) { +- atomic64_sub(amdgpu_bo_size(bo), &adev->vram_pin_size); +- atomic64_sub(amdgpu_vram_mgr_bo_visible_size(bo), +- &adev->visible_pin_size); +- } else if (bo->tbo.mem.mem_type == TTM_PL_TT) { +- atomic64_sub(amdgpu_bo_size(bo), &adev->gart_pin_size); +- } ++ amdgpu_bo_subtract_pin_size(bo); + + for (i = 0; i < bo->placement.num_placement; i++) { + bo->placements[i].lpfn = 0; +-- +2.7.4 + |