[PATCH 1/3] drm/radeon: Disable dma rings for bo moves on r6xx
Ilija Hadzic
ihadzic at research.bell-labs.com
Thu Jul 11 12:59:36 PDT 2013
Alex,
Can you please share some details about the nature or symptom of the
"instability". One problem that I have been seeing on my end is that when
I use the DMA ring intensively (by intensively I mean, calling the copy
function every frame), combined with some 3D rendering that causes a lot
of cs_ioctl calls, that I can provoke a corruption of the olist field in
radeon_sa_bo structure, consequently causing an oops in
radeon_sa_bo_try_free(). I have also found that I can suppress the problem
if I add some padding fields at the beginnig of the radeon_sa_bo structure
(essentially moving the olist field down).
So I speculate that the use of DMA somehow results in corrupting that
structure, but I have not yet done enough experiments to prove or disprove
that theory (so I have not spoke up yet). Also my kernel is full of my own
internal hacks, and I have not yet taken the time to reproduce the problem
with the "stock" kernel. However, after seeing your patch series, I am
wondering if the instability you are referring to may be of the same
or similar nature.
thanks,
Ilija
On Thu, 11 Jul 2013, alexdeucher at gmail.com wrote:
> From: Alex Deucher <alexander.deucher at amd.com>
>
> They still seem to cause instability on some r6xx parts.
> As a follow up, we can switch to using CP DMA for bo
> moves on r6xx as a lighter weight alternative to using
> the 3D engine.
>
> A version of this patch should also go to stable kernels.
>
> Tested-by: J.N. <golden.fleeced at gmail.com>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/radeon/radeon_asic.c | 12 ++++++------
> 1 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
> index 0970774..ea5c52b 100644
> --- a/drivers/gpu/drm/radeon/radeon_asic.c
> +++ b/drivers/gpu/drm/radeon/radeon_asic.c
> @@ -1026,8 +1026,8 @@ static struct radeon_asic r600_asic = {
> .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
> .dma = &r600_copy_dma,
> .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
> - .copy = &r600_copy_dma,
> - .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
> + .copy = &r600_copy_blit,
> + .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
> },
> .surface = {
> .set_reg = r600_set_surface_reg,
> @@ -1119,8 +1119,8 @@ static struct radeon_asic rv6xx_asic = {
> .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
> .dma = &r600_copy_dma,
> .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
> - .copy = &r600_copy_dma,
> - .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
> + .copy = &r600_copy_blit,
> + .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
> },
> .surface = {
> .set_reg = r600_set_surface_reg,
> @@ -1229,8 +1229,8 @@ static struct radeon_asic rs780_asic = {
> .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
> .dma = &r600_copy_dma,
> .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
> - .copy = &r600_copy_dma,
> - .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
> + .copy = &r600_copy_blit,
> + .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
> },
> .surface = {
> .set_reg = r600_set_surface_reg,
> --
> 1.7.7.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
More information about the dri-devel
mailing list