Skip to content

Commit

Permalink
x86: fix the missing BIOS area check in page_is_ram
Browse files Browse the repository at this point in the history
page_is_ram has a FIXME since ages, which reminds to sanity check the
BIOS area between 640k and 1M, which is sometimes falsely reported as
RAM in the e820 tables.

Implement the sanity check. Move the BIOS range defines from
pageattr.c into e820.h to avoid duplicate defines.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Thomas Gleixner authored and Ingo Molnar committed Jan 30, 2008
1 parent 5f5192b commit 950f9d9
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
15 changes: 10 additions & 5 deletions arch/x86/mm/ioremap.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,18 @@ int page_is_ram(unsigned long pagenr)
*/
if (e820.map[i].type != E820_RAM)
continue;
/*
* !!!FIXME!!! Some BIOSen report areas as RAM that
* are not. Notably the 640->1Mb area. We need a sanity
* check here.
*/
addr = (e820.map[i].addr + PAGE_SIZE-1) >> PAGE_SHIFT;
end = (e820.map[i].addr + e820.map[i].size) >> PAGE_SHIFT;

/*
* Sanity check: Some BIOSen report areas as RAM that
* are not. Notably the 640->1Mb area, which is the
* PCI BIOS area.
*/
if (addr >= (BIOS_BEGIN >> PAGE_SHIFT) &&
end < (BIOS_END >> PAGE_SHIFT))
continue;

if ((pagenr >= addr) && (pagenr < end))
return 1;
}
Expand Down
7 changes: 1 addition & 6 deletions arch/x86/mm/pageattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,13 @@
#include <linux/slab.h>
#include <linux/mm.h>

#include <asm/e820.h>
#include <asm/processor.h>
#include <asm/tlbflush.h>
#include <asm/sections.h>
#include <asm/uaccess.h>
#include <asm/pgalloc.h>

/*
* We must allow the BIOS range to be executable:
*/
#define BIOS_BEGIN 0x000a0000
#define BIOS_END 0x00100000

static inline int
within(unsigned long addr, unsigned long start, unsigned long end)
{
Expand Down
3 changes: 3 additions & 0 deletions include/asm-x86/e820.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ struct e820map {
#define ISA_START_ADDRESS 0xa0000
#define ISA_END_ADDRESS 0x100000

#define BIOS_BEGIN 0x000a0000
#define BIOS_END 0x00100000

#ifdef __KERNEL__
#ifdef CONFIG_X86_32
# include "e820_32.h"
Expand Down

0 comments on commit 950f9d9

Please sign in to comment.