[PATCH 1/1] Fix boot on efi 32 bit Machines [try #2]

From: Edgar Hucek
Date: Fri Jun 23 2006 - 05:41:41 EST


Fix EFI boot on 32 bit machines with pcie port.
Efi machines does not have an e820 memory map.
This bug makes native efi boots on Intel Mac's
impossible.

Signed-off-by: Edgar Hucek <hostmaster@xxxxxxxxxx>

--- a/arch/i386/kernel/setup.c 2006-06-19 09:12:09.000000000 +0200
+++ b/arch/i386/kernel/setup.c 2006-06-19 09:12:24.000000000 +0200
@@ -975,24 +975,28 @@
u64 start = s;
u64 end = e;
int i;
- for (i = 0; i < e820.nr_map; i++) {
- struct e820entry *ei = &e820.map[i];
- if (type && ei->type != type)
- continue;
- /* is the region (part) in overlap with the current region ?*/
- if (ei->addr >= end || ei->addr + ei->size <= start)
- continue;
- /* if the region is at the beginning of <start,end> we move
- * start to the end of the region since it's ok until there
- */
- if (ei->addr <= start)
- start = ei->addr + ei->size;
- /* if start is now at or beyond end, we're done, full
- * coverage */
- if (start >= end)
- return 1; /* we're done */
+ if (!efi_enabled) {
+ for (i = 0; i < e820.nr_map; i++) {
+ struct e820entry *ei = &e820.map[i];
+ if (type && ei->type != type)
+ continue;
+ /* is the region (part) in overlap with the current region ?*/
+ if (ei->addr >= end || ei->addr + ei->size <= start)
+ continue;
+ /* if the region is at the beginning of <start,end> we move
+ * start to the end of the region since it's ok until there
+ */
+ if (ei->addr <= start)
+ start = ei->addr + ei->size;
+ /* if start is now at or beyond end, we're done, full
+ * coverage */
+ if (start >= end)
+ return 1; /* we're done */
+ }
+ return 0;
+ } else {
+ return 1;
}
- return 0;
}

/*


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/