All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] drm/radeon: move ring syncing after bo validation
@ 2012-02-23 14:18 Christian König
  2012-02-23 14:18 ` [PATCH 2/4] drm/radeon/kms: no need to align IB like this Christian König
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Christian König @ 2012-02-23 14:18 UTC (permalink / raw)
  To: dri-devel; +Cc: Christian König

The function radeon_bo_list_validate can cause a
bo to move, resulting in a different sync_obj
and a dependency to wait for this move to finish.

Signed-off-by: Christian König <deathsimple@vodafone.de>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/radeon/radeon.h    |    1 -
 drivers/gpu/drm/radeon/radeon_cs.c |   21 ++++++++++++++-------
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 884e0d4..4c1b981 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -836,7 +836,6 @@ struct radeon_cs_parser {
 	struct radeon_cs_reloc	*relocs;
 	struct radeon_cs_reloc	**relocs_ptr;
 	struct list_head	validated;
-	bool			sync_to_ring[RADEON_NUM_RINGS];
 	/* indices of various chunks */
 	int			chunk_ib_idx;
 	int			chunk_relocs_idx;
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
index 435a3d9..7fd0987 100644
--- a/drivers/gpu/drm/radeon/radeon_cs.c
+++ b/drivers/gpu/drm/radeon/radeon_cs.c
@@ -85,12 +85,6 @@ int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
 			radeon_bo_list_add_object(&p->relocs[i].lobj,
 						  &p->validated);
 
-			if (p->relocs[i].robj->tbo.sync_obj && !(r->flags & RADEON_RELOC_DONT_SYNC)) {
-				struct radeon_fence *fence = p->relocs[i].robj->tbo.sync_obj;
-				if (!radeon_fence_signaled(fence)) {
-					p->sync_to_ring[fence->ring] = true;
-				}
-			}
 		} else
 			p->relocs[i].handle = 0;
 	}
@@ -118,11 +112,24 @@ static int radeon_cs_get_ring(struct radeon_cs_parser *p, u32 ring, s32 priority
 
 static int radeon_cs_sync_rings(struct radeon_cs_parser *p)
 {
+	bool sync_to_ring[RADEON_NUM_RINGS] = { };
 	int i, r;
 
+	for (i = 0; i < p->nrelocs; i++) {
+		if (!p->relocs[i].robj || !p->relocs[i].robj->tbo.sync_obj)
+			continue;
+
+		if (!(p->relocs[i].flags & RADEON_RELOC_DONT_SYNC)) {
+			struct radeon_fence *fence = p->relocs[i].robj->tbo.sync_obj;
+			if (!radeon_fence_signaled(fence)) {
+				sync_to_ring[fence->ring] = true;
+			}
+		}
+	}
+
 	for (i = 0; i < RADEON_NUM_RINGS; ++i) {
 		/* no need to sync to our own or unused rings */
-		if (i == p->ring || !p->sync_to_ring[i] || !p->rdev->ring[i].ready)
+		if (i == p->ring || !sync_to_ring[i] || !p->rdev->ring[i].ready)
 			continue;
 
 		if (!p->ib->fence->semaphore) {
-- 
1.7.5.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/4] drm/radeon/kms: no need to align IB like this
  2012-02-23 14:18 [PATCH 1/4] drm/radeon: move ring syncing after bo validation Christian König
@ 2012-02-23 14:18 ` Christian König
  2012-02-23 17:00   ` Jerome Glisse
  2012-02-23 14:18 ` [PATCH 3/4] drm/radeon: also make the cs_parse function per ring Christian König
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Christian König @ 2012-02-23 14:18 UTC (permalink / raw)
  To: dri-devel; +Cc: Christian König

So don't confuse devs by doing so.

Signed-off-by: Christian König <deathsimple@vodafone.de>
---
 drivers/gpu/drm/radeon/r600.c |   15 +--------------
 1 files changed, 1 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 4f08e5e..4a4ac8f 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2719,20 +2719,7 @@ int r600_ib_test(struct radeon_device *rdev, int ring)
 	ib->ptr[0] = PACKET3(PACKET3_SET_CONFIG_REG, 1);
 	ib->ptr[1] = ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
 	ib->ptr[2] = 0xDEADBEEF;
-	ib->ptr[3] = PACKET2(0);
-	ib->ptr[4] = PACKET2(0);
-	ib->ptr[5] = PACKET2(0);
-	ib->ptr[6] = PACKET2(0);
-	ib->ptr[7] = PACKET2(0);
-	ib->ptr[8] = PACKET2(0);
-	ib->ptr[9] = PACKET2(0);
-	ib->ptr[10] = PACKET2(0);
-	ib->ptr[11] = PACKET2(0);
-	ib->ptr[12] = PACKET2(0);
-	ib->ptr[13] = PACKET2(0);
-	ib->ptr[14] = PACKET2(0);
-	ib->ptr[15] = PACKET2(0);
-	ib->length_dw = 16;
+	ib->length_dw = 3;
 	r = radeon_ib_schedule(rdev, ib);
 	if (r) {
 		radeon_scratch_free(rdev, scratch);
-- 
1.7.5.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/4] drm/radeon: also make the cs_parse function per ring
  2012-02-23 14:18 [PATCH 1/4] drm/radeon: move ring syncing after bo validation Christian König
  2012-02-23 14:18 ` [PATCH 2/4] drm/radeon/kms: no need to align IB like this Christian König
@ 2012-02-23 14:18 ` Christian König
  2012-02-24 17:14   ` Jerome Glisse
  2012-02-23 14:18 ` [PATCH 4/4] drm/radeon: fix IB debugfs files for multiple cards Christian König
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Christian König @ 2012-02-23 14:18 UTC (permalink / raw)
  To: dri-devel; +Cc: Christian König

Not all rings use PM4, so the cs_parser also needs to be per ring.

