diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-13 21:54:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-13 21:54:50 -0400 |
commit | dfe2c6dcc8ca2cdc662d7c0473e9811b72ef3370 (patch) | |
tree | 9ed639a08c16322cdf136d576f42df5b97cd1549 /arch | |
parent | a45d572841a24db02a62cf05e1157c35fdd3705b (diff) | |
parent | 64e455079e1bd7787cc47be30b7f601ce682a5f6 (diff) |
Merge branch 'akpm' (patches from Andrew Morton)
Merge second patch-bomb from Andrew Morton:
- a few hotfixes
- drivers/dma updates
- MAINTAINERS updates
- Quite a lot of lib/ updates
- checkpatch updates
- binfmt updates
- autofs4
- drivers/rtc/
- various small tweaks to less used filesystems
- ipc/ updates
- kernel/watchdog.c changes
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (135 commits)
mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared
kernel/param: consolidate __{start,stop}___param[] in <linux/moduleparam.h>
ia64: remove duplicate declarations of __per_cpu_start[] and __per_cpu_end[]
frv: remove unused declarations of __start___ex_table and __stop___ex_table
kvm: ensure hard lockup detection is disabled by default
kernel/watchdog.c: control hard lockup detection default
staging: rtl8192u: use %*pEn to escape buffer
staging: rtl8192e: use %*pEn to escape buffer
staging: wlan-ng: use %*pEhp to print SN
lib80211: remove unused print_ssid()
wireless: hostap: proc: print properly escaped SSID
wireless: ipw2x00: print SSID via %*pE
wireless: libertas: print esaped string via %*pE
lib/vsprintf: add %*pE[achnops] format specifier
lib / string_helpers: introduce string_escape_mem()
lib / string_helpers: refactoring the test suite
lib / string_helpers: move documentation to c-file
include/linux: remove strict_strto* definitions
arch/x86/mm/numa.c: fix boot failure when all nodes are hotpluggable
fs: check bh blocknr earlier when searching lru
...
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/boot/dts/exynos3250.dtsi | 2 | ||||
-rw-r--r-- | arch/arm/mach-pxa/lpd270.c | 12 | ||||
-rw-r--r-- | arch/frv/mm/extable.c | 2 | ||||
-rw-r--r-- | arch/ia64/include/asm/sections.h | 2 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/common.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/crash.c | 10 | ||||
-rw-r--r-- | arch/x86/kernel/kexec-bzimage64.c | 15 | ||||
-rw-r--r-- | arch/x86/kernel/kvm.c | 8 | ||||
-rw-r--r-- | arch/x86/mm/ioremap.c | 20 | ||||
-rw-r--r-- | arch/x86/mm/numa.c | 89 | ||||
-rw-r--r-- | arch/x86/purgatory/Makefile | 3 |
11 files changed, 96 insertions, 71 deletions
diff --git a/arch/arm/boot/dts/exynos3250.dtsi b/arch/arm/boot/dts/exynos3250.dtsi index 1d52de6370d5..429a6c6cfcf9 100644 --- a/arch/arm/boot/dts/exynos3250.dtsi +++ b/arch/arm/boot/dts/exynos3250.dtsi | |||
@@ -164,7 +164,7 @@ | |||
164 | }; | 164 | }; |
165 | 165 | ||
166 | rtc: rtc@10070000 { | 166 | rtc: rtc@10070000 { |
167 | compatible = "samsung,s3c6410-rtc"; | 167 | compatible = "samsung,exynos3250-rtc"; |
168 | reg = <0x10070000 0x100>; | 168 | reg = <0x10070000 0x100>; |
169 | interrupts = <0 73 0>, <0 74 0>; | 169 | interrupts = <0 73 0>, <0 74 0>; |
170 | status = "disabled"; | 170 | status = "disabled"; |
diff --git a/arch/arm/mach-pxa/lpd270.c b/arch/arm/mach-pxa/lpd270.c index 9f6ec167902a..ad777b353bd5 100644 --- a/arch/arm/mach-pxa/lpd270.c +++ b/arch/arm/mach-pxa/lpd270.c | |||
@@ -416,17 +416,17 @@ static struct pxafb_mach_info *lpd270_lcd_to_use; | |||
416 | 416 | ||
417 | static int __init lpd270_set_lcd(char *str) | 417 | static int __init lpd270_set_lcd(char *str) |
418 | { | 418 | { |
419 | if (!strnicmp(str, "lq057q3dc02", 11)) { | 419 | if (!strncasecmp(str, "lq057q3dc02", 11)) { |
420 | lpd270_lcd_to_use = &sharp_lq057q3dc02; | 420 | lpd270_lcd_to_use = &sharp_lq057q3dc02; |
421 | } else if (!strnicmp(str, "lq121s1dg31", 11)) { | 421 | } else if (!strncasecmp(str, "lq121s1dg31", 11)) { |
422 | lpd270_lcd_to_use = &sharp_lq121s1dg31; | 422 | lpd270_lcd_to_use = &sharp_lq121s1dg31; |
423 | } else if (!strnicmp(str, "lq036q1da01", 11)) { | 423 | } else if (!strncasecmp(str, "lq036q1da01", 11)) { |
424 | lpd270_lcd_to_use = &sharp_lq036q1da01; | 424 | lpd270_lcd_to_use = &sharp_lq036q1da01; |
425 | } else if (!strnicmp(str, "lq64d343", 8)) { | 425 | } else if (!strncasecmp(str, "lq64d343", 8)) { |
426 | lpd270_lcd_to_use = &sharp_lq64d343; | 426 | lpd270_lcd_to_use = &sharp_lq64d343; |
427 | } else if (!strnicmp(str, "lq10d368", 8)) { | 427 | } else if (!strncasecmp(str, "lq10d368", 8)) { |
428 | lpd270_lcd_to_use = &sharp_lq10d368; | 428 | lpd270_lcd_to_use = &sharp_lq10d368; |
429 | } else if (!strnicmp(str, "lq035q7db02-20", 14)) { | 429 | } else if (!strncasecmp(str, "lq035q7db02-20", 14)) { |
430 | lpd270_lcd_to_use = &sharp_lq035q7db02_20; | 430 | lpd270_lcd_to_use = &sharp_lq035q7db02_20; |
431 | } else { | 431 | } else { |
432 | printk(KERN_INFO "lpd270: unknown lcd panel [%s]\n", str); | 432 | printk(KERN_INFO "lpd270: unknown lcd panel [%s]\n", str); |
diff --git a/arch/frv/mm/extable.c b/arch/frv/mm/extable.c index 6aea124f574d..2fb9b3ab57b9 100644 --- a/arch/frv/mm/extable.c +++ b/arch/frv/mm/extable.c | |||
@@ -6,8 +6,6 @@ | |||
6 | #include <linux/spinlock.h> | 6 | #include <linux/spinlock.h> |
7 | #include <asm/uaccess.h> | 7 | #include <asm/uaccess.h> |
8 | 8 | ||
9 | extern const struct exception_table_entry __attribute__((aligned(8))) __start___ex_table[]; | ||
10 | extern const struct exception_table_entry __attribute__((aligned(8))) __stop___ex_table[]; | ||
11 | extern const void __memset_end, __memset_user_error_lr, __memset_user_error_handler; | 9 | extern const void __memset_end, __memset_user_error_lr, __memset_user_error_handler; |
12 | extern const void __memcpy_end, __memcpy_user_error_lr, __memcpy_user_error_handler; | 10 | extern const void __memcpy_end, __memcpy_user_error_lr, __memcpy_user_error_handler; |
13 | extern spinlock_t modlist_lock; | 11 | extern spinlock_t modlist_lock; |
diff --git a/arch/ia64/include/asm/sections.h b/arch/ia64/include/asm/sections.h index 1a873b36a4a1..2ab2003698ef 100644 --- a/arch/ia64/include/asm/sections.h +++ b/arch/ia64/include/asm/sections.h | |||
@@ -10,7 +10,7 @@ | |||
10 | #include <linux/uaccess.h> | 10 | #include <linux/uaccess.h> |
11 | #include <asm-generic/sections.h> | 11 | #include <asm-generic/sections.h> |
12 | 12 | ||
13 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; | 13 | extern char __phys_per_cpu_start[]; |
14 | #ifdef CONFIG_SMP | 14 | #ifdef CONFIG_SMP |
15 | extern char __cpu0_per_cpu[]; | 15 | extern char __cpu0_per_cpu[]; |
16 | #endif | 16 | #endif |
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 700f958652f8..3eff36f719fb 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -964,6 +964,7 @@ static void vgetcpu_set_mode(void) | |||
964 | vgetcpu_mode = VGETCPU_LSL; | 964 | vgetcpu_mode = VGETCPU_LSL; |
965 | } | 965 | } |
966 | 966 | ||
967 | #ifdef CONFIG_IA32_EMULATION | ||
967 | /* May not be __init: called during resume */ | 968 | /* May not be __init: called during resume */ |
968 | static void syscall32_cpu_init(void) | 969 | static void syscall32_cpu_init(void) |
969 | { | 970 | { |
@@ -975,7 +976,8 @@ static void syscall32_cpu_init(void) | |||
975 | 976 | ||
976 | wrmsrl(MSR_CSTAR, ia32_cstar_target); | 977 | wrmsrl(MSR_CSTAR, ia32_cstar_target); |
977 | } | 978 | } |
978 | #endif | 979 | #endif /* CONFIG_IA32_EMULATION */ |
980 | #endif /* CONFIG_X86_64 */ | ||
979 | 981 | ||
980 | #ifdef CONFIG_X86_32 | 982 | #ifdef CONFIG_X86_32 |
981 | void enable_sep_cpu(void) | 983 | void enable_sep_cpu(void) |
diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c index a618fcd2c07d..f5ab56d14287 100644 --- a/arch/x86/kernel/crash.c +++ b/arch/x86/kernel/crash.c | |||
@@ -237,7 +237,7 @@ static void fill_up_crash_elf_data(struct crash_elf_data *ced, | |||
237 | ced->max_nr_ranges++; | 237 | ced->max_nr_ranges++; |
238 | 238 | ||
239 | /* If crashk_low_res is not 0, another range split possible */ | 239 | /* If crashk_low_res is not 0, another range split possible */ |
240 | if (crashk_low_res.end != 0) | 240 | if (crashk_low_res.end) |
241 | ced->max_nr_ranges++; | 241 | ced->max_nr_ranges++; |
242 | } | 242 | } |
243 | 243 | ||
@@ -335,9 +335,11 @@ static int elf_header_exclude_ranges(struct crash_elf_data *ced, | |||
335 | if (ret) | 335 | if (ret) |
336 | return ret; | 336 | return ret; |
337 | 337 | ||
338 | ret = exclude_mem_range(cmem, crashk_low_res.start, crashk_low_res.end); | 338 | if (crashk_low_res.end) { |
339 | if (ret) | 339 | ret = exclude_mem_range(cmem, crashk_low_res.start, crashk_low_res.end); |
340 | return ret; | 340 | if (ret) |
341 | return ret; | ||
342 | } | ||
341 | 343 | ||
342 | /* Exclude GART region */ | 344 | /* Exclude GART region */ |
343 | if (ced->gart_end) { | 345 | if (ced->gart_end) { |
diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c index 9642b9b33655..ca05f86481aa 100644 --- a/arch/x86/kernel/kexec-bzimage64.c +++ b/arch/x86/kernel/kexec-bzimage64.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <asm/setup.h> | 26 | #include <asm/setup.h> |
27 | #include <asm/crash.h> | 27 | #include <asm/crash.h> |
28 | #include <asm/efi.h> | 28 | #include <asm/efi.h> |
29 | #include <asm/kexec-bzimage64.h> | ||
29 | 30 | ||
30 | #define MAX_ELFCOREHDR_STR_LEN 30 /* elfcorehdr=0x<64bit-value> */ | 31 | #define MAX_ELFCOREHDR_STR_LEN 30 /* elfcorehdr=0x<64bit-value> */ |
31 | 32 | ||
@@ -267,7 +268,7 @@ setup_boot_parameters(struct kimage *image, struct boot_params *params, | |||
267 | return ret; | 268 | return ret; |
268 | } | 269 | } |
269 | 270 | ||
270 | int bzImage64_probe(const char *buf, unsigned long len) | 271 | static int bzImage64_probe(const char *buf, unsigned long len) |
271 | { | 272 | { |
272 | int ret = -ENOEXEC; | 273 | int ret = -ENOEXEC; |
273 | struct setup_header *header; | 274 | struct setup_header *header; |
@@ -325,10 +326,10 @@ int bzImage64_probe(const char *buf, unsigned long len) | |||
325 | return ret; | 326 | return ret; |
326 | } | 327 | } |
327 | 328 | ||
328 | void *bzImage64_load(struct kimage *image, char *kernel, | 329 | static void *bzImage64_load(struct kimage *image, char *kernel, |
329 | unsigned long kernel_len, char *initrd, | 330 | unsigned long kernel_len, char *initrd, |
330 | unsigned long initrd_len, char *cmdline, | 331 | unsigned long initrd_len, char *cmdline, |
331 | unsigned long cmdline_len) | 332 | unsigned long cmdline_len) |
332 | { | 333 | { |
333 | 334 | ||
334 | struct setup_header *header; | 335 | struct setup_header *header; |
@@ -514,7 +515,7 @@ out_free_params: | |||
514 | } | 515 | } |
515 | 516 | ||
516 | /* This cleanup function is called after various segments have been loaded */ | 517 | /* This cleanup function is called after various segments have been loaded */ |
517 | int bzImage64_cleanup(void *loader_data) | 518 | static int bzImage64_cleanup(void *loader_data) |
518 | { | 519 | { |
519 | struct bzimage64_data *ldata = loader_data; | 520 | struct bzimage64_data *ldata = loader_data; |
520 | 521 | ||
@@ -528,7 +529,7 @@ int bzImage64_cleanup(void *loader_data) | |||
528 | } | 529 | } |
529 | 530 | ||
530 | #ifdef CONFIG_KEXEC_BZIMAGE_VERIFY_SIG | 531 | #ifdef CONFIG_KEXEC_BZIMAGE_VERIFY_SIG |
531 | int bzImage64_verify_sig(const char *kernel, unsigned long kernel_len) | 532 | static int bzImage64_verify_sig(const char *kernel, unsigned long kernel_len) |
532 | { | 533 | { |
533 | bool trusted; | 534 | bool trusted; |
534 | int ret; | 535 | int ret; |
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 3dd8e2c4d74a..95c3cb16af3e 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/slab.h> | 35 | #include <linux/slab.h> |
36 | #include <linux/kprobes.h> | 36 | #include <linux/kprobes.h> |
37 | #include <linux/debugfs.h> | 37 | #include <linux/debugfs.h> |
38 | #include <linux/nmi.h> | ||
38 | #include <asm/timer.h> | 39 | #include <asm/timer.h> |
39 | #include <asm/cpu.h> | 40 | #include <asm/cpu.h> |
40 | #include <asm/traps.h> | 41 | #include <asm/traps.h> |
@@ -499,6 +500,13 @@ void __init kvm_guest_init(void) | |||
499 | #else | 500 | #else |
500 | kvm_guest_cpu_init(); | 501 | kvm_guest_cpu_init(); |
501 | #endif | 502 | #endif |
503 | |||
504 | /* | ||
505 | * Hard lockup detection is enabled by default. Disable it, as guests | ||
506 | * can get false positives too easily, for example if the host is | ||
507 | * overcommitted. | ||
508 | */ | ||
509 | watchdog_enable_hardlockup_detector(false); | ||
502 | } | 510 | } |
503 | 511 | ||
504 | static noinline uint32_t __kvm_cpuid_base(void) | 512 | static noinline uint32_t __kvm_cpuid_base(void) |
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index baff1da354e0..af78e50ca6ce 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c | |||
@@ -86,6 +86,7 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr, | |||
86 | pgprot_t prot; | 86 | pgprot_t prot; |
87 | int retval; | 87 | int retval; |
88 | void __iomem *ret_addr; | 88 | void __iomem *ret_addr; |
89 | int ram_region; | ||
89 | 90 | ||
90 | /* Don't allow wraparound or zero size */ | 91 | /* Don't allow wraparound or zero size */ |
91 | last_addr = phys_addr + size - 1; | 92 | last_addr = phys_addr + size - 1; |
@@ -108,12 +109,23 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr, | |||
108 | /* | 109 | /* |
109 | * Don't allow anybody to remap normal RAM that we're using.. | 110 | * Don't allow anybody to remap normal RAM that we're using.. |
110 | */ | 111 | */ |
111 | pfn = phys_addr >> PAGE_SHIFT; | 112 | /* First check if whole region can be identified as RAM or not */ |
112 | last_pfn = last_addr >> PAGE_SHIFT; | 113 | ram_region = region_is_ram(phys_addr, size); |
113 | if (walk_system_ram_range(pfn, last_pfn - pfn + 1, NULL, | 114 | if (ram_region > 0) { |
114 | __ioremap_check_ram) == 1) | 115 | WARN_ONCE(1, "ioremap on RAM at 0x%lx - 0x%lx\n", |
116 | (unsigned long int)phys_addr, | ||
117 | (unsigned long int)last_addr); | ||
115 | return NULL; | 118 | return NULL; |
119 | } | ||
116 | 120 | ||
121 | /* If could not be identified(-1), check page by page */ | ||
122 | if (ram_region < 0) { | ||
123 | pfn = phys_addr >> PAGE_SHIFT; | ||
124 | last_pfn = last_addr >> PAGE_SHIFT; | ||
125 | if (walk_system_ram_range(pfn, last_pfn - pfn + 1, NULL, | ||
126 | __ioremap_check_ram) == 1) | ||
127 | return NULL; | ||
128 | } | ||
117 | /* | 129 | /* |
118 | * Mappings have to be page-aligned | 130 | * Mappings have to be page-aligned |
119 | */ | 131 | */ |
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index d221374d5ce8..1a883705a12a 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c | |||
@@ -463,6 +463,42 @@ static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi) | |||
463 | return true; | 463 | return true; |
464 | } | 464 | } |
465 | 465 | ||
466 | static void __init numa_clear_kernel_node_hotplug(void) | ||
467 | { | ||
468 | int i, nid; | ||
469 | nodemask_t numa_kernel_nodes = NODE_MASK_NONE; | ||
470 | unsigned long start, end; | ||
471 | struct memblock_region *r; | ||
472 | |||
473 | /* | ||
474 | * At this time, all memory regions reserved by memblock are | ||
475 | * used by the kernel. Set the nid in memblock.reserved will | ||
476 | * mark out all the nodes the kernel resides in. | ||
477 | */ | ||
478 | for (i = 0; i < numa_meminfo.nr_blks; i++) { | ||
479 | struct numa_memblk *mb = &numa_meminfo.blk[i]; | ||
480 | |||
481 | memblock_set_node(mb->start, mb->end - mb->start, | ||
482 | &memblock.reserved, mb->nid); | ||
483 | } | ||
484 | |||
485 | /* Mark all kernel nodes. */ | ||
486 | for_each_memblock(reserved, r) | ||
487 | node_set(r->nid, numa_kernel_nodes); | ||
488 | |||
489 | /* Clear MEMBLOCK_HOTPLUG flag for memory in kernel nodes. */ | ||
490 | for (i = 0; i < numa_meminfo.nr_blks; i++) { | ||
491 | nid = numa_meminfo.blk[i].nid; | ||
492 | if (!node_isset(nid, numa_kernel_nodes)) | ||
493 | continue; | ||
494 | |||
495 | start = numa_meminfo.blk[i].start; | ||
496 | end = numa_meminfo.blk[i].end; | ||
497 | |||
498 | memblock_clear_hotplug(start, end - start); | ||
499 | } | ||
500 | } | ||
501 | |||
466 | static int __init numa_register_memblks(struct numa_meminfo *mi) | 502 | static int __init numa_register_memblks(struct numa_meminfo *mi) |
467 | { | 503 | { |
468 | unsigned long uninitialized_var(pfn_align); | 504 | unsigned long uninitialized_var(pfn_align); |
@@ -481,6 +517,15 @@ static int __init numa_register_memblks(struct numa_meminfo *mi) | |||
481 | } | 517 | } |
482 | 518 | ||
483 | /* | 519 | /* |
520 | * At very early time, the kernel have to use some memory such as | ||
521 | * loading the kernel image. We cannot prevent this anyway. So any | ||
522 | * node the kernel resides in should be un-hotpluggable. | ||
523 | * | ||
524 | * And when we come here, alloc node data won't fail. | ||
525 | */ | ||
526 | numa_clear_kernel_node_hotplug(); | ||
527 | |||
528 | /* | ||
484 | * If sections array is gonna be used for pfn -> nid mapping, check | 529 | * If sections array is gonna be used for pfn -> nid mapping, check |
485 | * whether its granularity is fine enough. | 530 | * whether its granularity is fine enough. |
486 | */ | 531 | */ |
@@ -548,41 +593,6 @@ static void __init numa_init_array(void) | |||
548 | } | 593 | } |
549 | } | 594 | } |
550 | 595 | ||
551 | static void __init numa_clear_kernel_node_hotplug(void) | ||
552 | { | ||
553 | int i, nid; | ||
554 | nodemask_t numa_kernel_nodes = NODE_MASK_NONE; | ||
555 | unsigned long start, end; | ||
556 | struct memblock_region *r; | ||
557 | |||
558 | /* | ||
559 | * At this time, all memory regions reserved by memblock are | ||
560 | * used by the kernel. Set the nid in memblock.reserved will | ||
561 | * mark out all the nodes the kernel resides in. | ||
562 | */ | ||
563 | for (i = 0; i < numa_meminfo.nr_blks; i++) { | ||
564 | struct numa_memblk *mb = &numa_meminfo.blk[i]; | ||
565 | memblock_set_node(mb->start, mb->end - mb->start, | ||
566 | &memblock.reserved, mb->nid); | ||
567 | } | ||
568 | |||
569 | /* Mark all kernel nodes. */ | ||
570 | for_each_memblock(reserved, r) | ||
571 | node_set(r->nid, numa_kernel_nodes); | ||
572 | |||
573 | /* Clear MEMBLOCK_HOTPLUG flag for memory in kernel nodes. */ | ||
574 | for (i = 0; i < numa_meminfo.nr_blks; i++) { | ||
575 | nid = numa_meminfo.blk[i].nid; | ||
576 | if (!node_isset(nid, numa_kernel_nodes)) | ||
577 | continue; | ||
578 | |||
579 | start = numa_meminfo.blk[i].start; | ||
580 | end = numa_meminfo.blk[i].end; | ||
581 | |||
582 | memblock_clear_hotplug(start, end - start); | ||
583 | } | ||
584 | } | ||
585 | |||
586 | static int __init numa_init(int (*init_func)(void)) | 596 | static int __init numa_init(int (*init_func)(void)) |
587 | { | 597 | { |
588 | int i; | 598 | int i; |
@@ -637,15 +647,6 @@ static int __init numa_init(int (*init_func)(void)) | |||
637 | } | 647 | } |
638 | numa_init_array(); | 648 | numa_init_array(); |
639 | 649 | ||
640 | /* | ||
641 | * At very early time, the kernel have to use some memory such as | ||
642 | * loading the kernel image. We cannot prevent this anyway. So any | ||
643 | * node the kernel resides in should be un-hotpluggable. | ||
644 | * | ||
645 | * And when we come here, numa_init() won't fail. | ||
646 | */ | ||
647 | numa_clear_kernel_node_hotplug(); | ||
648 | |||
649 | return 0; | 650 | return 0; |
650 | } | 651 | } |
651 | 652 | ||
diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile index 899dd2454256..f52e033557c9 100644 --- a/arch/x86/purgatory/Makefile +++ b/arch/x86/purgatory/Makefile | |||
@@ -18,8 +18,9 @@ $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE | |||
18 | 18 | ||
19 | targets += kexec-purgatory.c | 19 | targets += kexec-purgatory.c |
20 | 20 | ||
21 | CMD_BIN2C = $(objtree)/scripts/basic/bin2c | ||
21 | quiet_cmd_bin2c = BIN2C $@ | 22 | quiet_cmd_bin2c = BIN2C $@ |
22 | cmd_bin2c = cat $(obj)/purgatory.ro | $(objtree)/scripts/basic/bin2c kexec_purgatory > $(obj)/kexec-purgatory.c | 23 | cmd_bin2c = $(CMD_BIN2C) kexec_purgatory < $< > $@ |
23 | 24 | ||
24 | $(obj)/kexec-purgatory.c: $(obj)/purgatory.ro FORCE | 25 | $(obj)/kexec-purgatory.c: $(obj)/purgatory.ro FORCE |
25 | $(call if_changed,bin2c) | 26 | $(call if_changed,bin2c) |