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

Re: Bug#502387: complete system hangup



tag 502387 patch
clone 502387 -1
reassign -1 linux-2.6
retitle -1 [intel agp] stolen memory counting broken on G4X
kthxbye

On Thu, Oct 16, 2008 at 13:45:28 +0200, Julien Cristau wrote:

> On Thu, Oct 16, 2008 at 08:48:12 +0200, Nico Schottelius wrote:
> 
> > Since some days, maybe since the upgrade from xserver-xorg-core
> > from 2:1.4.2-6 to 2:1.4.2-7, the system has a total hangup when
> > I specify to use the intel driver in xorg.conf.
> > 
> > It runs fine without specification, in which case xorg choses
> > vesa (that`s why I report the bug for the intel package).
> > 
> There's a reason we don't use the intel driver on cantiga by default.
> It seems the problems got tracked down recently though, see below.
> 
> > As seen below, I have the Intel Cantiga chipset runnin on the
> > Lenovo X200.
> > 
> > This happens with plain debian kernel (2.6.26) and also with
> > 2.6.27-rc6.
> > 
> The patches at [1] and [2] might help.
> 
> d-k: can we get the kernel part of this bug fixed in lenny?
> 
> Cheers,
> Julien
> 
> [1] http://git.kernel.org/?p=linux/kernel/git/anholt/drm-intel.git;a=commitdiff_plain;h=2052746fc8397130c120f0194a89938b0b62b6cb
> [2] http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/commit/?id=4dd00681dd0f9fce8dfd4592b46418edbbd2eeb4
> 
The kernel patch is now in mainline, commit id
82e14a6215cbc9804ecc35281e973c6c8ce22fe7 (attached).  I'll apply the X
driver fix soon.

Cheers,
Julien
>From 82e14a6215cbc9804ecc35281e973c6c8ce22fe7 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Tue, 14 Oct 2008 11:28:58 -0700
Subject: [PATCH] agp: Fix stolen memory counting on G4X.

On the GM45, the amount of stolen memory mapped to the GTT was underestimated,
even though we had 508KB more available since the GTT doesn't take from
stolen memory. On the non-GM45 G4X, we overestimated how much stolen was
mapped to the GTT by 4KB, resulting in GPU page faults when that page was
accessed.

This update requires a corresponding update to xf86-video-intel to work
correctly.

Signed-off-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 drivers/char/agp/intel-agp.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
index 016fdf0..f1fe749 100644
--- a/drivers/char/agp/intel-agp.c
+++ b/drivers/char/agp/intel-agp.c
@@ -54,8 +54,7 @@
 		 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \
 		 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \
 		 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB || \
-		 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB || \
-		 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB)
+		 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB)
 
 #define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \
 		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \
@@ -63,7 +62,8 @@
 
 #define IS_G4X (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGD_E_HB || \
 		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q45_HB || \
-		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G45_HB)
+		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G45_HB || \
+		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB)
 
 extern int agp_memory_reserved;
 
@@ -525,8 +525,10 @@ static void intel_i830_init_gtt_entries(void)
 		size += 4;
 	} else if (IS_G4X) {
 		/* On 4 series hardware, GTT stolen is separate from graphics
-		 * stolen, ignore it in stolen gtt entries counting */
-		size = 0;
+		 * stolen, ignore it in stolen gtt entries counting.  However,
+		 * 4KB of the stolen memory doesn't get mapped to the GTT.
+		 */
+		size = 4;
 	} else {
 		/* On previous hardware, the GTT size was just what was
 		 * required to map the aperture.
-- 
1.5.6.5


Reply to: