diff options
-rw-r--r-- | arch/x86/kernel/e820_64.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/efi_64.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/mpparse.c | 5 | ||||
-rw-r--r-- | arch/x86/mm/init_64.c | 17 | ||||
-rw-r--r-- | include/asm-x86/proto.h | 2 |
5 files changed, 20 insertions, 10 deletions
diff --git a/arch/x86/kernel/e820_64.c b/arch/x86/kernel/e820_64.c index 124480c0008d..af1eb0789740 100644 --- a/arch/x86/kernel/e820_64.c +++ b/arch/x86/kernel/e820_64.c | |||
@@ -118,7 +118,8 @@ void __init early_res_to_bootmem(unsigned long start, unsigned long end) | |||
118 | continue; | 118 | continue; |
119 | printk(KERN_INFO " early res: %d [%lx-%lx] %s\n", i, | 119 | printk(KERN_INFO " early res: %d [%lx-%lx] %s\n", i, |
120 | final_start, final_end - 1, r->name); | 120 | final_start, final_end - 1, r->name); |
121 | reserve_bootmem_generic(final_start, final_end - final_start); | 121 | reserve_bootmem_generic(final_start, final_end - final_start, |
122 | BOOTMEM_DEFAULT); | ||
122 | } | 123 | } |
123 | } | 124 | } |
124 | 125 | ||
diff --git a/arch/x86/kernel/efi_64.c b/arch/x86/kernel/efi_64.c index d0060fdcccac..d561dd5f1e62 100644 --- a/arch/x86/kernel/efi_64.c +++ b/arch/x86/kernel/efi_64.c | |||
@@ -100,7 +100,8 @@ void __init efi_call_phys_epilog(void) | |||
100 | void __init efi_reserve_bootmem(void) | 100 | void __init efi_reserve_bootmem(void) |
101 | { | 101 | { |
102 | reserve_bootmem_generic((unsigned long)memmap.phys_map, | 102 | reserve_bootmem_generic((unsigned long)memmap.phys_map, |
103 | memmap.nr_map * memmap.desc_size); | 103 | memmap.nr_map * memmap.desc_size, |
104 | BOOTMEM_DEFAULT); | ||
104 | } | 105 | } |
105 | 106 | ||
106 | void __iomem * __init efi_ioremap(unsigned long phys_addr, unsigned long size) | 107 | void __iomem * __init efi_ioremap(unsigned long phys_addr, unsigned long size) |
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index 404683b94e79..4901ae3f742c 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
@@ -729,10 +729,11 @@ static int __init smp_scan_config(unsigned long base, unsigned long length, | |||
729 | if (!reserve) | 729 | if (!reserve) |
730 | return 1; | 730 | return 1; |
731 | 731 | ||
732 | reserve_bootmem_generic(virt_to_phys(mpf), PAGE_SIZE); | 732 | reserve_bootmem_generic(virt_to_phys(mpf), PAGE_SIZE, |
733 | BOOTMEM_DEFAULT); | ||
733 | if (mpf->mpf_physptr) | 734 | if (mpf->mpf_physptr) |
734 | reserve_bootmem_generic(mpf->mpf_physptr, | 735 | reserve_bootmem_generic(mpf->mpf_physptr, |
735 | PAGE_SIZE); | 736 | PAGE_SIZE, BOOTMEM_DEFAULT); |
736 | #endif | 737 | #endif |
737 | return 1; | 738 | return 1; |
738 | } | 739 | } |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 819dad973b13..bf7bf1de6c25 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -799,12 +799,13 @@ void free_initrd_mem(unsigned long start, unsigned long end) | |||
799 | } | 799 | } |
800 | #endif | 800 | #endif |
801 | 801 | ||
802 | void __init reserve_bootmem_generic(unsigned long phys, unsigned len) | 802 | int __init reserve_bootmem_generic(unsigned long phys, unsigned len, int flags) |
803 | { | 803 | { |
804 | #ifdef CONFIG_NUMA | 804 | #ifdef CONFIG_NUMA |
805 | int nid, next_nid; | 805 | int nid, next_nid; |
806 | #endif | 806 | #endif |
807 | unsigned long pfn = phys >> PAGE_SHIFT; | 807 | unsigned long pfn = phys >> PAGE_SHIFT; |
808 | int ret; | ||
808 | 809 | ||
809 | if (pfn >= end_pfn) { | 810 | if (pfn >= end_pfn) { |
810 | /* | 811 | /* |
@@ -812,11 +813,11 @@ void __init reserve_bootmem_generic(unsigned long phys, unsigned len) | |||
812 | * firmware tables: | 813 | * firmware tables: |
813 | */ | 814 | */ |
814 | if (pfn < max_pfn_mapped) | 815 | if (pfn < max_pfn_mapped) |
815 | return; | 816 | return -EFAULT; |
816 | 817 | ||
817 | printk(KERN_ERR "reserve_bootmem: illegal reserve %lx %u\n", | 818 | printk(KERN_ERR "reserve_bootmem: illegal reserve %lx %u\n", |
818 | phys, len); | 819 | phys, len); |
819 | return; | 820 | return -EFAULT; |
820 | } | 821 | } |
821 | 822 | ||
822 | /* Should check here against the e820 map to avoid double free */ | 823 | /* Should check here against the e820 map to avoid double free */ |
@@ -824,9 +825,13 @@ void __init reserve_bootmem_generic(unsigned long phys, unsigned len) | |||
824 | nid = phys_to_nid(phys); | 825 | nid = phys_to_nid(phys); |
825 | next_nid = phys_to_nid(phys + len - 1); | 826 | next_nid = phys_to_nid(phys + len - 1); |
826 | if (nid == next_nid) | 827 | if (nid == next_nid) |
827 | reserve_bootmem_node(NODE_DATA(nid), phys, len, BOOTMEM_DEFAULT); | 828 | ret = reserve_bootmem_node(NODE_DATA(nid), phys, len, flags); |
828 | else | 829 | else |
829 | reserve_bootmem(phys, len, BOOTMEM_DEFAULT); | 830 | ret = reserve_bootmem(phys, len, flags); |
831 | |||
832 | if (ret != 0) | ||
833 | return ret; | ||
834 | |||
830 | #else | 835 | #else |
831 | reserve_bootmem(phys, len, BOOTMEM_DEFAULT); | 836 | reserve_bootmem(phys, len, BOOTMEM_DEFAULT); |
832 | #endif | 837 | #endif |
@@ -835,6 +840,8 @@ void __init reserve_bootmem_generic(unsigned long phys, unsigned len) | |||
835 | dma_reserve += len / PAGE_SIZE; | 840 | dma_reserve += len / PAGE_SIZE; |
836 | set_dma_reserve(dma_reserve); | 841 | set_dma_reserve(dma_reserve); |
837 | } | 842 | } |
843 | |||
844 | return 0; | ||
838 | } | 845 | } |
839 | 846 | ||
840 | int kern_addr_valid(unsigned long addr) | 847 | int kern_addr_valid(unsigned long addr) |
diff --git a/include/asm-x86/proto.h b/include/asm-x86/proto.h index 6c8b41b03f6d..a9f51472521e 100644 --- a/include/asm-x86/proto.h +++ b/include/asm-x86/proto.h | |||
@@ -14,7 +14,7 @@ extern void ia32_syscall(void); | |||
14 | extern void ia32_cstar_target(void); | 14 | extern void ia32_cstar_target(void); |
15 | extern void ia32_sysenter_target(void); | 15 | extern void ia32_sysenter_target(void); |
16 | 16 | ||
17 | extern void reserve_bootmem_generic(unsigned long phys, unsigned len); | 17 | extern int reserve_bootmem_generic(unsigned long phys, unsigned len, int flags); |
18 | 18 | ||
19 | extern void syscall32_cpu_init(void); | 19 | extern void syscall32_cpu_init(void); |
20 | 20 | ||