--- /dev/null
+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: agp: Fix stolen memory counting on G4X.
+
+From: Eric Anholt <eric@anholt.net>
+
+commit 82e14a6215cbc9804ecc35281e973c6c8ce22fe7 upstream
+
+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>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/agp/intel-agp.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- 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(
+ 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.