Signed-off-by: Christian König <deathsimple@vodafone.de>
---
 drivers/gpu/drm/radeon/radeon.h      |    4 +-
 drivers/gpu/drm/radeon/radeon_asic.c |   38 +++++++++++++++++----------------
 drivers/gpu/drm/radeon/radeon_cs.c   |    2 +-
 3 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 4c1b981..ca98772 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -1147,13 +1147,13 @@ struct radeon_asic {
 		void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence);
 		void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp,
 				       struct radeon_semaphore *semaphore, bool emit_wait);
+		int (*cs_parse)(struct radeon_cs_parser *p);
 	} ring[RADEON_NUM_RINGS];
 
 	int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp);
 	int (*irq_set)(struct radeon_device *rdev);
 	int (*irq_process)(struct radeon_device *rdev);
 	u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc);
-	int (*cs_parse)(struct radeon_cs_parser *p);
 	int (*copy_blit)(struct radeon_device *rdev,
 			 uint64_t src_offset,
 			 uint64_t dst_offset,
@@ -1650,7 +1650,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
 #define radeon_fini(rdev) (rdev)->asic->fini((rdev))
 #define radeon_resume(rdev) (rdev)->asic->resume((rdev))
 #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev))
-#define radeon_cs_parse(p) rdev->asic->cs_parse((p))
+#define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)].cs_parse((p))
 #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
 #define radeon_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp))
 #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev))
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index 36a6192..636c68f 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -145,12 +145,12 @@ static struct radeon_asic r100_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r100_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r100_cs_parse,
 		}
 	},
 	.irq_set = &r100_irq_set,
 	.irq_process = &r100_irq_process,
 	.get_vblank_counter = &r100_get_vblank_counter,
-	.cs_parse = &r100_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = NULL,
 	.copy = &r100_copy_blit,
@@ -197,12 +197,12 @@ static struct radeon_asic r200_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r100_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r100_cs_parse,
 		}
 	},
 	.irq_set = &r100_irq_set,
 	.irq_process = &r100_irq_process,
 	.get_vblank_counter = &r100_get_vblank_counter,
-	.cs_parse = &r100_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r100_copy_blit,
@@ -248,12 +248,12 @@ static struct radeon_asic r300_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r300_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r300_cs_parse,
 		}
 	},
 	.irq_set = &r100_irq_set,
 	.irq_process = &r100_irq_process,
 	.get_vblank_counter = &r100_get_vblank_counter,
-	.cs_parse = &r300_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r100_copy_blit,
@@ -300,12 +300,12 @@ static struct radeon_asic r300_asic_pcie = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r300_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r300_cs_parse,
 		}
 	},
 	.irq_set = &r100_irq_set,
 	.irq_process = &r100_irq_process,
 	.get_vblank_counter = &r100_get_vblank_counter,
-	.cs_parse = &r300_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r100_copy_blit,
@@ -351,12 +351,12 @@ static struct radeon_asic r420_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r300_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r300_cs_parse,
 		}
 	},
 	.irq_set = &r100_irq_set,
 	.irq_process = &r100_irq_process,
 	.get_vblank_counter = &r100_get_vblank_counter,
-	.cs_parse = &r300_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r100_copy_blit,
@@ -403,12 +403,12 @@ static struct radeon_asic rs400_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r300_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r300_cs_parse,
 		}
 	},
 	.irq_set = &r100_irq_set,
 	.irq_process = &r100_irq_process,
 	.get_vblank_counter = &r100_get_vblank_counter,
-	.cs_parse = &r300_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r100_copy_blit,
@@ -455,12 +455,12 @@ static struct radeon_asic rs600_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r300_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r300_cs_parse,
 		}
 	},
 	.irq_set = &rs600_irq_set,
 	.irq_process = &rs600_irq_process,
 	.get_vblank_counter = &rs600_get_vblank_counter,
-	.cs_parse = &r300_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r100_copy_blit,
@@ -507,12 +507,12 @@ static struct radeon_asic rs690_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r300_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r300_cs_parse,
 		}
 	},
 	.irq_set = &rs600_irq_set,
 	.irq_process = &rs600_irq_process,
 	.get_vblank_counter = &rs600_get_vblank_counter,
-	.cs_parse = &r300_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r200_copy_dma,
@@ -559,12 +559,12 @@ static struct radeon_asic rv515_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r300_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r300_cs_parse,
 		}
 	},
 	.irq_set = &rs600_irq_set,
 	.irq_process = &rs600_irq_process,
 	.get_vblank_counter = &rs600_get_vblank_counter,
-	.cs_parse = &r300_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r100_copy_blit,
@@ -611,12 +611,12 @@ static struct radeon_asic r520_asic = {
 			.ib_execute = &r100_ring_ib_execute,
 			.emit_fence = &r300_fence_ring_emit,
 			.emit_semaphore = &r100_semaphore_ring_emit,
+			.cs_parse = &r300_cs_parse,
 		}
 	},
 	.irq_set = &rs600_irq_set,
 	.irq_process = &rs600_irq_process,
 	.get_vblank_counter = &rs600_get_vblank_counter,
-	.cs_parse = &r300_cs_parse,
 	.copy_blit = &r100_copy_blit,
 	.copy_dma = &r200_copy_dma,
 	.copy = &r100_copy_blit,
@@ -662,12 +662,12 @@ static struct radeon_asic r600_asic = {
 			.ib_execute = &r600_ring_ib_execute,
 			.emit_fence = &r600_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
+			.cs_parse = &r600_cs_parse,
 		}
 	},
 	.irq_set = &r600_irq_set,
 	.irq_process = &r600_irq_process,
 	.get_vblank_counter = &rs600_get_vblank_counter,
-	.cs_parse = &r600_cs_parse,
 	.copy_blit = &r600_copy_blit,
 	.copy_dma = NULL,
 	.copy = &r600_copy_blit,
@@ -713,12 +713,12 @@ static struct radeon_asic rs780_asic = {
 			.ib_execute = &r600_ring_ib_execute,
 			.emit_fence = &r600_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
+			.cs_parse = &r600_cs_parse,
 		}
 	},
 	.irq_set = &r600_irq_set,
 	.irq_process = &r600_irq_process,
 	.get_vblank_counter = &rs600_get_vblank_counter,
