diff options
Diffstat (limited to 'arch/i386/mm/init.c')
| -rw-r--r-- | arch/i386/mm/init.c | 16 |
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); |
