All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Properly suspend/resume sub-allocator
@ 2013-03-11 21:06 alexdeucher
  2013-03-11 21:06 ` [PATCH 1/2] drm/radeon: fix S/R on VM systems (cayman/TN/SI) alexdeucher
  2013-03-11 21:06 ` [PATCH 2/2] drm/radeon: tear down the IB pool on suspend alexdeucher
  0 siblings, 2 replies; 5+ messages in thread
From: alexdeucher @ 2013-03-11 21:06 UTC (permalink / raw)
  To: dri-devel; +Cc: Alex Deucher

From: Alex Deucher <alexander.deucher@amd.com>

This patch set is a bit of a heavy hammer, but I'm
not sure it's worth the effort to create separate
suspend functions for all sub-allocator
users that basically just calls radeon_sa_bo_manager_suspend()
and fix up all the sub allocator init functions to
call radeon_sa_bo_manager_start() since all we are really
avoiding is the allocation of sub-allocator bo.  Additionally
in the VM case, we have to tear down all the VMs on suspend
since the physical addresses of various buffers may have changed
on resume.

The first patch fixes suspend and resume on cards with VM in use.

The second patches doesn't fix any bugs that I know of, but
the current code seems wrong to me unless I'm missing something.

Alex Deucher (2):
  drm/radeon: fix S/R on VM systems (cayman/TN/SI)
  drm/radeon: tear down the IB pool on suspend

 drivers/gpu/drm/radeon/evergreen.c |    1 +
 drivers/gpu/drm/radeon/ni.c        |    2 ++
 drivers/gpu/drm/radeon/r100.c      |    1 +
 drivers/gpu/drm/radeon/r300.c      |    1 +
 drivers/gpu/drm/radeon/r420.c      |    1 +
 drivers/gpu/drm/radeon/r600.c      |    1 +
 drivers/gpu/drm/radeon/rs400.c     |    1 +
 drivers/gpu/drm/radeon/rs600.c     |    1 +
 drivers/gpu/drm/radeon/rs690.c     |    1 +
 drivers/gpu/drm/radeon/rv515.c     |    1 +
 drivers/gpu/drm/radeon/rv770.c     |    1 +
 drivers/gpu/drm/radeon/si.c        |    2 ++
 12 files changed, 14 insertions(+), 0 deletions(-)

-- 
1.7.7.5

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

* [PATCH 1/2] drm/radeon: fix S/R on VM systems (cayman/TN/SI)
  2013-03-11 21:06 [PATCH 0/2] Properly suspend/resume sub-allocator alexdeucher
@ 2013-03-11 21:06 ` alexdeucher
  2013-03-12  8:59   ` Christian König
  2013-03-11 21:06 ` [PATCH 2/2] drm/radeon: tear down the IB pool on suspend alexdeucher
  1 sibling, 1 reply; 5+ messages in thread
From: alexdeucher @ 2013-03-11 21:06 UTC (permalink / raw)
  To: dri-devel; +Cc: Alex Deucher, stable

From: Alex Deucher <alexander.deucher@amd.com>

We weren't properly tearing down the VM sub-alloctor
on suspend leading to bogus VM PTs on resume.

Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=60439

Tested-by: Dmitry Cherkasov <Dmitrii.Cherkasov@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/radeon/ni.c |    1 +
 drivers/gpu/drm/radeon/si.c |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 3d81ca7..e6f3989 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1780,6 +1780,7 @@ int cayman_resume(struct radeon_device *rdev)
 int cayman_suspend(struct radeon_device *rdev)
 {
 	r600_audio_fini(rdev);
+	radeon_vm_manager_fini(rdev);
 	cayman_cp_enable(rdev, false);
 	cayman_dma_stop(rdev);
 	evergreen_irq_suspend(rdev);
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 9128120..bafbe32 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -4469,6 +4469,7 @@ int si_resume(struct radeon_device *rdev)
 
 int si_suspend(struct radeon_device *rdev)
 {
+	radeon_vm_manager_fini(rdev);
 	si_cp_enable(rdev, false);
 	cayman_dma_stop(rdev);
 	si_irq_suspend(rdev);
-- 
1.7.7.5

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

* [PATCH 2/2] drm/radeon: tear down the IB pool on suspend
  2013-03-11 21:06 [PATCH 0/2] Properly suspend/resume sub-allocator alexdeucher
  2013-03-11 21:06 ` [PATCH 1/2] drm/radeon: fix S/R on VM systems (cayman/TN/SI) alexdeucher
