summaryrefslogtreecommitdiff
path: root/arch/i386/mm/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386/mm/init.c')
-rw-r--r--arch/i386/mm/init.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/i386/mm/init.c b/arch/i386/mm/init.c
index 95e063f0fd5d..f0c3b00c0a51 100644
--- a/arch/i386/mm/init.c
+++ b/arch/i386/mm/init.c
@@ -439,13 +439,24 @@ static inline int page_is_ram (unsigned long pagenr)
return 0;
}
+static inline int page_kills_ppro(unsigned long pagenr)
+{
+ if(pagenr >= 0x70000 && pagenr <= 0x7003F)
+ return 1;
+ return 0;
+}
+
void __init mem_init(void)
{
+ extern int ppro_with_ram_bug(void);
int codesize, reservedpages, datasize, initsize;
int tmp;
+ int bad_ppro;
if (!mem_map)
BUG();
+
+ bad_ppro = ppro_with_ram_bug();
#ifdef CONFIG_HIGHMEM
highmem_start_page = mem_map + highstart_pfn;
@@ -476,6 +487,11 @@ void __init mem_init(void)
SetPageReserved(page);
continue;
}
+ if (bad_ppro && page_kills_ppro(tmp))
+ {
+ SetPageReserved(page);
+ continue;
+ }
ClearPageReserved(page);
set_bit(PG_highmem, &page->flags);
atomic_set(&page->count, 1);