diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4888-drm-amdgpu-Keep-track-of-amount-of-pinned-CPU-visibl.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4888-drm-amdgpu-Keep-track-of-amount-of-pinned-CPU-visibl.patch | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4888-drm-amdgpu-Keep-track-of-amount-of-pinned-CPU-visibl.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4888-drm-amdgpu-Keep-track-of-amount-of-pinned-CPU-visibl.patch new file mode 100644 index 00000000..2d45a74a --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4888-drm-amdgpu-Keep-track-of-amount-of-pinned-CPU-visibl.patch @@ -0,0 +1,150 @@ +From 5d6f5f709a8ff95826eb0d023af0c6151230e6e5 Mon Sep 17 00:00:00 2001 +From: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com> +Date: Wed, 9 Jan 2019 20:25:53 +0530 +Subject: [PATCH 4888/5725] drm/amdgpu: Keep track of amount of pinned CPU + visible VRAM +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Instead of CPU invisible VRAM. Preparation for the following, no +functional change intended. + +v2: +* Also change amdgpu_vram_mgr_bo_invisible_size to + amdgpu_vram_mgr_bo_visible_size, allowing further simplification + (Christian König) + +Cc: stable@vger.kernel.org +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: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 5 ++--- + drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 ++-- + drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 2 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 20 ++++++++------------ + 5 files changed, 14 insertions(+), 19 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 80b88c3..e056008 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -1652,7 +1652,7 @@ struct amdgpu_device { + + /* tracking pinned memory */ + u64 vram_pin_size; +- u64 invisible_pin_size; ++ u64 visible_pin_size; + u64 gart_pin_size; + + /* amdkfd interface */ +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +index a7a0be9..02a5ef7 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +@@ -518,7 +518,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file + vram_gtt.vram_size = adev->gmc.real_vram_size; + vram_gtt.vram_size -= adev->vram_pin_size; + vram_gtt.vram_cpu_accessible_size = adev->gmc.visible_vram_size; +- vram_gtt.vram_cpu_accessible_size -= (adev->vram_pin_size - adev->invisible_pin_size); ++ vram_gtt.vram_cpu_accessible_size -= adev->visible_pin_size; + vram_gtt.gtt_size = adev->mman.bdev.man[TTM_PL_TT].size; + vram_gtt.gtt_size *= PAGE_SIZE; + vram_gtt.gtt_size -= adev->gart_pin_size; +@@ -539,8 +539,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file + mem.cpu_accessible_vram.total_heap_size = + adev->gmc.visible_vram_size; + mem.cpu_accessible_vram.usable_heap_size = +- adev->gmc.visible_vram_size - +- (adev->vram_pin_size - adev->invisible_pin_size); ++ adev->gmc.visible_vram_size - adev->visible_pin_size; + mem.cpu_accessible_vram.heap_usage = + amdgpu_vram_mgr_vis_usage(&adev->mman.bdev.man[TTM_PL_VRAM]); + mem.cpu_accessible_vram.max_allocation = +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +index 7b9da44..51f08a8 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +@@ -957,7 +957,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain, + domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); + if (domain == AMDGPU_GEM_DOMAIN_VRAM) { + adev->vram_pin_size += amdgpu_bo_size(bo); +- adev->invisible_pin_size += amdgpu_vram_mgr_bo_invisible_size(bo); ++ adev->visible_pin_size += amdgpu_vram_mgr_bo_visible_size(bo); + } else if (domain == AMDGPU_GEM_DOMAIN_GTT) { + adev->gart_pin_size += amdgpu_bo_size(bo); + } +@@ -1009,7 +1009,7 @@ int amdgpu_bo_unpin(struct amdgpu_bo *bo) + + if (bo->tbo.mem.mem_type == TTM_PL_VRAM) { + adev->vram_pin_size -= amdgpu_bo_size(bo); +- adev->invisible_pin_size -= amdgpu_vram_mgr_bo_invisible_size(bo); ++ adev->visible_pin_size -= amdgpu_vram_mgr_bo_visible_size(bo); + } else if (bo->tbo.mem.mem_type == TTM_PL_TT) { + adev->gart_pin_size -= amdgpu_bo_size(bo); + } +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h +index 42136da..66251b6 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h +@@ -77,7 +77,7 @@ bool amdgpu_gtt_mgr_has_gart_addr(struct ttm_mem_reg *mem); + uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man); + int amdgpu_gtt_mgr_recover(struct ttm_mem_type_manager *man); + +-u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo); ++u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo); + uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man); + uint64_t amdgpu_vram_mgr_vis_usage(struct ttm_mem_type_manager *man); + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +index e8790ea..f949efb 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +@@ -98,33 +98,29 @@ static u64 amdgpu_vram_mgr_vis_size(struct amdgpu_device *adev, + + + /** +- * amdgpu_vram_mgr_bo_invisible_size - CPU invisible BO size ++ * amdgpu_vram_mgr_bo_visible_size - CPU visible BO size + * + * @bo: &amdgpu_bo buffer object (must be in VRAM) + * + * Returns: +- * How much of the given &amdgpu_bo buffer object lies in CPU invisible VRAM. ++ * How much of the given &amdgpu_bo buffer object lies in CPU visible VRAM. + */ +-u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo) ++u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo) + { + struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); + struct ttm_mem_reg *mem = &bo->tbo.mem; + struct drm_mm_node *nodes = mem->mm_node; + unsigned pages = mem->num_pages; +- u64 usage = 0; ++ u64 usage; + + if (amdgpu_gmc_vram_full_visible(&adev->gmc)) +- return 0; ++ return amdgpu_bo_size(bo); + + if (mem->start >= adev->gmc.visible_vram_size >> PAGE_SHIFT) +- return amdgpu_bo_size(bo); ++ return 0; + +- while (nodes && pages) { +- usage += nodes->size << PAGE_SHIFT; +- usage -= amdgpu_vram_mgr_vis_size(adev, nodes); +- pages -= nodes->size; +- ++nodes; +- } ++ for (usage = 0; nodes && pages; pages -= nodes->size, nodes++) ++ usage += amdgpu_vram_mgr_vis_size(adev, nodes); + + return usage; + } +-- +2.7.4 + |