intel_agp: Don't oops with zero stolen memory
authorOndrej Zary <linux@rainbow-software.org>
Wed, 16 Jun 2010 08:13:52 +0000 (10:13 +0200)
committerEric Anholt <eric@anholt.net>
Mon, 2 Aug 2010 02:03:42 +0000 (19:03 -0700)
When "onboard video memory" is set do "disabled" in BIOS on Asus P4P800-VM
board (i865G), kernel oopses with memory corruption:
https://bugs.freedesktop.org/show_bug.cgi?id=28430

Fix that by cleanly aborting the initialization.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Eric Anholt <eric@anholt.net>
drivers/char/agp/intel-gtt.c

index 9344216183a433a84210b5ebaef0efd57e6aa9c7..f97122a53ca36a9f6950010b60d22817277fa902 100644 (file)
@@ -797,6 +797,10 @@ static int intel_i830_create_gatt_table(struct agp_bridge_data *bridge)
 
        /* we have to call this as early as possible after the MMIO base address is known */
        intel_i830_init_gtt_entries();
+       if (intel_private.gtt_entries == 0) {
+               iounmap(intel_private.registers);
+               return -ENOMEM;
+       }
 
        agp_bridge->gatt_table = NULL;
 
@@ -1279,6 +1283,11 @@ static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge)
 
        /* we have to call this as early as possible after the MMIO base address is known */
        intel_i830_init_gtt_entries();
+       if (intel_private.gtt_entries == 0) {
+               iounmap(intel_private.gtt);
+               iounmap(intel_private.registers);
+               return -ENOMEM;
+       }
 
        agp_bridge->gatt_table = NULL;
 
@@ -1387,6 +1396,11 @@ static int intel_i965_create_gatt_table(struct agp_bridge_data *bridge)
 
        /* we have to call this as early as possible after the MMIO base address is known */
        intel_i830_init_gtt_entries();
+       if (intel_private.gtt_entries == 0) {
+               iounmap(intel_private.gtt);
+               iounmap(intel_private.registers);
+               return -ENOMEM;
+       }
 
        agp_bridge->gatt_table = NULL;