aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-10-13 21:54:50 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-13 21:54:50 -0400
commitdfe2c6dcc8ca2cdc662d7c0473e9811b72ef3370 (patch)
tree9ed639a08c16322cdf136d576f42df5b97cd1549 /arch
parenta45d572841a24db02a62cf05e1157c35fdd3705b (diff)
parent64e455079e1bd7787cc47be30b7f601ce682a5f6 (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.dtsi2
-rw-r--r--arch/arm/mach-pxa/lpd270.c12
-rw-r--r--arch/frv/mm/extable.c2
-rw-r--r--arch/ia64/include/asm/sections.h2
-rw-r--r--arch/x86/kernel/cpu/common.c4
-rw-r--r--arch/x86/kernel/crash.c10
-rw-r--r--arch/x86/kernel/kexec-bzimage64.c15
-rw-r--r--arch/x86/kernel/kvm.c8
-rw-r--r--arch/x86/mm/ioremap.c20
-rw-r--r--arch/x86/mm/numa.c89
-rw-r--r--arch/x86/purgatory/Makefile3
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
417static int __init lpd270_set_lcd(char *str) 417static 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
9extern const struct exception_table_entry __attribute__((aligned(8))) __start___ex_table[];
10extern const struct exception_table_entry __attribute__((aligned(8))) __stop___ex_table[];
11extern const void __memset_end, __memset_user_error_lr, __memset_user_error_handler; 9extern const void __memset_end, __memset_user_error_lr, __memset_user_error_handler;
12extern const void __memcpy_end, __memcpy_user_error_lr, __memcpy_user_error_handler; 10extern const void __memcpy_end, __memcpy_user_error_lr, __memcpy_user_error_handler;
13extern spinlock_t modlist_lock; 11extern 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
13extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; 13extern char __phys_per_cpu_start[];
14#ifdef CONFIG_SMP 14#ifdef CONFIG_SMP
15extern char __cpu0_per_cpu[]; 15extern 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 */
968static void syscall32_cpu_init(void) 969static 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
981void enable_sep_cpu(void) 983void 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
270int bzImage64_probe(const char *buf, unsigned long len) 271static 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
328void *bzImage64_load(struct kimage *image, char *kernel, 329static 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 */
517int bzImage64_cleanup(void *loader_data) 518static 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
531int bzImage64_verify_sig(const char *kernel, unsigned long kernel_len) 532static 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
504static noinline uint32_t __kvm_cpuid_base(void) 512static 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
466static 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
466static int __init numa_register_memblks(struct numa_meminfo *mi) 502static 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
551static 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
586static int __init numa_init(int (*init_func)(void)) 596static 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
19targets += kexec-purgatory.c 19targets += kexec-purgatory.c
20 20
21CMD_BIN2C = $(objtree)/scripts/basic/bin2c
21quiet_cmd_bin2c = BIN2C $@ 22quiet_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)