All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felix Kuehling <felix.kuehling@amd.com>
To: "Pierre-Eric Pelloux-Prayer" <pierre-eric.pelloux-prayer@amd.com>,
	"Alex Deucher" <alexander.deucher@amd.com>,
	"Christian König" <christian.koenig@amd.com>,
	"David Airlie" <airlied@gmail.com>,
	"Simona Vetter" <simona@ffwll.ch>
Cc: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 08/20] drm/amdgpu: allocate multiple move entities
Date: Fri, 14 Nov 2025 15:57:07 -0500	[thread overview]
Message-ID: <63e91c77-e68f-4e8f-8218-18e37bd4151f@amd.com> (raw)
In-Reply-To: <20251113160632.5889-9-pierre-eric.pelloux-prayer@amd.com>

On 2025-11-13 11:05, Pierre-Eric Pelloux-Prayer wrote:
> No functional change for now, as we always use entity 0.
>
> Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>

Acked-by: Felix Kuehling <felix.kuehling@amd.com>


> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c  |  9 +++--
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c  | 48 +++++++++++++++---------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h  |  3 +-
>   drivers/gpu/drm/amd/amdkfd/kfd_migrate.c |  2 +-
>   4 files changed, 39 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
> index e73dcfed5338..2713dd51ab9a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
> @@ -686,9 +686,10 @@ void amdgpu_gmc_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid,
>   	 * translation. Avoid this by doing the invalidation from the SDMA
>   	 * itself at least for GART.
>   	 */
> -	mutex_lock(&adev->mman.move_entity.gart_window_lock);
>   	for (i = 0; i < adev->mman.num_clear_entities; i++)
>   		mutex_lock(&adev->mman.clear_entities[i].gart_window_lock);
> +	for (i = 0; i < adev->mman.num_move_entities; i++)
> +		mutex_lock(&adev->mman.move_entities[i].gart_window_lock);
>   	r = amdgpu_job_alloc_with_ib(ring->adev, &adev->mman.default_entity.base,
>   				     AMDGPU_FENCE_OWNER_UNDEFINED,
>   				     16 * 4, AMDGPU_IB_POOL_IMMEDIATE,
> @@ -701,7 +702,8 @@ void amdgpu_gmc_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid,
>   	job->ibs->ptr[job->ibs->length_dw++] = ring->funcs->nop;
>   	amdgpu_ring_pad_ib(ring, &job->ibs[0]);
>   	fence = amdgpu_job_submit(job);
> -	mutex_unlock(&adev->mman.move_entity.gart_window_lock);
> +	for (i = 0; i < adev->mman.num_move_entities; i++)
> +		mutex_unlock(&adev->mman.move_entities[i].gart_window_lock);
>   	for (i = 0; i < adev->mman.num_clear_entities; i++)
>   		mutex_unlock(&adev->mman.clear_entities[i].gart_window_lock);
>   
> @@ -711,7 +713,8 @@ void amdgpu_gmc_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid,
>   	return;
>   
>   error_alloc:
> -	mutex_unlock(&adev->mman.move_entity.gart_window_lock);
> +	for (i = 0; i < adev->mman.num_move_entities; i++)
> +		mutex_unlock(&adev->mman.move_entities[i].gart_window_lock);
>   	for (i = 0; i < adev->mman.num_clear_entities; i++)
>   		mutex_unlock(&adev->mman.clear_entities[i].gart_window_lock);
>   	dev_err(adev->dev, "Error flushing GPU TLB using the SDMA (%d)!\n", r);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 2f305ad32080..e1f0567fd2d5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -401,7 +401,7 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
>   	dst.offset = 0;
>   
>   	r = amdgpu_ttm_copy_mem_to_mem(adev,
> -				       &adev->mman.move_entity,
> +				       &adev->mman.move_entities[0],
>   				       &src, &dst,
>   				       new_mem->size,
>   				       amdgpu_bo_encrypted(abo),
> @@ -414,7 +414,7 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
>   	    (abo->flags & AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE)) {
>   		struct dma_fence *wipe_fence = NULL;
>   
> -		r = amdgpu_fill_buffer(&adev->mman.move_entity,
> +		r = amdgpu_fill_buffer(&adev->mman.move_entities[0],
>   				       abo, 0, NULL, &wipe_fence,
>   				       AMDGPU_KERNEL_JOB_ID_MOVE_BLIT);
>   		if (r) {
> @@ -2167,10 +2167,11 @@ u32 amdgpu_ttm_set_buffer_funcs_status(struct amdgpu_device *adev, bool enable)
>   	struct ttm_resource_manager *man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);
>   	uint64_t size;
>   	int r, i, j;
> -	u32 num_clear_entities, windows, w;
> +	u32 num_clear_entities, num_move_entities, windows, w;
>   
>   	num_clear_entities = adev->sdma.num_instances;
> -	windows = adev->gmc.is_app_apu ? 0 : (2 + num_clear_entities);
> +	num_move_entities = MIN(adev->sdma.num_instances, TTM_NUM_MOVE_FENCES);
> +	windows = adev->gmc.is_app_apu ? 0 : (2 * num_move_entities + num_clear_entities);
>   
>   	if (!adev->mman.initialized || amdgpu_in_reset(adev) ||
>   	    adev->mman.buffer_funcs_enabled == enable || adev->gmc.is_app_apu)
> @@ -2186,20 +2187,25 @@ u32 amdgpu_ttm_set_buffer_funcs_status(struct amdgpu_device *adev, bool enable)
>   					  DRM_SCHED_PRIORITY_KERNEL, &sched,
>   					  1, NULL);
>   		if (r) {
> -			dev_err(adev->dev,
> -				"Failed setting up TTM BO eviction entity (%d)\n",
> +			dev_err(adev->dev, "Failed setting up entity (%d)\n",
>   				r);
>   			return 0;
>   		}
>   
> -		r = drm_sched_entity_init(&adev->mman.move_entity.base,
> -					  DRM_SCHED_PRIORITY_NORMAL, &sched,
> -					  1, NULL);
> -		if (r) {
> -			dev_err(adev->dev,
> -				"Failed setting up TTM BO move entity (%d)\n",
> -				r);
> -			goto error_free_entity;
> +		adev->mman.num_move_entities = num_move_entities;
> +		for (i = 0; i < num_move_entities; i++) {
> +			r = drm_sched_entity_init(&adev->mman.move_entities[i].base,
> +						  DRM_SCHED_PRIORITY_NORMAL, &sched,
> +						  1, NULL);
> +			if (r) {
> +				dev_err(adev->dev,
> +					"Failed setting up TTM BO move entities (%d)\n",
> +					r);
> +				for (j = 0; j < i; j++)
> +					drm_sched_entity_destroy(
> +						&adev->mman.move_entities[j].base);
> +				goto error_free_entity;
> +			}
>   		}
>   
>   		adev->mman.num_clear_entities = num_clear_entities;
> @@ -2214,6 +2220,9 @@ u32 amdgpu_ttm_set_buffer_funcs_status(struct amdgpu_device *adev, bool enable)
>   						  DRM_SCHED_PRIORITY_NORMAL, &sched,
>   						  1, NULL);
>   			if (r) {
> +				for (j = 0; j < num_move_entities; j++)
> +					drm_sched_entity_destroy(
> +						&adev->mman.move_entities[j].base);
>   				for (j = 0; j < i; j++)
>   					drm_sched_entity_destroy(
>   						&adev->mman.clear_entities[j].base);
> @@ -2225,9 +2234,11 @@ u32 amdgpu_ttm_set_buffer_funcs_status(struct amdgpu_device *adev, bool enable)
>   		/* Statically assign GART windows to each entity. */
>   		w = 0;
>   		mutex_init(&adev->mman.default_entity.gart_window_lock);
> -		adev->mman.move_entity.gart_window_id0 = w++;
> -		adev->mman.move_entity.gart_window_id1 = w++;
> -		mutex_init(&adev->mman.move_entity.gart_window_lock);
> +		for (i = 0; i < num_move_entities; i++) {
> +			adev->mman.move_entities[i].gart_window_id0 = w++;
> +			adev->mman.move_entities[i].gart_window_id1 = w++;
> +			mutex_init(&adev->mman.move_entities[i].gart_window_lock);
> +		}
>   		for (i = 0; i < num_clear_entities; i++) {
>   			/* Clearing entities don't use id0 */
>   			adev->mman.clear_entities[i].gart_window_id1 = w++;
> @@ -2236,7 +2247,8 @@ u32 amdgpu_ttm_set_buffer_funcs_status(struct amdgpu_device *adev, bool enable)
>   		WARN_ON(w != windows);
>   	} else {
>   		drm_sched_entity_destroy(&adev->mman.default_entity.base);
> -		drm_sched_entity_destroy(&adev->mman.move_entity.base);
> +		for (i = 0; i < num_move_entities; i++)
> +			drm_sched_entity_destroy(&adev->mman.move_entities[i].base);
>   		for (i = 0; i < num_clear_entities; i++)
>   			drm_sched_entity_destroy(&adev->mman.clear_entities[i].base);
>   		for (i = 0; i < TTM_NUM_MOVE_FENCES; i++) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> index 797f851a4578..9d4891e86675 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> @@ -72,9 +72,10 @@ struct amdgpu_mman {
>   	struct mutex				gtt_window_lock;
>   
>   	struct amdgpu_ttm_buffer_entity default_entity; /* has no gart windows */
> -	struct amdgpu_ttm_buffer_entity move_entity;
>   	struct amdgpu_ttm_buffer_entity *clear_entities;
>   	u32 num_clear_entities;
> +	struct amdgpu_ttm_buffer_entity move_entities[TTM_NUM_MOVE_FENCES];
> +	u32 num_move_entities;
>   
>   	struct amdgpu_vram_mgr vram_mgr;
>   	struct amdgpu_gtt_mgr gtt_mgr;
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> index bc47fc362a17..943c3438c7ee 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> @@ -136,7 +136,7 @@ svm_migrate_copy_memory_gart(struct amdgpu_device *adev, dma_addr_t *sys,
>   	u64 size;
>   	int r;
>   
> -	entity = &adev->mman.move_entity;
> +	entity = &adev->mman.move_entities[0];
>   
>   	mutex_lock(&entity->gart_window_lock);
>   

  reply	other threads:[~2025-11-14 20:57 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-13 16:05 [PATCH v2 00/20] drm/amdgpu: use all SDMA instances for TTM clears and moves Pierre-Eric Pelloux-Prayer
2025-11-13 16:05 ` [PATCH v2 01/20] drm/amdgpu: give each kernel job a unique id Pierre-Eric Pelloux-Prayer
2025-11-14 12:26   ` Christian König
2025-11-14 14:36     ` Pierre-Eric Pelloux-Prayer
2025-11-14 14:57       ` Christian König
2025-11-13 16:05 ` [PATCH v2 02/20] drm/ttm: rework pipelined eviction fence handling Pierre-Eric Pelloux-Prayer
2025-11-14 12:47   ` Christian König
2025-11-18 15:00   ` Thomas Hellström
2025-11-19 14:57     ` Christian König
2025-11-13 16:05 ` [PATCH v2 03/20] drm/amdgpu: remove direct_submit arg from amdgpu_copy_buffer Pierre-Eric Pelloux-Prayer
2025-11-14 12:48   ` Christian König
2025-11-13 16:05 ` [PATCH v2 04/20] drm/amdgpu: introduce amdgpu_ttm_buffer_entity Pierre-Eric Pelloux-Prayer
2025-11-14 12:57   ` Christian König
2025-11-14 20:18     ` Felix Kuehling
2025-11-13 16:05 ` [PATCH v2 05/20] drm/amdgpu: pass the entity to use to ttm functions Pierre-Eric Pelloux-Prayer
2025-11-14 13:07   ` Christian König
2025-11-14 14:41     ` Pierre-Eric Pelloux-Prayer
2025-11-17  9:41       ` Pierre-Eric Pelloux-Prayer
2025-11-14 20:20   ` Felix Kuehling
2025-11-13 16:05 ` [PATCH v2 06/20] drm/amdgpu: statically assign gart windows to ttm entities Pierre-Eric Pelloux-Prayer
2025-11-14 15:15   ` Christian König
2025-11-14 20:24   ` Felix Kuehling
2025-11-19  9:55     ` Pierre-Eric Pelloux-Prayer
2025-11-13 16:05 ` [PATCH v2 07/20] drm/amdgpu: allocate multiple clear entities Pierre-Eric Pelloux-Prayer
2025-11-17  8:41   ` Christian König
2025-11-13 16:05 ` [PATCH v2 08/20] drm/amdgpu: allocate multiple move entities Pierre-Eric Pelloux-Prayer
2025-11-14 20:57   ` Felix Kuehling [this message]
2025-11-13 16:05 ` [PATCH v2 09/20] drm/amdgpu: pass optional dependency to amdgpu_fill_buffer Pierre-Eric Pelloux-Prayer
2025-11-17  8:43   ` Christian König
2025-11-13 16:05 ` [PATCH v2 10/20] drm/admgpu: handle resv dependencies in amdgpu_ttm_map_buffer Pierre-Eric Pelloux-Prayer
2025-11-17  8:44   ` Christian König
2025-11-19  8:28     ` Pierre-Eric Pelloux-Prayer
2025-11-13 16:05 ` [PATCH v2 11/20] drm/amdgpu: round robin through clear_entities in amdgpu_fill_buffer Pierre-Eric Pelloux-Prayer
2025-11-17  8:47   ` Christian König
2025-11-13 16:05 ` [PATCH v2 12/20] drm/amdgpu: use TTM_NUM_MOVE_FENCES when reserving fences Pierre-Eric Pelloux-Prayer
2025-11-14 20:57   ` Felix Kuehling
2025-11-17  9:07   ` Christian König
2025-11-13 16:05 ` [PATCH v2 13/20] drm/amdgpu: use multiple entities in amdgpu_move_blit Pierre-Eric Pelloux-Prayer
2025-11-17  9:12   ` Christian König
2025-11-13 16:05 ` [PATCH v2 14/20] drm/amdgpu: introduce amdgpu_sdma_set_vm_pte_scheds Pierre-Eric Pelloux-Prayer
2025-11-17  9:30   ` Christian König
2025-11-13 16:05 ` [PATCH v2 15/20] drm/amdgpu: pass all the sdma scheds to amdgpu_mman Pierre-Eric Pelloux-Prayer
2025-11-14 21:23   ` Felix Kuehling
2025-11-17  9:46   ` Christian König
2025-11-19  9:34     ` Pierre-Eric Pelloux-Prayer
2025-11-19 10:49       ` Christian König
2025-11-13 16:05 ` [PATCH v2 16/20] drm/amdgpu: give ttm entities access to all the sdma scheds Pierre-Eric Pelloux-Prayer
2025-11-17  9:54   ` Christian König
2025-11-13 16:05 ` [PATCH v2 17/20] drm/amdgpu: get rid of amdgpu_ttm_clear_buffer Pierre-Eric Pelloux-Prayer
2025-11-13 16:05 ` [PATCH v2 18/20] drm/amdgpu: rename amdgpu_fill_buffer as amdgpu_ttm_clear_buffer Pierre-Eric Pelloux-Prayer
2025-11-17  9:56   ` Christian König
2025-11-13 16:06 ` [PATCH v2 19/20] drm/amdgpu: use larger gart window when possible Pierre-Eric Pelloux-Prayer
2025-11-13 16:06 ` [PATCH v2 20/20] drm/amdgpu: double AMDGPU_GTT_MAX_TRANSFER_SIZE Pierre-Eric Pelloux-Prayer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=63e91c77-e68f-4e8f-8218-18e37bd4151f@amd.com \
    --to=felix.kuehling@amd.com \
    --cc=airlied@gmail.com \
    --cc=alexander.deucher@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=christian.koenig@amd.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pierre-eric.pelloux-prayer@amd.com \
    --cc=simona@ffwll.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.