-	.cs_parse = &r600_cs_parse,
 	.copy_blit = &r600_copy_blit,
 	.copy_dma = NULL,
 	.copy = &r600_copy_blit,
@@ -764,12 +764,12 @@ static struct radeon_asic rv770_asic = {
 			.ib_execute = &r600_ring_ib_execute,
 			.emit_fence = &r600_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
+			.cs_parse = &r600_cs_parse,
 		}
 	},
 	.irq_set = &r600_irq_set,
 	.irq_process = &r600_irq_process,
 	.get_vblank_counter = &rs600_get_vblank_counter,
-	.cs_parse = &r600_cs_parse,
 	.copy_blit = &r600_copy_blit,
 	.copy_dma = NULL,
 	.copy = &r600_copy_blit,
@@ -815,12 +815,12 @@ static struct radeon_asic evergreen_asic = {
 			.ib_execute = &evergreen_ring_ib_execute,
 			.emit_fence = &r600_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
+			.cs_parse = &evergreen_cs_parse,
 		}
 	},
 	.irq_set = &evergreen_irq_set,
 	.irq_process = &evergreen_irq_process,
 	.get_vblank_counter = &evergreen_get_vblank_counter,
-	.cs_parse = &evergreen_cs_parse,
 	.copy_blit = &r600_copy_blit,
 	.copy_dma = NULL,
 	.copy = &r600_copy_blit,
@@ -866,12 +866,12 @@ static struct radeon_asic sumo_asic = {
 			.ib_execute = &evergreen_ring_ib_execute,
 			.emit_fence = &r600_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
-		}
+			.cs_parse = &evergreen_cs_parse,
+		},
 	},
 	.irq_set = &evergreen_irq_set,
 	.irq_process = &evergreen_irq_process,
 	.get_vblank_counter = &evergreen_get_vblank_counter,
-	.cs_parse = &evergreen_cs_parse,
 	.copy_blit = &r600_copy_blit,
 	.copy_dma = NULL,
 	.copy = &r600_copy_blit,
@@ -917,12 +917,12 @@ static struct radeon_asic btc_asic = {
 			.ib_execute = &evergreen_ring_ib_execute,
 			.emit_fence = &r600_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
+			.cs_parse = &evergreen_cs_parse,
 		}
 	},
 	.irq_set = &evergreen_irq_set,
 	.irq_process = &evergreen_irq_process,
 	.get_vblank_counter = &evergreen_get_vblank_counter,
-	.cs_parse = &evergreen_cs_parse,
 	.copy_blit = &r600_copy_blit,
 	.copy_dma = NULL,
 	.copy = &r600_copy_blit,
@@ -979,24 +979,26 @@ static struct radeon_asic cayman_asic = {
 			.ib_parse = &evergreen_ib_parse,
 			.emit_fence = &cayman_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
+			.cs_parse = &evergreen_cs_parse,
 		},
 		[CAYMAN_RING_TYPE_CP1_INDEX] = {
 			.ib_execute = &cayman_ring_ib_execute,
 			.ib_parse = &evergreen_ib_parse,
 			.emit_fence = &cayman_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
+			.cs_parse = &evergreen_cs_parse,
 		},
 		[CAYMAN_RING_TYPE_CP2_INDEX] = {
 			.ib_execute = &cayman_ring_ib_execute,
 			.ib_parse = &evergreen_ib_parse,
 			.emit_fence = &cayman_fence_ring_emit,
 			.emit_semaphore = &r600_semaphore_ring_emit,
+			.cs_parse = &evergreen_cs_parse,
 		}
 	},
 	.irq_set = &evergreen_irq_set,
 	.irq_process = &evergreen_irq_process,
 	.get_vblank_counter = &evergreen_get_vblank_counter,
-	.cs_parse = &evergreen_cs_parse,
 	.copy_blit = &r600_copy_blit,
 	.copy_dma = NULL,
 	.copy = &r600_copy_blit,
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
index 7fd0987..dc79d08 100644
--- a/drivers/gpu/drm/radeon/radeon_cs.c
+++ b/drivers/gpu/drm/radeon/radeon_cs.c
@@ -348,7 +348,7 @@ static int radeon_cs_ib_chunk(struct radeon_device *rdev,
 		return r;
 	}
 	parser->ib->length_dw = ib_chunk->length_dw;
-	r = radeon_cs_parse(parser);
+	r = radeon_cs_parse(rdev, parser->ring, parser);
 	if (r || parser->parser_error) {
 		DRM_ERROR("Invalid command stream !\n");
 		return r;
-- 
1.7.5.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/4] drm/radeon: fix IB debugfs files for multiple cards
  2012-02-23 14:18 [PATCH 1/4] drm/radeon: move ring syncing after bo validation Christian König
  2012-02-23 14:18 ` [PATCH 2/4] drm/radeon/kms: no need to align IB like this Christian König
  2012-02-23 14:18 ` [PATCH 3/4] drm/radeon: also make the cs_parse function per ring Christian König
