Files
linux-legacy/include/linux
Yinghai Lu 3b0fde0fac firmware_map: fix hang with x86/32bit
Addresses http://bugzilla.kernel.org/show_bug.cgi?id=13484

Peer reported:
| The bug is introduced from kernel 2.6.27, if E820 table reserve the memory
| above 4G in 32bit OS(BIOS-e820: 00000000fff80000 - 0000000120000000
| (reserved)), system will report Int 6 error and hang up. The bug is caused by
| the following code in drivers/firmware/memmap.c, the resource_size_t is 32bit
| variable in 32bit OS, the BUG_ON() will be invoked to result in the Int 6
| error. I try the latest 32bit Ubuntu and Fedora distributions, all hit this
| bug.
|======
|static int firmware_map_add_entry(resource_size_t start, resource_size_t end,
|                  const char *type,
|                  struct firmware_map_entry *entry)

and it only happen with CONFIG_PHYS_ADDR_T_64BIT is not set.

it turns out we need to pass u64 instead of resource_size_t for that.

[akpm@linux-foundation.org: add comment]
Reported-and-tested-by: Peer Chen <pchen@nvidia.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-06-16 19:47:28 -07:00
..
2009-04-07 10:23:34 +01:00
2009-06-11 21:36:00 -04:00
2009-06-01 06:21:13 +00:00
2009-05-02 15:36:10 -07:00
2009-04-23 10:06:35 +01:00
2009-06-11 21:36:09 -04:00
2009-04-03 14:53:32 -07:00
2009-05-29 08:40:01 -07:00
2009-06-11 08:50:57 -07:00
2009-06-11 21:36:06 -04:00
2009-04-03 14:53:32 -07:00
2009-06-11 21:36:11 -04:00
2009-04-03 09:48:29 -07:00
2009-06-03 14:05:10 -04:00
2009-05-19 16:02:02 -07:00
2009-05-22 09:43:41 +10:00
2009-06-02 00:45:24 -07:00
2009-06-14 22:10:41 +02:00
2009-04-21 13:41:48 -07:00
2009-04-21 13:41:48 -07:00
2009-06-11 17:03:28 +01:00
2009-06-10 11:48:39 +03:00
2009-04-06 16:06:26 +01:00
2009-04-28 07:37:28 +02:00
2009-04-14 09:00:19 +10:00
2009-04-29 17:32:35 -07:00
2009-06-11 19:05:32 +02:00
2009-05-25 00:55:45 -07:00
2009-06-11 21:36:02 -04:00
2009-06-11 21:36:01 -04:00
2009-04-03 17:41:23 -07:00
2009-04-03 17:41:12 -07:00
2009-04-30 15:32:11 +00:00
2009-04-24 08:54:21 +02:00
2009-06-11 21:36:12 -04:00
2009-05-09 10:49:41 -04:00
2009-04-08 14:33:38 -07:00
2009-06-11 08:50:58 -07:00
2009-04-13 15:04:29 -07:00
2009-04-21 19:40:00 -07:00
2009-04-27 02:45:02 -07:00
2009-05-12 11:11:48 +02:00
2009-06-11 08:50:59 -07:00
2009-06-11 08:51:01 -07:00
2009-04-17 10:50:27 -07:00