Commit eda1068d authored by Felix Kuehling's avatar Felix Kuehling Committed by Alex Deucher
Browse files

drm/amdgpu: Make contiguous pinning optional



Enable pinning of VRAM without forcing it to be contiguous. When memory is
already pinned, make sure it's contiguous if requested.

Suggested-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent dcb820d1
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -911,10 +911,15 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,


	if (bo->tbo.pin_count) {
	if (bo->tbo.pin_count) {
		uint32_t mem_type = bo->tbo.mem.mem_type;
		uint32_t mem_type = bo->tbo.mem.mem_type;
		uint32_t mem_flags = bo->tbo.mem.placement;


		if (!(domain & amdgpu_mem_type_to_domain(mem_type)))
		if (!(domain & amdgpu_mem_type_to_domain(mem_type)))
			return -EINVAL;
			return -EINVAL;


		if ((bo->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS) &&
		    !(mem_flags & TTM_PL_FLAG_CONTIGUOUS))
			return -EINVAL;

		ttm_bo_pin(&bo->tbo);
		ttm_bo_pin(&bo->tbo);


		if (max_offset != 0) {
		if (max_offset != 0) {
@@ -930,7 +935,6 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
	if (bo->tbo.base.import_attach)
	if (bo->tbo.base.import_attach)
		dma_buf_pin(bo->tbo.base.import_attach);
		dma_buf_pin(bo->tbo.base.import_attach);


	bo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
	/* force to pin into visible video ram */
	/* force to pin into visible video ram */
	if (!(bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS))
	if (!(bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS))
		bo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
		bo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
@@ -983,6 +987,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
 */
 */
int amdgpu_bo_pin(struct amdgpu_bo *bo, u32 domain)
int amdgpu_bo_pin(struct amdgpu_bo *bo, u32 domain)
{
{
	bo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
	return amdgpu_bo_pin_restricted(bo, domain, 0, 0);
	return amdgpu_bo_pin_restricted(bo, domain, 0, 0);
}
}