@ 2012-02-23 14:18 ` Christian König
  2012-02-23 15:17 ` [PATCH 1/4] drm/radeon: move ring syncing after bo validation Alex Deucher
  2012-02-23 17:05 ` Mathias Fröhlich
  4 siblings, 0 replies; 12+ messages in thread
From: Christian König @ 2012-02-23 14:18 UTC (permalink / raw)
  To: dri-devel; +Cc: Christian König

Storing pointers to the IBs in a static var just
leads to giving the same content back for all
cards in the system.

Signed-off-by: Christian König <deathsimple@vodafone.de>
---
 drivers/gpu/drm/radeon/radeon_ring.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
index 30a4c50..32c83d8 100644
--- a/drivers/gpu/drm/radeon/radeon_ring.c
+++ b/drivers/gpu/drm/radeon/radeon_ring.c
@@ -478,7 +478,9 @@ static struct drm_info_list radeon_debugfs_ring_info_list[] = {
 static int radeon_debugfs_ib_info(struct seq_file *m, void *data)
 {
 	struct drm_info_node *node = (struct drm_info_node *) m->private;
-	struct radeon_ib *ib = node->info_ent->data;
+	struct drm_device *dev = node->minor->dev;
+	struct radeon_device *rdev = dev->dev_private;
+	struct radeon_ib *ib = &rdev->ib_pool.ibs[*((unsigned*)node->info_ent->data)];
 	unsigned i;
 
 	if (ib == NULL) {
@@ -495,6 +497,7 @@ static int radeon_debugfs_ib_info(struct seq_file *m, void *data)
 
 static struct drm_info_list radeon_debugfs_ib_list[RADEON_IB_POOL_SIZE];
 static char radeon_debugfs_ib_names[RADEON_IB_POOL_SIZE][32];
+static unsigned radeon_debugfs_ib_idx[RADEON_IB_POOL_SIZE];
 #endif
 
 int radeon_debugfs_ring_init(struct radeon_device *rdev)
@@ -514,10 +517,11 @@ int radeon_debugfs_ib_init(struct radeon_device *rdev)
 
 	for (i = 0; i < RADEON_IB_POOL_SIZE; i++) {
 		sprintf(radeon_debugfs_ib_names[i], "radeon_ib_%04u", i);
+		radeon_debugfs_ib_idx[i] = i;
 		radeon_debugfs_ib_list[i].name = radeon_debugfs_ib_names[i];
 		radeon_debugfs_ib_list[i].show = &radeon_debugfs_ib_info;
 		radeon_debugfs_ib_list[i].driver_features = 0;
-		radeon_debugfs_ib_list[i].data = &rdev->ib_pool.ibs[i];
+		radeon_debugfs_ib_list[i].data = &radeon_debugfs_ib_idx[i];
 	}
 	return radeon_debugfs_add_files(rdev, radeon_debugfs_ib_list,
 					RADEON_IB_POOL_SIZE);
-- 
1.7.5.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] drm/radeon: move ring syncing after bo validation
  2012-02-23 14:18 [PATCH 1/4] drm/radeon: move ring syncing after bo validation Christian König
                   ` (2 preceding siblings ...)
  2012-02-23 14:18 ` [PATCH 4/4] drm/radeon: fix IB debugfs files for multiple cards Christian König
@ 2012-02-23 15:17 ` Alex Deucher
  2012-02-24 17:15   ` Jerome Glisse
  2012-02-23 17:05 ` Mathias Fröhlich
  4 siblings, 1 reply; 12+ messages in thread
From: Alex Deucher @ 2012-02-23 15:17 UTC (permalink / raw)
  To: Christian König; +Cc: dri-devel

2012/2/23 Christian König <deathsimple@vodafone.de>:
> The function radeon_bo_list_validate can cause a
> bo to move, resulting in a different sync_obj
> and a dependency to wait for this move to finish.
>
> Signed-off-by: Christian König <deathsimple@vodafone.de>
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

