Re: [PATCH] drm/amdgpu: individualize fence allocation per entity

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 21.01.20 um 14:05 schrieb Nirmoy Das:
Allocate fences for each entity and remove ctx->fences reference as
fences should be bound to amdgpu_ctx_entity instead amdgpu_ctx.

Signed-off-by: Nirmoy Das <nirmoy.das@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 43 +++++++++++++++----------
  drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h |  1 -
  2 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index 64e2babbc36e..a9b611fd6242 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -87,24 +87,24 @@ static int amdgpu_ctx_init(struct amdgpu_device *adev,
  	memset(ctx, 0, sizeof(*ctx));
  	ctx->adev = adev;
- ctx->fences = kcalloc(amdgpu_sched_jobs * num_entities,
-			      sizeof(struct dma_fence*), GFP_KERNEL);
-	if (!ctx->fences)
-		return -ENOMEM;
ctx->entities[0] = kcalloc(num_entities,
  				   sizeof(struct amdgpu_ctx_entity),
  				   GFP_KERNEL);
-	if (!ctx->entities[0]) {
-		r = -ENOMEM;
-		goto error_free_fences;
-	}
+	if (!ctx->entities[0])
+		return -ENOMEM;
+
for (i = 0; i < num_entities; ++i) {
  		struct amdgpu_ctx_entity *entity = &ctx->entities[0][i];
entity->sequence = 1;
-		entity->fences = &ctx->fences[amdgpu_sched_jobs * i];
+		entity->fences = kcalloc(amdgpu_sched_jobs,
+					 sizeof(struct dma_fence*), GFP_KERNEL);
+		if (!entity->fences) {
+			r = -ENOMEM;
+			goto error_cleanup_memory;
+		}
  	}
  	for (i = 1; i < AMDGPU_HW_IP_NUM; ++i)
  		ctx->entities[i] = ctx->entities[i - 1] +
@@ -181,11 +181,16 @@ static int amdgpu_ctx_init(struct amdgpu_device *adev,
  error_cleanup_entities:
  	for (i = 0; i < num_entities; ++i)
  		drm_sched_entity_destroy(&ctx->entities[0][i].entity);
-	kfree(ctx->entities[0]);
-error_free_fences:
-	kfree(ctx->fences);
-	ctx->fences = NULL;
+error_cleanup_memory:
+	for (i = 0; i < num_entities; ++i) {
+		struct amdgpu_ctx_entity *entity = &ctx->entities[0][i];
+		kfree(entity->fences);
+		entity->fences = NULL;

Empty line between declaration and code please.

Apart from that the patch is Reviewed-by: Christian König <christian.koenig@xxxxxxx>

+	}
+
+	kfree(ctx->entities[0]);
+	ctx->entities[0] = NULL;
  	return r;
  }
@@ -199,12 +204,16 @@ static void amdgpu_ctx_fini(struct kref *ref)
  	if (!adev)
  		return;
- for (i = 0; i < num_entities; ++i)
+	for (i = 0; i < num_entities; ++i) {
+		struct amdgpu_ctx_entity *entity = &ctx->entities[0][i];
+
  		for (j = 0; j < amdgpu_sched_jobs; ++j)
-			dma_fence_put(ctx->entities[0][i].fences[j]);
-	kfree(ctx->fences);
-	kfree(ctx->entities[0]);
+			dma_fence_put(entity->fences[j]);
+
+		kfree(entity->fences);
+	}
+ kfree(ctx->entities[0]);
  	mutex_destroy(&ctx->lock);
kfree(ctx);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
index 4ad90a44dc3c..a6cd9d4b078c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
@@ -42,7 +42,6 @@ struct amdgpu_ctx {
  	unsigned			reset_counter_query;
  	uint32_t			vram_lost_counter;
  	spinlock_t			ring_lock;
-	struct dma_fence		**fences;
  	struct amdgpu_ctx_entity	*entities[AMDGPU_HW_IP_NUM];
  	bool				preamble_presented;
  	enum drm_sched_priority		init_priority;

_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux