[kernel] r16363 - in dists/sid/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Tue Sep 28 01:13:13 UTC 2010


Author: benh
Date: Tue Sep 28 01:13:05 2010
New Revision: 16363

Log:
drm/radeon: Fix regressions introduced in 2.6.34.3 (Closes: #597636)

Added:
   dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-kms-fix-a-regression-on-r7xx-AGP.patch
   dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-kms-fix-segfault-in-r600_ioctl_ioctl_wait_idle.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/24

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	Mon Sep 27 23:54:29 2010	(r16362)
+++ dists/sid/linux-2.6/debian/changelog	Tue Sep 28 01:13:05 2010	(r16363)
@@ -31,6 +31,7 @@
   * xen: Fix typo in xen_percpu_chip definition
   * 3c59x: Remove incorrect locking (Closes: #598103)
   * f71882fg: Add support for the f71889fg (Closes: #597820)
+  * drm/radeon: Fix regressions introduced in 2.6.34.3 (Closes: #597636)
 
   [ Martin Michlmayr ]
   * ARM: update mach types.

Added: dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-kms-fix-a-regression-on-r7xx-AGP.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-kms-fix-a-regression-on-r7xx-AGP.patch	Tue Sep 28 01:13:05 2010	(r16363)
@@ -0,0 +1,142 @@
+From: Alex Deucher <alexdeucher at gmail.com>
+Date: Fri, 27 Aug 2010 13:59:54 -0400
+Subject: [PATCH] drm/radeon/kms: fix a regression on r7xx AGP due to the HDP flush fix
+
+commit 87cbf8f2c5d1b1fc4642c3dc0bb6efc587479603 upstream.
+
+commit: 812d046915f48236657f02c06d7dc47140e9ceda
+drm/radeon/kms/r7xx: add workaround for hw issue with HDP flush
+breaks on AGP boards since there is no VRAM gart table.
+
+This patch fixes the issue by creating a VRAM scratch page so that
+can be used on both AGP and PCIE.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=29834
+
+Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
+Cc: stable at kernel.org
+Signed-off-by: Dave Airlie <airlied at redhat.com>
+---
+ drivers/gpu/drm/radeon/r600.c   |    2 +-
+ drivers/gpu/drm/radeon/radeon.h |    6 ++++
+ drivers/gpu/drm/radeon/rv770.c  |   52 +++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 59 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index d0ebae9..aee8376 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -3541,7 +3541,7 @@ void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo)
+ 	 * rather than write to HDP_REG_COHERENCY_FLUSH_CNTL
+ 	 */
+ 	if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_RV740)) {
+-		void __iomem *ptr = (void *)rdev->gart.table.vram.ptr;
++		void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
+ 		u32 tmp;
+ 
+ 		WREG32(HDP_DEBUG1, 0);
+diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
+index 3dfcfa3..e90d9e3 100644
+--- a/drivers/gpu/drm/radeon/radeon.h
++++ b/drivers/gpu/drm/radeon/radeon.h
+@@ -1013,6 +1013,11 @@ int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
+ int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
+ 				struct drm_file *filp);
+ 
++/* VRAM scratch page for HDP bug */
++struct r700_vram_scratch {
++	struct radeon_bo		*robj;
++	volatile uint32_t		*ptr;
++};
+ 
+ /*
+  * Core structure, functions and helpers.
+@@ -1079,6 +1084,7 @@ struct radeon_device {
+ 	const struct firmware *pfp_fw;	/* r6/700 PFP firmware */
+ 	const struct firmware *rlc_fw;	/* r6/700 RLC firmware */
+ 	struct r600_blit r600_blit;
++	struct r700_vram_scratch vram_scratch;
+ 	int msi_enabled; /* msi enabled */
+ 	struct r600_ih ih; /* r6/700 interrupt ring */
+ 	struct workqueue_struct *wq;
+diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
+index f1c7968..a84e386 100644
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -905,6 +905,54 @@ static void rv770_gpu_init(struct radeon_device *rdev)
+ 
+ }
+ 
++static int rv770_vram_scratch_init(struct radeon_device *rdev)
++{
++	int r;
++	u64 gpu_addr;
++
++	if (rdev->vram_scratch.robj == NULL) {
++		r = radeon_bo_create(rdev, NULL, RADEON_GPU_PAGE_SIZE,
++					true, RADEON_GEM_DOMAIN_VRAM,
++					&rdev->vram_scratch.robj);
++		if (r) {
++			return r;
++		}
++	}
++
++	r = radeon_bo_reserve(rdev->vram_scratch.robj, false);
++	if (unlikely(r != 0))
++		return r;
++	r = radeon_bo_pin(rdev->vram_scratch.robj,
++			  RADEON_GEM_DOMAIN_VRAM, &gpu_addr);
++	if (r) {
++		radeon_bo_unreserve(rdev->vram_scratch.robj);
++		return r;
++	}
++	r = radeon_bo_kmap(rdev->vram_scratch.robj,
++				(void **)&rdev->vram_scratch.ptr);
++	if (r)
++		radeon_bo_unpin(rdev->vram_scratch.robj);
++	radeon_bo_unreserve(rdev->vram_scratch.robj);
++
++	return r;
++}
++
++static void rv770_vram_scratch_fini(struct radeon_device *rdev)
++{
++	int r;
++
++	if (rdev->vram_scratch.robj == NULL) {
++		return;
++	}
++	r = radeon_bo_reserve(rdev->vram_scratch.robj, false);
++	if (likely(r == 0)) {
++		radeon_bo_kunmap(rdev->vram_scratch.robj);
++		radeon_bo_unpin(rdev->vram_scratch.robj);
++		radeon_bo_unreserve(rdev->vram_scratch.robj);
++	}
++	radeon_bo_unref(&rdev->vram_scratch.robj);
++}
++
+ int rv770_mc_init(struct radeon_device *rdev)
+ {
+ 	u32 tmp;
+@@ -970,6 +1018,9 @@ static int rv770_startup(struct radeon_device *rdev)
+ 		if (r)
+ 			return r;
+ 	}
++	r = rv770_vram_scratch_init(rdev);
++	if (r)
++		return r;
+ 	rv770_gpu_init(rdev);
+ 	r = r600_blit_init(rdev);
+ 	if (r) {
+@@ -1195,6 +1246,7 @@ void rv770_fini(struct radeon_device *rdev)
+ 	r600_irq_fini(rdev);
+ 	radeon_irq_kms_fini(rdev);
+ 	rv770_pcie_gart_fini(rdev);
++	rv770_vram_scratch_fini(rdev);
+ 	radeon_gem_fini(rdev);
+ 	radeon_fence_driver_fini(rdev);
+ 	radeon_clocks_fini(rdev);
+-- 
+1.7.1
+

Added: dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-kms-fix-segfault-in-r600_ioctl_ioctl_wait_idle.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-kms-fix-segfault-in-r600_ioctl_ioctl_wait_idle.patch	Tue Sep 28 01:13:05 2010	(r16363)
@@ -0,0 +1,36 @@
+From 1c9b3a143a9ddd64c390dfeb757a8f6d12b70c90 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher at gmail.com>
+Date: Mon, 27 Sep 2010 10:53:34 -0400
+Subject: [PATCH] drm/radeon/kms: fix potential segfault in r600_ioctl_wait_idle
+
+radeon_gem_wait_idle_ioctl can apparently get called prior to
+the vram page being set up or even if accel if false, so make
+sure it's valid before using it.
+
+Should fix:
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=597636
+https://bugs.freedesktop.org/show_bug.cgi?id=29834
+
+Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
+Cc: stable at kernel.org
+---
+ drivers/gpu/drm/radeon/r600.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index 30a51c3..31f45af 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -3491,7 +3491,8 @@ void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo)
+ 	/* r7xx hw bug.  write to HDP_DEBUG1 followed by fb read
+ 	 * rather than write to HDP_REG_COHERENCY_FLUSH_CNTL
+ 	 */
+-	if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_RV740)) {
++	if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_RV740) &&
++	    rdev->vram_scratch.ptr) {
+ 		void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
+ 		u32 tmp;
+ 
+-- 
+1.7.1.1
+

Modified: dists/sid/linux-2.6/debian/patches/series/24
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/24	Mon Sep 27 23:54:29 2010	(r16362)
+++ dists/sid/linux-2.6/debian/patches/series/24	Tue Sep 28 01:13:05 2010	(r16363)
@@ -69,3 +69,5 @@
 + features/all/hwmon-f71882fg-Cleanup-sysfs-attr-creation-2-2.patch
 + features/all/hwmon-f71882fg-Fix-sysfs-file-removal.patch
 + features/all/hwmon-f71882fg-Add-support-for-the-f71889fg.patch
++ bugfix/all/drm-radeon-kms-fix-a-regression-on-r7xx-AGP.patch
++ bugfix/all/drm-radeon-kms-fix-segfault-in-r600_ioctl_ioctl_wait_idle.patch



More information about the Kernel-svn-changes mailing list