For the series:

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/radeon/radeon.h    |    1 -
>  drivers/gpu/drm/radeon/radeon_cs.c |   21 ++++++++++++++-------
>  2 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 884e0d4..4c1b981 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -836,7 +836,6 @@ struct radeon_cs_parser {
>        struct radeon_cs_reloc  *relocs;
>        struct radeon_cs_reloc  **relocs_ptr;
>        struct list_head        validated;
> -       bool                    sync_to_ring[RADEON_NUM_RINGS];
>        /* indices of various chunks */
>        int                     chunk_ib_idx;
>        int                     chunk_relocs_idx;
> diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
> index 435a3d9..7fd0987 100644
> --- a/drivers/gpu/drm/radeon/radeon_cs.c
> +++ b/drivers/gpu/drm/radeon/radeon_cs.c
> @@ -85,12 +85,6 @@ int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
>                        radeon_bo_list_add_object(&p->relocs[i].lobj,
>                                                  &p->validated);
>
> -                       if (p->relocs[i].robj->tbo.sync_obj && !(r->flags & RADEON_RELOC_DONT_SYNC)) {
> -                               struct radeon_fence *fence = p->relocs[i].robj->tbo.sync_obj;
> -                               if (!radeon_fence_signaled(fence)) {
> -                                       p->sync_to_ring[fence->ring] = true;
> -                               }
> -                       }
>                } else
>                        p->relocs[i].handle = 0;
>        }
> @@ -118,11 +112,24 @@ static int radeon_cs_get_ring(struct radeon_cs_parser *p, u32 ring, s32 priority
>
>  static int radeon_cs_sync_rings(struct radeon_cs_parser *p)
>  {
> +       bool sync_to_ring[RADEON_NUM_RINGS] = { };
>        int i, r;
>
> +       for (i = 0; i < p->nrelocs; i++) {
> +               if (!p->relocs[i].robj || !p->relocs[i].robj->tbo.sync_obj)
> +                       continue;
> +
> +               if (!(p->relocs[i].flags & RADEON_RELOC_DONT_SYNC)) {
> +                       struct radeon_fence *fence = p->relocs[i].robj->tbo.sync_obj;
> +                       if (!radeon_fence_signaled(fence)) {
> +                               sync_to_ring[fence->ring] = true;
> +                       }
> +               }
> +       }
> +
>        for (i = 0; i < RADEON_NUM_RINGS; ++i) {
>                /* no need to sync to our own or unused rings */
> -               if (i == p->ring || !p->sync_to_ring[i] || !p->rdev->ring[i].ready)
> +               if (i == p->ring || !sync_to_ring[i] || !p->rdev->ring[i].ready)
>                        continue;
>
>                if (!p->ib->fence->semaphore) {
> --
> 1.7.5.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/4] drm/radeon/kms: no need to align IB like this
  2012-02-23 14:18 ` [PATCH 2/4] drm/radeon/kms: no need to align IB like this Christian König
@ 2012-02-23 17:00   ` Jerome Glisse
  2012-02-23 18:19     ` Christian König
  0 siblings, 1 reply; 12+ messages in thread
From: Jerome Glisse @ 2012-02-23 17:00 UTC (permalink / raw)
  To: Christian König; +Cc: dri-devel


[-- Attachment #1.1: Type: text/plain, Size: 1508 bytes --]

2012/2/23 Christian König <deathsimple@vodafone.de>

> So don't confuse devs by doing so.
>
> Signed-off-by: Christian König <deathsimple@vodafone.de>
> ---
>  drivers/gpu/drm/radeon/r600.c |   15 +--------------
>  1 files changed, 1 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
> index 4f08e5e..4a4ac8f 100644
> --- a/drivers/gpu/drm/radeon/r600.c
> +++ b/drivers/gpu/drm/radeon/r600.c
> @@ -2719,20 +2719,7 @@ int r600_ib_test(struct radeon_device *rdev, int
> ring)
>        ib->ptr[0] = PACKET3(PACKET3_SET_CONFIG_REG, 1);
>        ib->ptr[1] = ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
>        ib->ptr[2] = 0xDEADBEEF;
> -       ib->ptr[3] = PACKET2(0);
> -       ib->ptr[4] = PACKET2(0);
> -       ib->ptr[5] = PACKET2(0);
> -       ib->ptr[6] = PACKET2(0);
> -       ib->ptr[7] = PACKET2(0);
> -       ib->ptr[8] = PACKET2(0);
> -       ib->ptr[9] = PACKET2(0);
> -       ib->ptr[10] = PACKET2(0);
> -       ib->ptr[11] = PACKET2(0);
> -       ib->ptr[12] = PACKET2(0);
> -       ib->ptr[13] = PACKET2(0);
> -       ib->ptr[14] = PACKET2(0);
> -       ib->ptr[15] = PACKET2(0);
> -       ib->length_dw = 16;
> +       ib->length_dw = 3;
>        r = radeon_ib_schedule(rdev, ib);
>        if (r) {
>                radeon_scratch_free(rdev, scratch);
> --
> 1.7.5.4
>

You sure about that ? I remember this helped with GPU lockup and i also
seen fglrx aligning IB.

Cheers,
Jerome

[-- Attachment #1.2: Type: text/html, Size: 1987 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] drm/radeon: move ring syncing after bo validation
  2012-02-23 14:18 [PATCH 1/4] drm/radeon: move ring syncing after bo validation Christian König
                   ` (3 preceding siblings ...)
  2012-02-23 15:17 ` [PATCH 1/4] drm/radeon: move ring syncing after bo validation Alex Deucher
@ 2012-02-23 17:05 ` Mathias Fröhlich
  2012-02-23 17:32   ` Jerome Glisse
  4 siblings, 1 reply; 12+ messages in thread
From: Mathias Fröhlich @ 2012-02-23 17:05 UTC (permalink / raw)
  To: dri-devel, deathsimple


Christian,

On Thursday, February 23, 2012 15:18:42 Christian König wrote:
> The function radeon_bo_list_validate can cause a
> bo to move, resulting in a different sync_obj
> and a dependency to wait for this move to finish.
> 
> Signed-off-by: Christian König <deathsimple@vodafone.de>
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

I am not sure, but to me this looks like this could fix these kind of gpu 
lockups that I experience since some time every now and then.
The usual symptom is that I get the 

radeon 0000:01:00.0: GPU lockup CP stall for more than 10000msec
GPU lockup (waiting for 0x00682AC3 last fence id 0x00682AC2)
[...]

kernel message. Each time with the fence being off by one like in the example 
above.

If this change has the potential to fix this issue I think this particular 
patch should be considered for the current upstream kernel release.

Mathias

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] drm/radeon: move ring syncing after bo validation
  2012-02-23 17:05 ` Mathias Fröhlich
@ 2012-02-23 17:32   ` Jerome Glisse
  2012-02-23 18:27     ` Christian König
  0 siblings, 1 reply; 12+ messages in thread
From: Jerome Glisse @ 2012-02-23 17:32 UTC (permalink / raw)
  To: Mathias Fröhlich; +Cc: deathsimple, dri-devel


[-- Attachment #1.1: Type: text/plain, Size: 1163 bytes --]

2012/2/23 Mathias Fröhlich <Mathias.Froehlich@gmx.net>

>
> Christian,
>
> On Thursday, February 23, 2012 15:18:42 Christian König wrote:
> > The function radeon_bo_list_validate can cause a
> > bo to move, resulting in a different sync_obj
> > and a dependency to wait for this move to finish.
> >
> > Signed-off-by: Christian König <deathsimple@vodafone.de>
> > Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>
> I am not sure, but to me this looks like this could fix these kind of gpu
> lockups that I experience since some time every now and then.
> The usual symptom is that I get the
>
> radeon 0000:01:00.0: GPU lockup CP stall for more than 10000msec
> GPU lockup (waiting for 0x00682AC3 last fence id 0x00682AC2)
> [...]
>
> kernel message. Each time with the fence being off by one like in the
> example
> above.
>
> If this change has the potential to fix this issue I think this particular
> patch should be considered for the current upstream kernel release.
>
> Mathias
>

No this patch doesn't. This patch is all about getting proper sync btw
different rings.

Sorry for the deception.

Cheers,
Jerome

[-- Attachment #1.2: Type: text/html, Size: 1658 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/4] drm/radeon/kms: no need to align IB like this
  2012-02-23 17:00   ` Jerome Glisse
@ 2012-02-23 18:19     ` Christian König
  0 siblings, 0 replies; 12+ messages in thread
From: Christian König @ 2012-02-23 18:19 UTC (permalink / raw)
  To: Jerome Glisse; +Cc: dri-devel


[-- Attachment #1.1: Type: text/plain, Size: 2133 bytes --]

On 23.02.2012 18:00, Jerome Glisse wrote:
>
> 2012/2/23 Christian König <deathsimple@vodafone.de 
> <mailto:deathsimple@vodafone.de>>
>
>     So don't confuse devs by doing so.
>
>     Signed-off-by: Christian König <deathsimple@vodafone.de
>     <mailto:deathsimple@vodafone..de>>
>     ---
>      drivers/gpu/drm/radeon/r600.c |   15 +--------------
>      1 files changed, 1 insertions(+), 14 deletions(-)
>
>     diff --git a/drivers/gpu/drm/radeon/r600.c
>     b/drivers/gpu/drm/radeon/r600.c
>     index 4f08e5e..4a4ac8f 100644
>     --- a/drivers/gpu/drm/radeon/r600.c
>     +++ b/drivers/gpu/drm/radeon/r600.c
>     @@ -2719,20 +2719,7 @@ int r600_ib_test(struct radeon_device
>     *rdev, int ring)
>            ib->ptr[0] = PACKET3(PACKET3_SET_CONFIG_REG, 1);
>            ib->ptr[1] = ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
>            ib->ptr[2] = 0xDEADBEEF;
>     -       ib->ptr[3] = PACKET2(0);
>     -       ib->ptr[4] = PACKET2(0);
>     -       ib->ptr[5] = PACKET2(0);
>     -       ib->ptr[6] = PACKET2(0);
>     -       ib->ptr[7] = PACKET2(0);
>     -       ib->ptr[8] = PACKET2(0);
>     -       ib->ptr[9] = PACKET2(0);
>     -       ib->ptr[10] = PACKET2(0);
>     -       ib->ptr[11] = PACKET2(0);
>     -       ib->ptr[12] = PACKET2(0);
>     -       ib->ptr[13] = PACKET2(0);
>     -       ib->ptr[14] = PACKET2(0);
>     -       ib->ptr[15] = PACKET2(0);
>     -       ib->length_dw = 16;
>     +       ib->length_dw = 3;
>            r = radeon_ib_schedule(rdev, ib);
>            if (r) {
>                    radeon_scratch_free(rdev, scratch);
>     --
>     1.7.5.4
>
>
> You sure about that ? I remember this helped with GPU lockup and i 
> also seen fglrx aligning IB.
Yeah, pretty much. Well I searched for halve an hour for the 
corresponding IB alignment in mesa/the CS ioctl until I finally figured 
out that there isn't any.

So IBs submitted by usermode aren't aligned in any way.... So it really 
seems to work fine and I couldn't find any reason why we should align an 
IB for the GFX ring in our docs also.

Christian.

[-- Attachment #1.2: Type: text/html, Size: 3590 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] drm/radeon: move ring syncing after bo validation
  2012-02-23 17:32   ` Jerome Glisse
@ 2012-02-23 18:27     ` Christian König
  0 siblings, 0 replies; 12+ messages in thread
From: Christian König @ 2012-02-23 18:27 UTC (permalink / raw)
  To: Jerome Glisse; +Cc: dri-devel


[-- Attachment #1.1: Type: text/plain, Size: 1688 bytes --]

On 23.02.2012 18:32, Jerome Glisse wrote:
> 2012/2/23 Mathias Fröhlich <Mathias.Froehlich@gmx.net 
> <mailto:Mathias.Froehlich@gmx.net>>
>
>
>     Christian,
>
>     On Thursday, February 23, 2012 15:18:42 Christian König wrote:
>     > The function radeon_bo_list_validate can cause a
>     > bo to move, resulting in a different sync_obj
>     > and a dependency to wait for this move to finish.
>     >
>     > Signed-off-by: Christian König <deathsimple@vodafone.de
>     <mailto:deathsimple@vodafone.de>>
>     > Reviewed-by: Alex Deucher <alexander.deucher@amd.com
>     <mailto:alexander.deucher@amd.com>>
>
>     I am not sure, but to me this looks like this could fix these kind
>     of gpu
>     lockups that I experience since some time every now and then.
>     The usual symptom is that I get the
>
>     radeon 0000:01:00.0: GPU lockup CP stall for more than 10000msec
>     GPU lockup (waiting for 0x00682AC3 last fence id 0x00682AC2)
>     [...]
>
>     kernel message. Each time with the fence being off by one like in
>     the example
>     above.
>
>     If this change has the potential to fix this issue I think this
>     particular
>     patch should be considered for the current upstream kernel release.
>
>     Mathias
>
>
> No this patch doesn't. This patch is all about getting proper sync btw 
> different rings.
That's unfortunately true, since we wasn't able to release any code that 
makes direct use of the different rings (yet) it shouldn't really matter 
in practice. I Just wanted to have that fix upstream since it is an 
obvious bug.

Christian.
>
> Sorry for the deception.
>
> Cheers,
> Jerome


[-- Attachment #1.2: Type: text/html, Size: 2978 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/4] drm/radeon: also make the cs_parse function per ring
  2012-02-23 14:18 ` [PATCH 3/4] drm/radeon: also make the cs_parse function per ring Christian König
@ 2012-02-24 17:14   ` Jerome Glisse
  0 siblings, 0 replies; 12+ messages in thread
From: Jerome Glisse @ 2012-02-24 17:14 UTC (permalink / raw)
  To: Christian König; +Cc: dri-devel

On Thu, 2012-02-23 at 15:18 +0100, Christian König wrote:
> Not all rings use PM4, so the cs_parser also needs to be per ring.
> 
> Signed-off-by: Christian König <deathsimple@vodafone.de>

Reviewed-by: Jerome Glisse <jglisse@redhat.com>

> ---
>  drivers/gpu/drm/radeon/radeon.h      |    4 +-
>  drivers/gpu/drm/radeon/radeon_asic.c |   38 +++++++++++++++++----------------
>  drivers/gpu/drm/radeon/radeon_cs.c   |    2 +-
>  3 files changed, 23 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 4c1b981..ca98772 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -1147,13 +1147,13 @@ struct radeon_asic {
>  		void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence);
>  		void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp,
>  				       struct radeon_semaphore *semaphore, bool emit_wait);
> +		int (*cs_parse)(struct radeon_cs_parser *p);
>  	} ring[RADEON_NUM_RINGS];
>  
>  	int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp);
>  	int (*irq_set)(struct radeon_device *rdev);
>  	int (*irq_process)(struct radeon_device *rdev);
>  	u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc);
> -	int (*cs_parse)(struct radeon_cs_parser *p);
>  	int (*copy_blit)(struct radeon_device *rdev,
>  			 uint64_t src_offset,
>  			 uint64_t dst_offset,
> @@ -1650,7 +1650,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
>  #define radeon_fini(rdev) (rdev)->asic->fini((rdev))
>  #define radeon_resume(rdev) (rdev)->asic->resume((rdev))
>  #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev))
> -#define radeon_cs_parse(p) rdev->asic->cs_parse((p))
> +#define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)].cs_parse((p))
>  #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
>  #define radeon_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp))
>  #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev))
> diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
> index 36a6192..636c68f 100644
> --- a/drivers/gpu/drm/radeon/radeon_asic.c
> +++ b/drivers/gpu/drm/radeon/radeon_asic.c
> @@ -145,12 +145,12 @@ static struct radeon_asic r100_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r100_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r100_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r100_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r100_copy_blit,
> @@ -197,12 +197,12 @@ static struct radeon_asic r200_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r100_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r100_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r100_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -248,12 +248,12 @@ static struct radeon_asic r300_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -300,12 +300,12 @@ static struct radeon_asic r300_asic_pcie = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -351,12 +351,12 @@ static struct radeon_asic r420_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -403,12 +403,12 @@ static struct radeon_asic rs400_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &r100_irq_set,
>  	.irq_process = &r100_irq_process,
>  	.get_vblank_counter = &r100_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -455,12 +455,12 @@ static struct radeon_asic rs600_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &rs600_irq_set,
>  	.irq_process = &rs600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -507,12 +507,12 @@ static struct radeon_asic rs690_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &rs600_irq_set,
>  	.irq_process = &rs600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r200_copy_dma,
> @@ -559,12 +559,12 @@ static struct radeon_asic rv515_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &rs600_irq_set,
>  	.irq_process = &rs600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -611,12 +611,12 @@ static struct radeon_asic r520_asic = {
>  			.ib_execute = &r100_ring_ib_execute,
>  			.emit_fence = &r300_fence_ring_emit,
>  			.emit_semaphore = &r100_semaphore_ring_emit,
> +			.cs_parse = &r300_cs_parse,
>  		}
>  	},
>  	.irq_set = &rs600_irq_set,
>  	.irq_process = &rs600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r300_cs_parse,
>  	.copy_blit = &r100_copy_blit,
>  	.copy_dma = &r200_copy_dma,
>  	.copy = &r100_copy_blit,
> @@ -662,12 +662,12 @@ static struct radeon_asic r600_asic = {
>  			.ib_execute = &r600_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &r600_cs_parse,
>  		}
>  	},
>  	.irq_set = &r600_irq_set,
>  	.irq_process = &r600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r600_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -713,12 +713,12 @@ static struct radeon_asic rs780_asic = {
>  			.ib_execute = &r600_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &r600_cs_parse,
>  		}
>  	},
>  	.irq_set = &r600_irq_set,
>  	.irq_process = &r600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r600_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -764,12 +764,12 @@ static struct radeon_asic rv770_asic = {
>  			.ib_execute = &r600_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &r600_cs_parse,
>  		}
>  	},
>  	.irq_set = &r600_irq_set,
>  	.irq_process = &r600_irq_process,
>  	.get_vblank_counter = &rs600_get_vblank_counter,
> -	.cs_parse = &r600_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -815,12 +815,12 @@ static struct radeon_asic evergreen_asic = {
>  			.ib_execute = &evergreen_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		}
>  	},
>  	.irq_set = &evergreen_irq_set,
>  	.irq_process = &evergreen_irq_process,
>  	.get_vblank_counter = &evergreen_get_vblank_counter,
> -	.cs_parse = &evergreen_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -866,12 +866,12 @@ static struct radeon_asic sumo_asic = {
>  			.ib_execute = &evergreen_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> -		}
> +			.cs_parse = &evergreen_cs_parse,
> +		},
>  	},
>  	.irq_set = &evergreen_irq_set,
>  	.irq_process = &evergreen_irq_process,
>  	.get_vblank_counter = &evergreen_get_vblank_counter,
> -	.cs_parse = &evergreen_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -917,12 +917,12 @@ static struct radeon_asic btc_asic = {
>  			.ib_execute = &evergreen_ring_ib_execute,
>  			.emit_fence = &r600_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		}
>  	},
>  	.irq_set = &evergreen_irq_set,
>  	.irq_process = &evergreen_irq_process,
>  	.get_vblank_counter = &evergreen_get_vblank_counter,
> -	.cs_parse = &evergreen_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> @@ -979,24 +979,26 @@ static struct radeon_asic cayman_asic = {
>  			.ib_parse = &evergreen_ib_parse,
>  			.emit_fence = &cayman_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		},
>  		[CAYMAN_RING_TYPE_CP1_INDEX] = {
>  			.ib_execute = &cayman_ring_ib_execute,
>  			.ib_parse = &evergreen_ib_parse,
>  			.emit_fence = &cayman_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		},
>  		[CAYMAN_RING_TYPE_CP2_INDEX] = {
>  			.ib_execute = &cayman_ring_ib_execute,
>  			.ib_parse = &evergreen_ib_parse,
>  			.emit_fence = &cayman_fence_ring_emit,
>  			.emit_semaphore = &r600_semaphore_ring_emit,
> +			.cs_parse = &evergreen_cs_parse,
>  		}
>  	},
>  	.irq_set = &evergreen_irq_set,
>  	.irq_process = &evergreen_irq_process,
>  	.get_vblank_counter = &evergreen_get_vblank_counter,
> -	.cs_parse = &evergreen_cs_parse,
>  	.copy_blit = &r600_copy_blit,
>  	.copy_dma = NULL,
>  	.copy = &r600_copy_blit,
> diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
> index 7fd0987..dc79d08 100644
> --- a/drivers/gpu/drm/radeon/radeon_cs.c
> +++ b/drivers/gpu/drm/radeon/radeon_cs.c
> @@ -348,7 +348,7 @@ static int radeon_cs_ib_chunk(struct radeon_device *rdev,
>  		return r;
>  	}
>  	parser->ib->length_dw = ib_chunk->length_dw;
> -	r = radeon_cs_parse(parser);
> +	r = radeon_cs_parse(rdev, parser->ring, parser);
>  	if (r || parser->parser_error) {
>  		DRM_ERROR("Invalid command stream !\n");
>  		return r;


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] drm/radeon: move ring syncing after bo validation
  2012-02-23 15:17 ` [PATCH 1/4] drm/radeon: move ring syncing after bo validation Alex Deucher
@ 2012-02-24 17:15   ` Jerome Glisse
  0 siblings, 0 replies; 12+ messages in thread