@ 2013-03-11 21:06 ` alexdeucher
  2013-03-12  8:52   ` Christian König
  1 sibling, 1 reply; 5+ messages in thread
From: alexdeucher @ 2013-03-11 21:06 UTC (permalink / raw)
  To: dri-devel; +Cc: Alex Deucher, stable

From: Alex Deucher <alexander.deucher@amd.com>

Otherwise we may end up with stale MC addresses
after resume.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/radeon/evergreen.c |    1 +
 drivers/gpu/drm/radeon/ni.c        |    1 +
 drivers/gpu/drm/radeon/r100.c      |    1 +
 drivers/gpu/drm/radeon/r300.c      |    1 +
 drivers/gpu/drm/radeon/r420.c      |    1 +
 drivers/gpu/drm/radeon/r600.c      |    1 +
 drivers/gpu/drm/radeon/rs400.c     |    1 +
 drivers/gpu/drm/radeon/rs600.c     |    1 +
 drivers/gpu/drm/radeon/rs690.c     |    1 +
 drivers/gpu/drm/radeon/rv515.c     |    1 +
 drivers/gpu/drm/radeon/rv770.c     |    1 +
 drivers/gpu/drm/radeon/si.c        |    1 +
 12 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index 305a657..f0e64a4 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -3720,6 +3720,7 @@ int evergreen_suspend(struct radeon_device *rdev)
 	r600_dma_stop(rdev);
 	evergreen_irq_suspend(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	evergreen_pcie_gart_disable(rdev);
 
 	return 0;
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index e6f3989..367b7a1 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1785,6 +1785,7 @@ int cayman_suspend(struct radeon_device *rdev)
 	cayman_dma_stop(rdev);
 	evergreen_irq_suspend(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	cayman_pcie_gart_disable(rdev);
 	return 0;
 }
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index 9db5853..691dc93 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -3892,6 +3892,7 @@ int r100_suspend(struct radeon_device *rdev)
 {
 	r100_cp_disable(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	r100_irq_disable(rdev);
 	if (rdev->flags & RADEON_IS_PCI)
 		r100_pci_gart_disable(rdev);
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index c60350e..28ff068 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -1436,6 +1436,7 @@ int r300_suspend(struct radeon_device *rdev)
 {
 	r100_cp_disable(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	r100_irq_disable(rdev);
 	if (rdev->flags & RADEON_IS_PCIE)
 		rv370_pcie_gart_disable(rdev);
diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
index 6fce2eb..6edecc8 100644
--- a/drivers/gpu/drm/radeon/r420.c
+++ b/drivers/gpu/drm/radeon/r420.c
@@ -325,6 +325,7 @@ int r420_suspend(struct radeon_device *rdev)
 	r420_cp_errata_fini(rdev);
 	r100_cp_disable(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	r100_irq_disable(rdev);
 	if (rdev->flags & RADEON_IS_PCIE)
 		rv370_pcie_gart_disable(rdev);
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 0740db3..6166c7e 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -3031,6 +3031,7 @@ int r600_suspend(struct radeon_device *rdev)
 	r600_dma_stop(rdev);
 	r600_irq_suspend(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	r600_pcie_gart_disable(rdev);
 
 	return 0;
diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
index 73051ce..5eaf41f 100644
--- a/drivers/gpu/drm/radeon/rs400.c
+++ b/drivers/gpu/drm/radeon/rs400.c
@@ -470,6 +470,7 @@ int rs400_suspend(struct radeon_device *rdev)
 {
 	r100_cp_disable(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	r100_irq_disable(rdev);
 	rs400_gart_disable(rdev);
 	return 0;
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index 5a0fc74..8f70d78 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -945,6 +945,7 @@ int rs600_suspend(struct radeon_device *rdev)
 	r600_audio_fini(rdev);
 	r100_cp_disable(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	rs600_irq_disable(rdev);
 	rs600_gart_disable(rdev);
 	return 0;
diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
index 5706d2a..a9e7890 100644
--- a/drivers/gpu/drm/radeon/rs690.c
+++ b/drivers/gpu/drm/radeon/rs690.c
@@ -686,6 +686,7 @@ int rs690_suspend(struct radeon_device *rdev)
 	r600_audio_fini(rdev);
 	r100_cp_disable(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	rs600_irq_disable(rdev);
 	rs400_gart_disable(rdev);
 	return 0;
diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
index 435ed35..73ce8a3 100644
--- a/drivers/gpu/drm/radeon/rv515.c
+++ b/drivers/gpu/drm/radeon/rv515.c
@@ -530,6 +530,7 @@ int rv515_suspend(struct radeon_device *rdev)
 {
 	r100_cp_disable(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	rs600_irq_disable(rdev);
 	if (rdev->flags & RADEON_IS_PCIE)
 		rv370_pcie_gart_disable(rdev);
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index d63fe1d..021a056 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -1119,6 +1119,7 @@ int rv770_suspend(struct radeon_device *rdev)
 	r600_dma_stop(rdev);
 	r600_irq_suspend(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	rv770_pcie_gart_disable(rdev);
 
 	return 0;
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index bafbe32..23f4ab99 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -4474,6 +4474,7 @@ int si_suspend(struct radeon_device *rdev)
 	cayman_dma_stop(rdev);
 	si_irq_suspend(rdev);
 	radeon_wb_disable(rdev);
+	radeon_ib_pool_fini(rdev);
 	si_pcie_gart_disable(rdev);
 	return 0;
 }
-- 
1.7.7.5

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

* Re: [PATCH 2/2] drm/radeon: tear down the IB pool on suspend
  2013-03-11 21:06 ` [PATCH 2/2] drm/radeon: tear down the IB pool on suspend alexdeucher
@ 2013-03-12  8:52   ` Christian König
  0 siblings, 0 replies; 5+ messages in thread
From: Christian König @ 2013-03-12  8:52 UTC (permalink / raw)
  To: alexdeucher; +Cc: Alex Deucher, stable, dri-devel

NAK! I removed this on purpose some time ago, the IB pool is in GART 
memory, which essential is system memory.

So we don't need to unlock/unpin the IB pool on suspend.

Ontop of this it is quite dangerous to do so in a case of a GPU reset, 
cause then there still might be IBs in the fly and if you call 
radeon_ib_fini all of the addresses stitched together so far become 
invalid because of the unlock/unpin/free of the sa bo.

Christian.

Am 11.03.2013 22:06, schrieb alexdeucher@gmail.com:
> From: Alex Deucher <alexander.deucher@amd.com>
>
> Otherwise we may end up with stale MC addresses
> after resume.
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: stable@vger.kernel.org
> ---
>   drivers/gpu/drm/radeon/evergreen.c |    1 +
>   drivers/gpu/drm/radeon/ni.c        |    1 +
>   drivers/gpu/drm/radeon/r100.c      |    1 +
>   drivers/gpu/drm/radeon/r300.c      |    1 +
>   drivers/gpu/drm/radeon/r420.c      |    1 +
>   drivers/gpu/drm/radeon/r600.c      |    1 +
>   drivers/gpu/drm/radeon/rs400.c     |    1 +
>   drivers/gpu/drm/radeon/rs600.c     |    1 +
>   drivers/gpu/drm/radeon/rs690.c     |    1 +
>   drivers/gpu/drm/radeon/rv515.c     |    1 +
>   drivers/gpu/drm/radeon/rv770.c     |    1 +
>   drivers/gpu/drm/radeon/si.c        |    1 +
>   12 files changed, 12 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
> index 305a657..f0e64a4 100644
> --- a/drivers/gpu/drm/radeon/evergreen.c
> +++ b/drivers/gpu/drm/radeon/evergreen.c
> @@ -3720,6 +3720,7 @@ int evergreen_suspend(struct radeon_device *rdev)
>   	r600_dma_stop(rdev);
>   	evergreen_irq_suspend(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	evergreen_pcie_gart_disable(rdev);
>   
>   	return 0;
> diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
> index e6f3989..367b7a1 100644
> --- a/drivers/gpu/drm/radeon/ni.c
> +++ b/drivers/gpu/drm/radeon/ni.c
> @@ -1785,6 +1785,7 @@ int cayman_suspend(struct radeon_device *rdev)
>   	cayman_dma_stop(rdev);
>   	evergreen_irq_suspend(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	cayman_pcie_gart_disable(rdev);
>   	return 0;
>   }
> diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
> index 9db5853..691dc93 100644
> --- a/drivers/gpu/drm/radeon/r100.c
> +++ b/drivers/gpu/drm/radeon/r100.c
> @@ -3892,6 +3892,7 @@ int r100_suspend(struct radeon_device *rdev)
>   {
>   	r100_cp_disable(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	r100_irq_disable(rdev);
>   	if (rdev->flags & RADEON_IS_PCI)
>   		r100_pci_gart_disable(rdev);
> diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
> index c60350e..28ff068 100644
> --- a/drivers/gpu/drm/radeon/r300.c
> +++ b/drivers/gpu/drm/radeon/r300.c
> @@ -1436,6 +1436,7 @@ int r300_suspend(struct radeon_device *rdev)
>   {
>   	r100_cp_disable(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	r100_irq_disable(rdev);
>   	if (rdev->flags & RADEON_IS_PCIE)
>   		rv370_pcie_gart_disable(rdev);
> diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
> index 6fce2eb..6edecc8 100644
> --- a/drivers/gpu/drm/radeon/r420.c
> +++ b/drivers/gpu/drm/radeon/r420.c
> @@ -325,6 +325,7 @@ int r420_suspend(struct radeon_device *rdev)
>   	r420_cp_errata_fini(rdev);
>   	r100_cp_disable(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	r100_irq_disable(rdev);
>   	if (rdev->flags & RADEON_IS_PCIE)
>   		rv370_pcie_gart_disable(rdev);
> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
> index 0740db3..6166c7e 100644
> --- a/drivers/gpu/drm/radeon/r600.c
> +++ b/drivers/gpu/drm/radeon/r600.c
> @@ -3031,6 +3031,7 @@ int r600_suspend(struct radeon_device *rdev)
>   	r600_dma_stop(rdev);
>   	r600_irq_suspend(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	r600_pcie_gart_disable(rdev);
>   
>   	return 0;
> diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
> index 73051ce..5eaf41f 100644
> --- a/drivers/gpu/drm/radeon/rs400.c
> +++ b/drivers/gpu/drm/radeon/rs400.c
> @@ -470,6 +470,7 @@ int rs400_suspend(struct radeon_device *rdev)
>   {
>   	r100_cp_disable(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	r100_irq_disable(rdev);
>   	rs400_gart_disable(rdev);
>   	return 0;
> diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
> index 5a0fc74..8f70d78 100644
> --- a/drivers/gpu/drm/radeon/rs600.c
> +++ b/drivers/gpu/drm/radeon/rs600.c
> @@ -945,6 +945,7 @@ int rs600_suspend(struct radeon_device *rdev)
>   	r600_audio_fini(rdev);
>   	r100_cp_disable(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	rs600_irq_disable(rdev);
>   	rs600_gart_disable(rdev);
>   	return 0;
> diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
> index 5706d2a..a9e7890 100644
> --- a/drivers/gpu/drm/radeon/rs690.c
> +++ b/drivers/gpu/drm/radeon/rs690.c
> @@ -686,6 +686,7 @@ int rs690_suspend(struct radeon_device *rdev)
>   	r600_audio_fini(rdev);
>   	r100_cp_disable(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	rs600_irq_disable(rdev);
>   	rs400_gart_disable(rdev);
>   	return 0;
> diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
> index 435ed35..73ce8a3 100644
> --- a/drivers/gpu/drm/radeon/rv515.c
> +++ b/drivers/gpu/drm/radeon/rv515.c
> @@ -530,6 +530,7 @@ int rv515_suspend(struct radeon_device *rdev)
>   {
>   	r100_cp_disable(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	rs600_irq_disable(rdev);
>   	if (rdev->flags & RADEON_IS_PCIE)
>   		rv370_pcie_gart_disable(rdev);
> diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
> index d63fe1d..021a056 100644
> --- a/drivers/gpu/drm/radeon/rv770.c
> +++ b/drivers/gpu/drm/radeon/rv770.c
> @@ -1119,6 +1119,7 @@ int rv770_suspend(struct radeon_device *rdev)
>   	r600_dma_stop(rdev);
>   	r600_irq_suspend(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	rv770_pcie_gart_disable(rdev);
>   
>   	return 0;
> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
> index bafbe32..23f4ab99 100644
> --- a/drivers/gpu/drm/radeon/si.c
> +++ b/drivers/gpu/drm/radeon/si.c
> @@ -4474,6 +4474,7 @@ int si_suspend(struct radeon_device *rdev)
>   	cayman_dma_stop(rdev);
>   	si_irq_suspend(rdev);
>   	radeon_wb_disable(rdev);
> +	radeon_ib_pool_fini(rdev);
>   	si_pcie_gart_disable(rdev);
>   	return 0;
>   }

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

* Re: [PATCH 1/2] drm/radeon: fix S/R on VM systems (cayman/TN/SI)
  2013-03-11 21:06 ` [PATCH 1/2] drm/radeon: fix S/R on VM systems (cayman/TN/SI) alexdeucher
@ 2013-03-12  8:59   ` Christian König
  0 siblings, 0 replies; 5+ messages in thread
From: Christian König @ 2013-03-12  8:59 UTC (permalink / raw)
  To: alexdeucher; +Cc: dri-devel, Alex Deucher, stable

Am 11.03.2013 22:06, schrieb alexdeucher@gmail.com:
> From: Alex Deucher <alexander.deucher@amd.com>
>
> We weren't properly tearing down the VM sub-alloctor
> on suspend leading to bogus VM PTs on resume.
>
> Fixes:
> https://bugs.freedesktop.org/show_bug.cgi?id=60439
>
> Tested-by: Dmitry Cherkasov <Dmitrii.Cherkasov@amd.com>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: stable@vger.kernel.org

I'm still wondering how I missed that. Anyway, I have a NAK on the other 
patch, but this one is:

Reviewed-by: Christian König <christian.koenig@amd.com>

Christian.

> ---
>   drivers/gpu/drm/radeon/ni.c |    1 +
>   drivers/gpu/drm/radeon/si.c |    1 +
>   2 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
> index 3d81ca7..e6f3989 100644
> --- a/drivers/gpu/drm/radeon/ni.c
> +++ b/drivers/gpu/drm/radeon/ni.c
> @@ -1780,6 +1780,7 @@ int cayman_resume(struct radeon_device *rdev)
>   int cayman_suspend(struct radeon_device *rdev)
>   {
>   	r600_audio_fini(rdev);
> +	radeon_vm_manager_fini(rdev);
>   	cayman_cp_enable(rdev, false);
>   	cayman_dma_stop(rdev);
>   	evergreen_irq_suspend(rdev);
> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
> index 9128120..bafbe32 100644
> --- a/drivers/gpu/drm/radeon/si.c
> +++ b/drivers/gpu/drm/radeon/si.c
> @@ -4469,6 +4469,7 @@ int si_resume(struct radeon_device *rdev)
>   
>   int si_suspend(struct radeon_device *rdev)
>   {
> +	radeon_vm_manager_fini(rdev);
>   	si_cp_enable(rdev, false);
>   	cayman_dma_stop(rdev);
>   	si_irq_suspend(rdev);

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

end of thread, other threads:[~2013-03-12  8:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-11 21:06 [PATCH 0/2] Properly suspend/resume sub-allocator alexdeucher
2013-03-11 21:06 ` [PATCH 1/2] drm/radeon: fix S/R on VM systems (cayman/TN/SI) alexdeucher
2013-03-12  8:59   ` Christian König
2013-03-11 21:06 ` [PATCH 2/2] drm/radeon: tear down the IB pool on suspend alexdeucher
2013-03-12  8:52   ` 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.