diff options
Diffstat (limited to 'arch/x86/kernel/mpparse_64.c')
-rw-r--r-- | arch/x86/kernel/mpparse_64.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/arch/x86/kernel/mpparse_64.c b/arch/x86/kernel/mpparse_64.c index 8c7af5b7ddd4..9a9610089910 100644 --- a/arch/x86/kernel/mpparse_64.c +++ b/arch/x86/kernel/mpparse_64.c | |||
@@ -593,7 +593,30 @@ static int __init smp_scan_config(unsigned long base, unsigned long length, | |||
593 | 593 | ||
594 | smp_found_config = 1; | 594 | smp_found_config = 1; |
595 | mpf_found = mpf; | 595 | mpf_found = mpf; |
596 | #ifdef CONFIG_X86_32 | ||
597 | printk(KERN_INFO "found SMP MP-table at [%p] %08lx\n", | ||
598 | mpf, virt_to_phys(mpf)); | ||
599 | reserve_bootmem(virt_to_phys(mpf), PAGE_SIZE, | ||
600 | BOOTMEM_DEFAULT); | ||
601 | if (mpf->mpf_physptr) { | ||
602 | /* | ||
603 | * We cannot access to MPC table to compute | ||
604 | * table size yet, as only few megabytes from | ||
605 | * the bottom is mapped now. | ||
606 | * PC-9800's MPC table places on the very last | ||
607 | * of physical memory; so that simply reserving | ||
608 | * PAGE_SIZE from mpg->mpf_physptr yields BUG() | ||
609 | * in reserve_bootmem. | ||
610 | */ | ||
611 | unsigned long size = PAGE_SIZE; | ||
612 | unsigned long end = max_low_pfn * PAGE_SIZE; | ||
613 | if (mpf->mpf_physptr + size > end) | ||
614 | size = end - mpf->mpf_physptr; | ||
615 | reserve_bootmem(mpf->mpf_physptr, size, | ||
616 | BOOTMEM_DEFAULT); | ||
617 | } | ||
596 | 618 | ||
619 | #else | ||
597 | if (!reserve) | 620 | if (!reserve) |
598 | return 1; | 621 | return 1; |
599 | 622 | ||
@@ -601,7 +624,8 @@ static int __init smp_scan_config(unsigned long base, unsigned long length, | |||
601 | if (mpf->mpf_physptr) | 624 | if (mpf->mpf_physptr) |
602 | reserve_bootmem_generic(mpf->mpf_physptr, | 625 | reserve_bootmem_generic(mpf->mpf_physptr, |
603 | PAGE_SIZE); | 626 | PAGE_SIZE); |
604 | return 1; | 627 | #endif |
628 | return 1; | ||
605 | } | 629 | } |
606 | bp += 4; | 630 | bp += 4; |
607 | length -= 16; | 631 | length -= 16; |