From: Jerome Glisse @ 2012-02-24 17:15 UTC (permalink / raw)
  To: Alex Deucher; +Cc: Christian König, dri-devel

On Thu, 2012-02-23 at 10:17 -0500, Alex Deucher wrote:
> 2012/2/23 Christian König <deathsimple@vodafone.de>:
> > The function radeon_bo_list_validate can cause a
> > bo to move, resulting in a different sync_obj
> > and a dependency to wait for this move to finish.
> >
> > Signed-off-by: Christian König <deathsimple@vodafone.de>
> > Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> 
> For the series:
> 
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

Same
Reviewed-by: Jerome Glisse <jglisse@redhat.com>

> 
> > ---
> >  drivers/gpu/drm/radeon/radeon.h    |    1 -
> >  drivers/gpu/drm/radeon/radeon_cs.c |   21 ++++++++++++++-------
> >  2 files changed, 14 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> > index 884e0d4..4c1b981 100644
> > --- a/drivers/gpu/drm/radeon/radeon.h
> > +++ b/drivers/gpu/drm/radeon/radeon.h
> > @@ -836,7 +836,6 @@ struct radeon_cs_parser {
> >        struct radeon_cs_reloc  *relocs;
> >        struct radeon_cs_reloc  **relocs_ptr;
> >        struct list_head        validated;
> > -       bool                    sync_to_ring[RADEON_NUM_RINGS];
> >        /* indices of various chunks */
> >        int                     chunk_ib_idx;
> >        int                     chunk_relocs_idx;
> > diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
> > index 435a3d9..7fd0987 100644
> > --- a/drivers/gpu/drm/radeon/radeon_cs.c
> > +++ b/drivers/gpu/drm/radeon/radeon_cs.c
> > @@ -85,12 +85,6 @@ int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
> >                        radeon_bo_list_add_object(&p->relocs[i].lobj,
> >                                                  &p->validated);
> >
> > -                       if (p->relocs[i].robj->tbo.sync_obj && !(r->flags & RADEON_RELOC_DONT_SYNC)) {
> > -                               struct radeon_fence *fence = p->relocs[i].robj->tbo.sync_obj;
> > -                               if (!radeon_fence_signaled(fence)) {
> > -                                       p->sync_to_ring[fence->ring] = true;
> > -                               }
> > -                       }
> >                } else
> >                        p->relocs[i].handle = 0;
> >        }
> > @@ -118,11 +112,24 @@ static int radeon_cs_get_ring(struct radeon_cs_parser *p, u32 ring, s32 priority
> >
> >  static int radeon_cs_sync_rings(struct radeon_cs_parser *p)
> >  {
> > +       bool sync_to_ring[RADEON_NUM_RINGS] = { };
> >        int i, r;
> >
> > +       for (i = 0; i < p->nrelocs; i++) {
> > +               if (!p->relocs[i].robj || !p->relocs[i].robj->tbo.sync_obj)
> > +                       continue;
> > +
> > +               if (!(p->relocs[i].flags & RADEON_RELOC_DONT_SYNC)) {
> > +                       struct radeon_fence *fence = p->relocs[i].robj->tbo.sync_obj;
> > +                       if (!radeon_fence_signaled(fence)) {
> > +                               sync_to_ring[fence->ring] = true;
> > +                       }
> > +               }
> > +       }
> > +
> >        for (i = 0; i < RADEON_NUM_RINGS; ++i) {
> >                /* no need to sync to our own or unused rings */
> > -               if (i == p->ring || !p->sync_to_ring[i] || !p->rdev->ring[i].ready)
> > +               if (i == p->ring || !sync_to_ring[i] || !p->rdev->ring[i].ready)
> >                        continue;
> >
> >                if (!p->ib->fence->semaphore) {
> > --
> > 1.7.5.4
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-02-24 17:15 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-23 14:18 [PATCH 1/4] drm/radeon: move ring syncing after bo validation Christian König
2012-02-23 14:18 ` [PATCH 2/4] drm/radeon/kms: no need to align IB like this Christian König
2012-02-23 17:00   ` Jerome Glisse
2012-02-23 18:19     ` Christian König
2012-02-23 14:18 ` [PATCH 3/4] drm/radeon: also make the cs_parse function per ring Christian König
2012-02-24 17:14   ` Jerome Glisse
2012-02-23 14:18 ` [PATCH 4/4] drm/radeon: fix IB debugfs files for multiple cards Christian König
2012-02-23 15:17 ` [PATCH 1/4] drm/radeon: move ring syncing after bo validation Alex Deucher
2012-02-24 17:15   ` Jerome Glisse
2012-02-23 17:05 ` Mathias Fröhlich
2012-02-23 17:32   ` Jerome Glisse
2012-02-23 18:27     ` Christian König

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.