diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/include/asm/pgtable-3level.h | 50 | ||||
-rw-r--r-- | arch/x86/kernel/e820.c | 53 | ||||
-rw-r--r-- | arch/x86/kernel/mpparse.c | 10 | ||||
-rw-r--r-- | arch/x86/kernel/setup.c | 16 | ||||
-rw-r--r-- | arch/x86/mm/init.c | 16 | ||||
-rw-r--r-- | arch/x86/mm/numa.c | 32 | ||||
-rw-r--r-- | arch/x86/mm/numa_emulation.c | 4 | ||||
-rw-r--r-- | arch/x86/mm/pat.c | 42 | ||||
-rw-r--r-- | arch/x86/mm/srat.c | 5 |
9 files changed, 140 insertions, 88 deletions
diff --git a/arch/x86/include/asm/pgtable-3level.h b/arch/x86/include/asm/pgtable-3level.h index effff47a3c82..43876f16caf1 100644 --- a/arch/x86/include/asm/pgtable-3level.h +++ b/arch/x86/include/asm/pgtable-3level.h | |||
@@ -31,6 +31,56 @@ static inline void native_set_pte(pte_t *ptep, pte_t pte) | |||
31 | ptep->pte_low = pte.pte_low; | 31 | ptep->pte_low = pte.pte_low; |
32 | } | 32 | } |
33 | 33 | ||
34 | #define pmd_read_atomic pmd_read_atomic | ||
35 | /* | ||
36 | * pte_offset_map_lock on 32bit PAE kernels was reading the pmd_t with | ||
37 | * a "*pmdp" dereference done by gcc. Problem is, in certain places | ||
38 | * where pte_offset_map_lock is called, concurrent page faults are | ||
39 | * allowed, if the mmap_sem is hold for reading. An example is mincore | ||
40 | * vs page faults vs MADV_DONTNEED. On the page fault side | ||
41 | * pmd_populate rightfully does a set_64bit, but if we're reading the | ||
42 | * pmd_t with a "*pmdp" on the mincore side, a SMP race can happen | ||
43 | * because gcc will not read the 64bit of the pmd atomically. To fix | ||
44 | * this all places running pmd_offset_map_lock() while holding the | ||
45 | * mmap_sem in read mode, shall read the pmdp pointer using this | ||
46 | * function to know if the pmd is null nor not, and in turn to know if | ||
47 | * they can run pmd_offset_map_lock or pmd_trans_huge or other pmd | ||
48 | * operations. | ||
49 | * | ||
50 | * Without THP if the mmap_sem is hold for reading, the | ||
51 | * pmd can only transition from null to not null while pmd_read_atomic runs. | ||
52 | * So there's no need of literally reading it atomically. | ||
53 | * | ||
54 | * With THP if the mmap_sem is hold for reading, the pmd can become | ||
55 | * THP or null or point to a pte (and in turn become "stable") at any | ||
56 | * time under pmd_read_atomic, so it's mandatory to read it atomically | ||
57 | * with cmpxchg8b. | ||
58 | */ | ||
59 | #ifndef CONFIG_TRANSPARENT_HUGEPAGE | ||
60 | static inline pmd_t pmd_read_atomic(pmd_t *pmdp) | ||
61 | { | ||
62 | pmdval_t ret; | ||
63 | u32 *tmp = (u32 *)pmdp; | ||
64 | |||
65 | ret = (pmdval_t) (*tmp); | ||
66 | if (ret) { | ||
67 | /* | ||
68 | * If the low part is null, we must not read the high part | ||
69 | * or we can end up with a partial pmd. | ||
70 | */ | ||
71 | smp_rmb(); | ||
72 | ret |= ((pmdval_t)*(tmp + 1)) << 32; | ||
73 | } | ||
74 | |||
75 | return (pmd_t) { ret }; | ||
76 | } | ||
77 | #else /* CONFIG_TRANSPARENT_HUGEPAGE */ | ||
78 | static inline pmd_t pmd_read_atomic(pmd_t *pmdp) | ||
79 | { | ||
80 | return (pmd_t) { atomic64_read((atomic64_t *)pmdp) }; | ||
81 | } | ||
82 | #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ | ||
83 | |||
34 | static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte) | 84 | static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte) |
35 | { | 85 | { |
36 | set_64bit((unsigned long long *)(ptep), native_pte_val(pte)); | 86 | set_64bit((unsigned long long *)(ptep), native_pte_val(pte)); |
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index 62d61e9976eb..41857970517f 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c | |||
@@ -113,7 +113,9 @@ static void __init __e820_add_region(struct e820map *e820x, u64 start, u64 size, | |||
113 | int x = e820x->nr_map; | 113 | int x = e820x->nr_map; |
114 | 114 | ||
115 | if (x >= ARRAY_SIZE(e820x->map)) { | 115 | if (x >= ARRAY_SIZE(e820x->map)) { |
116 | printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); | 116 | printk(KERN_ERR "e820: too many entries; ignoring [mem %#010llx-%#010llx]\n", |
117 | (unsigned long long) start, | ||
118 | (unsigned long long) (start + size - 1)); | ||
117 | return; | 119 | return; |
118 | } | 120 | } |
119 | 121 | ||
@@ -133,19 +135,19 @@ static void __init e820_print_type(u32 type) | |||
133 | switch (type) { | 135 | switch (type) { |
134 | case E820_RAM: | 136 | case E820_RAM: |
135 | case E820_RESERVED_KERN: | 137 | case E820_RESERVED_KERN: |
136 | printk(KERN_CONT "(usable)"); | 138 | printk(KERN_CONT "usable"); |
137 | break; | 139 | break; |
138 | case E820_RESERVED: | 140 | case E820_RESERVED: |
139 | printk(KERN_CONT "(reserved)"); | 141 | printk(KERN_CONT "reserved"); |
140 | break; | 142 | break; |
141 | case E820_ACPI: | 143 | case E820_ACPI: |
142 | printk(KERN_CONT "(ACPI data)"); | 144 | printk(KERN_CONT "ACPI data"); |
143 | break; | 145 | break; |
144 | case E820_NVS: | 146 | case E820_NVS: |
145 | printk(KERN_CONT "(ACPI NVS)"); | 147 | printk(KERN_CONT "ACPI NVS"); |
146 | break; | 148 | break; |
147 | case E820_UNUSABLE: | 149 | case E820_UNUSABLE: |
148 | printk(KERN_CONT "(unusable)"); | 150 | printk(KERN_CONT "unusable"); |
149 | break; | 151 | break; |
150 | default: | 152 | default: |
151 | printk(KERN_CONT "type %u", type); | 153 | printk(KERN_CONT "type %u", type); |
@@ -158,10 +160,10 @@ void __init e820_print_map(char *who) | |||
158 | int i; | 160 | int i; |
159 | 161 | ||
160 | for (i = 0; i < e820.nr_map; i++) { | 162 | for (i = 0; i < e820.nr_map; i++) { |
161 | printk(KERN_INFO " %s: %016Lx - %016Lx ", who, | 163 | printk(KERN_INFO "%s: [mem %#018Lx-%#018Lx] ", who, |
162 | (unsigned long long) e820.map[i].addr, | 164 | (unsigned long long) e820.map[i].addr, |
163 | (unsigned long long) | 165 | (unsigned long long) |
164 | (e820.map[i].addr + e820.map[i].size)); | 166 | (e820.map[i].addr + e820.map[i].size - 1)); |
165 | e820_print_type(e820.map[i].type); | 167 | e820_print_type(e820.map[i].type); |
166 | printk(KERN_CONT "\n"); | 168 | printk(KERN_CONT "\n"); |
167 | } | 169 | } |
@@ -428,9 +430,8 @@ static u64 __init __e820_update_range(struct e820map *e820x, u64 start, | |||
428 | size = ULLONG_MAX - start; | 430 | size = ULLONG_MAX - start; |
429 | 431 | ||
430 | end = start + size; | 432 | end = start + size; |
431 | printk(KERN_DEBUG "e820 update range: %016Lx - %016Lx ", | 433 | printk(KERN_DEBUG "e820: update [mem %#010Lx-%#010Lx] ", |
432 | (unsigned long long) start, | 434 | (unsigned long long) start, (unsigned long long) (end - 1)); |
433 | (unsigned long long) end); | ||
434 | e820_print_type(old_type); | 435 | e820_print_type(old_type); |
435 | printk(KERN_CONT " ==> "); | 436 | printk(KERN_CONT " ==> "); |
436 | e820_print_type(new_type); | 437 | e820_print_type(new_type); |
@@ -509,9 +510,8 @@ u64 __init e820_remove_range(u64 start, u64 size, unsigned old_type, | |||
509 | size = ULLONG_MAX - start; | 510 | size = ULLONG_MAX - start; |
510 | 511 | ||
511 | end = start + size; | 512 | end = start + size; |
512 | printk(KERN_DEBUG "e820 remove range: %016Lx - %016Lx ", | 513 | printk(KERN_DEBUG "e820: remove [mem %#010Lx-%#010Lx] ", |
513 | (unsigned long long) start, | 514 | (unsigned long long) start, (unsigned long long) (end - 1)); |
514 | (unsigned long long) end); | ||
515 | if (checktype) | 515 | if (checktype) |
516 | e820_print_type(old_type); | 516 | e820_print_type(old_type); |
517 | printk(KERN_CONT "\n"); | 517 | printk(KERN_CONT "\n"); |
@@ -567,7 +567,7 @@ void __init update_e820(void) | |||
567 | if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &nr_map)) | 567 | if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &nr_map)) |
568 | return; | 568 | return; |
569 | e820.nr_map = nr_map; | 569 | e820.nr_map = nr_map; |
570 | printk(KERN_INFO "modified physical RAM map:\n"); | 570 | printk(KERN_INFO "e820: modified physical RAM map:\n"); |
571 | e820_print_map("modified"); | 571 | e820_print_map("modified"); |
572 | } | 572 | } |
573 | static void __init update_e820_saved(void) | 573 | static void __init update_e820_saved(void) |
@@ -637,8 +637,8 @@ __init void e820_setup_gap(void) | |||
637 | if (!found) { | 637 | if (!found) { |
638 | gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024; | 638 | gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024; |
639 | printk(KERN_ERR | 639 | printk(KERN_ERR |
640 | "PCI: Warning: Cannot find a gap in the 32bit address range\n" | 640 | "e820: cannot find a gap in the 32bit address range\n" |
641 | "PCI: Unassigned devices with 32bit resource registers may break!\n"); | 641 | "e820: PCI devices with unassigned 32bit BARs may break!\n"); |
642 | } | 642 | } |
643 | #endif | 643 | #endif |
644 | 644 | ||
@@ -648,8 +648,8 @@ __init void e820_setup_gap(void) | |||
648 | pci_mem_start = gapstart; | 648 | pci_mem_start = gapstart; |
649 | 649 | ||
650 | printk(KERN_INFO | 650 | printk(KERN_INFO |
651 | "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n", | 651 | "e820: [mem %#010lx-%#010lx] available for PCI devices\n", |
652 | pci_mem_start, gapstart, gapsize); | 652 | gapstart, gapstart + gapsize - 1); |
653 | } | 653 | } |
654 | 654 | ||
655 | /** | 655 | /** |
@@ -667,7 +667,7 @@ void __init parse_e820_ext(struct setup_data *sdata) | |||
667 | extmap = (struct e820entry *)(sdata->data); | 667 | extmap = (struct e820entry *)(sdata->data); |
668 | __append_e820_map(extmap, entries); | 668 | __append_e820_map(extmap, entries); |
669 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); | 669 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); |
670 | printk(KERN_INFO "extended physical RAM map:\n"); | 670 | printk(KERN_INFO "e820: extended physical RAM map:\n"); |
671 | e820_print_map("extended"); | 671 | e820_print_map("extended"); |
672 | } | 672 | } |
673 | 673 | ||
@@ -734,7 +734,7 @@ u64 __init early_reserve_e820(u64 size, u64 align) | |||
734 | addr = __memblock_alloc_base(size, align, MEMBLOCK_ALLOC_ACCESSIBLE); | 734 | addr = __memblock_alloc_base(size, align, MEMBLOCK_ALLOC_ACCESSIBLE); |
735 | if (addr) { | 735 | if (addr) { |
736 | e820_update_range_saved(addr, size, E820_RAM, E820_RESERVED); | 736 | e820_update_range_saved(addr, size, E820_RAM, E820_RESERVED); |
737 | printk(KERN_INFO "update e820_saved for early_reserve_e820\n"); | 737 | printk(KERN_INFO "e820: update e820_saved for early_reserve_e820\n"); |
738 | update_e820_saved(); | 738 | update_e820_saved(); |
739 | } | 739 | } |
740 | 740 | ||
@@ -784,7 +784,7 @@ static unsigned long __init e820_end_pfn(unsigned long limit_pfn, unsigned type) | |||
784 | if (last_pfn > max_arch_pfn) | 784 | if (last_pfn > max_arch_pfn) |
785 | last_pfn = max_arch_pfn; | 785 | last_pfn = max_arch_pfn; |
786 | 786 | ||
787 | printk(KERN_INFO "last_pfn = %#lx max_arch_pfn = %#lx\n", | 787 | printk(KERN_INFO "e820: last_pfn = %#lx max_arch_pfn = %#lx\n", |
788 | last_pfn, max_arch_pfn); | 788 | last_pfn, max_arch_pfn); |
789 | return last_pfn; | 789 | return last_pfn; |
790 | } | 790 | } |
@@ -888,7 +888,7 @@ void __init finish_e820_parsing(void) | |||
888 | early_panic("Invalid user supplied memory map"); | 888 | early_panic("Invalid user supplied memory map"); |
889 | e820.nr_map = nr; | 889 | e820.nr_map = nr; |
890 | 890 | ||
891 | printk(KERN_INFO "user-defined physical RAM map:\n"); | 891 | printk(KERN_INFO "e820: user-defined physical RAM map:\n"); |
892 | e820_print_map("user"); | 892 | e820_print_map("user"); |
893 | } | 893 | } |
894 | } | 894 | } |
@@ -996,8 +996,9 @@ void __init e820_reserve_resources_late(void) | |||
996 | end = MAX_RESOURCE_SIZE; | 996 | end = MAX_RESOURCE_SIZE; |
997 | if (start >= end) | 997 | if (start >= end) |
998 | continue; | 998 | continue; |
999 | printk(KERN_DEBUG "reserve RAM buffer: %016llx - %016llx ", | 999 | printk(KERN_DEBUG |
1000 | start, end); | 1000 | "e820: reserve RAM buffer [mem %#010llx-%#010llx]\n", |
1001 | start, end); | ||
1001 | reserve_region_with_split(&iomem_resource, start, end, | 1002 | reserve_region_with_split(&iomem_resource, start, end, |
1002 | "RAM buffer"); | 1003 | "RAM buffer"); |
1003 | } | 1004 | } |
@@ -1047,7 +1048,7 @@ void __init setup_memory_map(void) | |||
1047 | 1048 | ||
1048 | who = x86_init.resources.memory_setup(); | 1049 | who = x86_init.resources.memory_setup(); |
1049 | memcpy(&e820_saved, &e820, sizeof(struct e820map)); | 1050 | memcpy(&e820_saved, &e820, sizeof(struct e820map)); |
1050 | printk(KERN_INFO "BIOS-provided physical RAM map:\n"); | 1051 | printk(KERN_INFO "e820: BIOS-provided physical RAM map:\n"); |
1051 | e820_print_map(who); | 1052 | e820_print_map(who); |
1052 | } | 1053 | } |
1053 | 1054 | ||
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index b02d4dd6b8a3..fbca2e6223bf 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
@@ -568,8 +568,8 @@ static int __init smp_scan_config(unsigned long base, unsigned long length) | |||
568 | struct mpf_intel *mpf; | 568 | struct mpf_intel *mpf; |
569 | unsigned long mem; | 569 | unsigned long mem; |
570 | 570 | ||
571 | apic_printk(APIC_VERBOSE, "Scan SMP from %p for %ld bytes.\n", | 571 | apic_printk(APIC_VERBOSE, "Scan for SMP in [mem %#010lx-%#010lx]\n", |
572 | bp, length); | 572 | base, base + length - 1); |
573 | BUILD_BUG_ON(sizeof(*mpf) != 16); | 573 | BUILD_BUG_ON(sizeof(*mpf) != 16); |
574 | 574 | ||
575 | while (length > 0) { | 575 | while (length > 0) { |
@@ -584,8 +584,10 @@ static int __init smp_scan_config(unsigned long base, unsigned long length) | |||
584 | #endif | 584 | #endif |
585 | mpf_found = mpf; | 585 | mpf_found = mpf; |
586 | 586 | ||
587 | printk(KERN_INFO "found SMP MP-table at [%p] %llx\n", | 587 | printk(KERN_INFO "found SMP MP-table at [mem %#010llx-%#010llx] mapped at [%p]\n", |
588 | mpf, (u64)virt_to_phys(mpf)); | 588 | (unsigned long long) virt_to_phys(mpf), |
589 | (unsigned long long) virt_to_phys(mpf) + | ||
590 | sizeof(*mpf) - 1, mpf); | ||
589 | 591 | ||
590 | mem = virt_to_phys(mpf); | 592 | mem = virt_to_phys(mpf); |
591 | memblock_reserve(mem, sizeof(*mpf)); | 593 | memblock_reserve(mem, sizeof(*mpf)); |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index f2afee6a19c1..982e44f960db 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -334,8 +334,8 @@ static void __init relocate_initrd(void) | |||
334 | memblock_reserve(ramdisk_here, area_size); | 334 | memblock_reserve(ramdisk_here, area_size); |
335 | initrd_start = ramdisk_here + PAGE_OFFSET; | 335 | initrd_start = ramdisk_here + PAGE_OFFSET; |
336 | initrd_end = initrd_start + ramdisk_size; | 336 | initrd_end = initrd_start + ramdisk_size; |
337 | printk(KERN_INFO "Allocated new RAMDISK: %08llx - %08llx\n", | 337 | printk(KERN_INFO "Allocated new RAMDISK: [mem %#010llx-%#010llx]\n", |
338 | ramdisk_here, ramdisk_here + ramdisk_size); | 338 | ramdisk_here, ramdisk_here + ramdisk_size - 1); |
339 | 339 | ||
340 | q = (char *)initrd_start; | 340 | q = (char *)initrd_start; |
341 | 341 | ||
@@ -366,8 +366,8 @@ static void __init relocate_initrd(void) | |||
366 | /* high pages is not converted by early_res_to_bootmem */ | 366 | /* high pages is not converted by early_res_to_bootmem */ |
367 | ramdisk_image = boot_params.hdr.ramdisk_image; | 367 | ramdisk_image = boot_params.hdr.ramdisk_image; |
368 | ramdisk_size = boot_params.hdr.ramdisk_size; | 368 | ramdisk_size = boot_params.hdr.ramdisk_size; |
369 | printk(KERN_INFO "Move RAMDISK from %016llx - %016llx to" | 369 | printk(KERN_INFO "Move RAMDISK from [mem %#010llx-%#010llx] to" |
370 | " %08llx - %08llx\n", | 370 | " [mem %#010llx-%#010llx]\n", |
371 | ramdisk_image, ramdisk_image + ramdisk_size - 1, | 371 | ramdisk_image, ramdisk_image + ramdisk_size - 1, |
372 | ramdisk_here, ramdisk_here + ramdisk_size - 1); | 372 | ramdisk_here, ramdisk_here + ramdisk_size - 1); |
373 | } | 373 | } |
@@ -392,8 +392,8 @@ static void __init reserve_initrd(void) | |||
392 | ramdisk_size, end_of_lowmem>>1); | 392 | ramdisk_size, end_of_lowmem>>1); |
393 | } | 393 | } |
394 | 394 | ||
395 | printk(KERN_INFO "RAMDISK: %08llx - %08llx\n", ramdisk_image, | 395 | printk(KERN_INFO "RAMDISK: [mem %#010llx-%#010llx]\n", ramdisk_image, |
396 | ramdisk_end); | 396 | ramdisk_end - 1); |
397 | 397 | ||
398 | 398 | ||
399 | if (ramdisk_end <= end_of_lowmem) { | 399 | if (ramdisk_end <= end_of_lowmem) { |
@@ -906,8 +906,8 @@ void __init setup_arch(char **cmdline_p) | |||
906 | setup_bios_corruption_check(); | 906 | setup_bios_corruption_check(); |
907 | #endif | 907 | #endif |
908 | 908 | ||
909 | printk(KERN_DEBUG "initial memory mapped : 0 - %08lx\n", | 909 | printk(KERN_DEBUG "initial memory mapped: [mem 0x00000000-%#010lx]\n", |
910 | max_pfn_mapped<<PAGE_SHIFT); | 910 | (max_pfn_mapped<<PAGE_SHIFT) - 1); |
911 | 911 | ||
912 | setup_trampolines(); | 912 | setup_trampolines(); |
913 | 913 | ||
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index 319b6f2fb8b9..97141c26a13a 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c | |||
@@ -84,8 +84,9 @@ static void __init find_early_table_space(struct map_range *mr, unsigned long en | |||
84 | pgt_buf_end = pgt_buf_start; | 84 | pgt_buf_end = pgt_buf_start; |
85 | pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT); | 85 | pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT); |
86 | 86 | ||
87 | printk(KERN_DEBUG "kernel direct mapping tables up to %lx @ %lx-%lx\n", | 87 | printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx]\n", |
88 | end, pgt_buf_start << PAGE_SHIFT, pgt_buf_top << PAGE_SHIFT); | 88 | end - 1, pgt_buf_start << PAGE_SHIFT, |
89 | (pgt_buf_top << PAGE_SHIFT) - 1); | ||
89 | } | 90 | } |
90 | 91 | ||
91 | void __init native_pagetable_reserve(u64 start, u64 end) | 92 | void __init native_pagetable_reserve(u64 start, u64 end) |
@@ -132,7 +133,8 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, | |||
132 | int nr_range, i; | 133 | int nr_range, i; |
133 | int use_pse, use_gbpages; | 134 | int use_pse, use_gbpages; |
134 | 135 | ||
135 | printk(KERN_INFO "init_memory_mapping: %016lx-%016lx\n", start, end); | 136 | printk(KERN_INFO "init_memory_mapping: [mem %#010lx-%#010lx]\n", |
137 | start, end - 1); | ||
136 | 138 | ||
137 | #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK) | 139 | #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK) |
138 | /* | 140 | /* |
@@ -251,8 +253,8 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, | |||
251 | } | 253 | } |
252 | 254 | ||
253 | for (i = 0; i < nr_range; i++) | 255 | for (i = 0; i < nr_range; i++) |
254 | printk(KERN_DEBUG " %010lx - %010lx page %s\n", | 256 | printk(KERN_DEBUG " [mem %#010lx-%#010lx] page %s\n", |
255 | mr[i].start, mr[i].end, | 257 | mr[i].start, mr[i].end - 1, |
256 | (mr[i].page_size_mask & (1<<PG_LEVEL_1G))?"1G":( | 258 | (mr[i].page_size_mask & (1<<PG_LEVEL_1G))?"1G":( |
257 | (mr[i].page_size_mask & (1<<PG_LEVEL_2M))?"2M":"4k")); | 259 | (mr[i].page_size_mask & (1<<PG_LEVEL_2M))?"2M":"4k")); |
258 | 260 | ||
@@ -350,8 +352,8 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) | |||
350 | * create a kernel page fault: | 352 | * create a kernel page fault: |
351 | */ | 353 | */ |
352 | #ifdef CONFIG_DEBUG_PAGEALLOC | 354 | #ifdef CONFIG_DEBUG_PAGEALLOC |
353 | printk(KERN_INFO "debug: unmapping init memory %08lx..%08lx\n", | 355 | printk(KERN_INFO "debug: unmapping init [mem %#010lx-%#010lx]\n", |
354 | begin, end); | 356 | begin, end - 1); |
355 | set_memory_np(begin, (end - begin) >> PAGE_SHIFT); | 357 | set_memory_np(begin, (end - begin) >> PAGE_SHIFT); |
356 | #else | 358 | #else |
357 | /* | 359 | /* |
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 19d3fa08b119..2d125be1bae9 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c | |||
@@ -141,8 +141,8 @@ static int __init numa_add_memblk_to(int nid, u64 start, u64 end, | |||
141 | 141 | ||
142 | /* whine about and ignore invalid blks */ | 142 | /* whine about and ignore invalid blks */ |
143 | if (start > end || nid < 0 || nid >= MAX_NUMNODES) { | 143 | if (start > end || nid < 0 || nid >= MAX_NUMNODES) { |
144 | pr_warning("NUMA: Warning: invalid memblk node %d (%Lx-%Lx)\n", | 144 | pr_warning("NUMA: Warning: invalid memblk node %d [mem %#010Lx-%#010Lx]\n", |
145 | nid, start, end); | 145 | nid, start, end - 1); |
146 | return 0; | 146 | return 0; |
147 | } | 147 | } |
148 | 148 | ||
@@ -210,8 +210,8 @@ static void __init setup_node_data(int nid, u64 start, u64 end) | |||
210 | 210 | ||
211 | start = roundup(start, ZONE_ALIGN); | 211 | start = roundup(start, ZONE_ALIGN); |
212 | 212 | ||
213 | printk(KERN_INFO "Initmem setup node %d %016Lx-%016Lx\n", | 213 | printk(KERN_INFO "Initmem setup node %d [mem %#010Lx-%#010Lx]\n", |
214 | nid, start, end); | 214 | nid, start, end - 1); |
215 | 215 | ||
216 | /* | 216 | /* |
217 | * Allocate node data. Try remap allocator first, node-local | 217 | * Allocate node data. Try remap allocator first, node-local |
@@ -232,7 +232,7 @@ static void __init setup_node_data(int nid, u64 start, u64 end) | |||
232 | } | 232 | } |
233 | 233 | ||
234 | /* report and initialize */ | 234 | /* report and initialize */ |
235 | printk(KERN_INFO " NODE_DATA [%016Lx - %016Lx]%s\n", | 235 | printk(KERN_INFO " NODE_DATA [mem %#010Lx-%#010Lx]%s\n", |
236 | nd_pa, nd_pa + nd_size - 1, remapped ? " (remapped)" : ""); | 236 | nd_pa, nd_pa + nd_size - 1, remapped ? " (remapped)" : ""); |
237 | tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); | 237 | tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); |
238 | if (!remapped && tnid != nid) | 238 | if (!remapped && tnid != nid) |
@@ -291,14 +291,14 @@ int __init numa_cleanup_meminfo(struct numa_meminfo *mi) | |||
291 | */ | 291 | */ |
292 | if (bi->end > bj->start && bi->start < bj->end) { | 292 | if (bi->end > bj->start && bi->start < bj->end) { |
293 | if (bi->nid != bj->nid) { | 293 | if (bi->nid != bj->nid) { |
294 | pr_err("NUMA: node %d (%Lx-%Lx) overlaps with node %d (%Lx-%Lx)\n", | 294 | pr_err("NUMA: node %d [mem %#010Lx-%#010Lx] overlaps with node %d [mem %#010Lx-%#010Lx]\n", |
295 | bi->nid, bi->start, bi->end, | 295 | bi->nid, bi->start, bi->end - 1, |
296 | bj->nid, bj->start, bj->end); | 296 | bj->nid, bj->start, bj->end - 1); |
297 | return -EINVAL; | 297 | return -EINVAL; |
298 | } | 298 | } |
299 | pr_warning("NUMA: Warning: node %d (%Lx-%Lx) overlaps with itself (%Lx-%Lx)\n", | 299 | pr_warning("NUMA: Warning: node %d [mem %#010Lx-%#010Lx] overlaps with itself [mem %#010Lx-%#010Lx]\n", |
300 | bi->nid, bi->start, bi->end, | 300 | bi->nid, bi->start, bi->end - 1, |
301 | bj->start, bj->end); | 301 | bj->start, bj->end - 1); |
302 | } | 302 | } |
303 | 303 | ||
304 | /* | 304 | /* |
@@ -320,9 +320,9 @@ int __init numa_cleanup_meminfo(struct numa_meminfo *mi) | |||
320 | } | 320 | } |
321 | if (k < mi->nr_blks) | 321 | if (k < mi->nr_blks) |
322 | continue; | 322 | continue; |
323 | printk(KERN_INFO "NUMA: Node %d [%Lx,%Lx) + [%Lx,%Lx) -> [%Lx,%Lx)\n", | 323 | printk(KERN_INFO "NUMA: Node %d [mem %#010Lx-%#010Lx] + [mem %#010Lx-%#010Lx] -> [mem %#010Lx-%#010Lx]\n", |
324 | bi->nid, bi->start, bi->end, bj->start, bj->end, | 324 | bi->nid, bi->start, bi->end - 1, bj->start, |
325 | start, end); | 325 | bj->end - 1, start, end - 1); |
326 | bi->start = start; | 326 | bi->start = start; |
327 | bi->end = end; | 327 | bi->end = end; |
328 | numa_remove_memblk_from(j--, mi); | 328 | numa_remove_memblk_from(j--, mi); |
@@ -616,8 +616,8 @@ static int __init dummy_numa_init(void) | |||
616 | { | 616 | { |
617 | printk(KERN_INFO "%s\n", | 617 | printk(KERN_INFO "%s\n", |
618 | numa_off ? "NUMA turned off" : "No NUMA configuration found"); | 618 | numa_off ? "NUMA turned off" : "No NUMA configuration found"); |
619 | printk(KERN_INFO "Faking a node at %016Lx-%016Lx\n", | 619 | printk(KERN_INFO "Faking a node at [mem %#018Lx-%#018Lx]\n", |
620 | 0LLU, PFN_PHYS(max_pfn)); | 620 | 0LLU, PFN_PHYS(max_pfn) - 1); |
621 | 621 | ||
622 | node_set(0, numa_nodes_parsed); | 622 | node_set(0, numa_nodes_parsed); |
623 | numa_add_memblk(0, 0, PFN_PHYS(max_pfn)); | 623 | numa_add_memblk(0, 0, PFN_PHYS(max_pfn)); |
diff --git a/arch/x86/mm/numa_emulation.c b/arch/x86/mm/numa_emulation.c index 871dd8868170..dbbbb47260cc 100644 --- a/arch/x86/mm/numa_emulation.c +++ b/arch/x86/mm/numa_emulation.c | |||
@@ -68,8 +68,8 @@ static int __init emu_setup_memblk(struct numa_meminfo *ei, | |||
68 | numa_remove_memblk_from(phys_blk, pi); | 68 | numa_remove_memblk_from(phys_blk, pi); |
69 | } | 69 | } |
70 | 70 | ||
71 | printk(KERN_INFO "Faking node %d at %016Lx-%016Lx (%LuMB)\n", nid, | 71 | printk(KERN_INFO "Faking node %d at [mem %#018Lx-%#018Lx] (%LuMB)\n", |
72 | eb->start, eb->end, (eb->end - eb->start) >> 20); | 72 | nid, eb->start, eb->end - 1, (eb->end - eb->start) >> 20); |
73 | return 0; | 73 | return 0; |
74 | } | 74 | } |
75 | 75 | ||
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index f6ff57b7efa5..f11729fd019c 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c | |||
@@ -209,9 +209,8 @@ static int reserve_ram_pages_type(u64 start, u64 end, unsigned long req_type, | |||
209 | page = pfn_to_page(pfn); | 209 | page = pfn_to_page(pfn); |
210 | type = get_page_memtype(page); | 210 | type = get_page_memtype(page); |
211 | if (type != -1) { | 211 | if (type != -1) { |
212 | printk(KERN_INFO "reserve_ram_pages_type failed " | 212 | printk(KERN_INFO "reserve_ram_pages_type failed [mem %#010Lx-%#010Lx], track 0x%lx, req 0x%lx\n", |
213 | "0x%Lx-0x%Lx, track 0x%lx, req 0x%lx\n", | 213 | start, end - 1, type, req_type); |
214 | start, end, type, req_type); | ||
215 | if (new_type) | 214 | if (new_type) |
216 | *new_type = type; | 215 | *new_type = type; |
217 | 216 | ||
@@ -314,9 +313,9 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
314 | 313 | ||
315 | err = rbt_memtype_check_insert(new, new_type); | 314 | err = rbt_memtype_check_insert(new, new_type); |
316 | if (err) { | 315 | if (err) { |
317 | printk(KERN_INFO "reserve_memtype failed 0x%Lx-0x%Lx, " | 316 | printk(KERN_INFO "reserve_memtype failed [mem %#010Lx-%#010Lx], track %s, req %s\n", |
318 | "track %s, req %s\n", | 317 | start, end - 1, |
319 | start, end, cattr_name(new->type), cattr_name(req_type)); | 318 | cattr_name(new->type), cattr_name(req_type)); |
320 | kfree(new); | 319 | kfree(new); |
321 | spin_unlock(&memtype_lock); | 320 | spin_unlock(&memtype_lock); |
322 | 321 | ||
@@ -325,8 +324,8 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
325 | 324 | ||
326 | spin_unlock(&memtype_lock); | 325 | spin_unlock(&memtype_lock); |
327 | 326 | ||
328 | dprintk("reserve_memtype added 0x%Lx-0x%Lx, track %s, req %s, ret %s\n", | 327 | dprintk("reserve_memtype added [mem %#010Lx-%#010Lx], track %s, req %s, ret %s\n", |
329 | start, end, cattr_name(new->type), cattr_name(req_type), | 328 | start, end - 1, cattr_name(new->type), cattr_name(req_type), |
330 | new_type ? cattr_name(*new_type) : "-"); | 329 | new_type ? cattr_name(*new_type) : "-"); |
331 | 330 | ||
332 | return err; | 331 | return err; |
@@ -360,14 +359,14 @@ int free_memtype(u64 start, u64 end) | |||
360 | spin_unlock(&memtype_lock); | 359 | spin_unlock(&memtype_lock); |
361 | 360 | ||
362 | if (!entry) { | 361 | if (!entry) { |
363 | printk(KERN_INFO "%s:%d freeing invalid memtype %Lx-%Lx\n", | 362 | printk(KERN_INFO "%s:%d freeing invalid memtype [mem %#010Lx-%#010Lx]\n", |
364 | current->comm, current->pid, start, end); | 363 | current->comm, current->pid, start, end - 1); |
365 | return -EINVAL; | 364 | return -EINVAL; |
366 | } | 365 | } |
367 | 366 | ||
368 | kfree(entry); | 367 | kfree(entry); |
369 | 368 | ||
370 | dprintk("free_memtype request 0x%Lx-0x%Lx\n", start, end); | 369 | dprintk("free_memtype request [mem %#010Lx-%#010Lx]\n", start, end - 1); |
371 | 370 | ||
372 | return 0; | 371 | return 0; |
373 | } | 372 | } |
@@ -491,9 +490,8 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size) | |||
491 | 490 | ||
492 | while (cursor < to) { | 491 | while (cursor < to) { |
493 | if (!devmem_is_allowed(pfn)) { | 492 | if (!devmem_is_allowed(pfn)) { |
494 | printk(KERN_INFO | 493 | printk(KERN_INFO "Program %s tried to access /dev/mem between [mem %#010Lx-%#010Lx]\n", |
495 | "Program %s tried to access /dev/mem between %Lx->%Lx.\n", | 494 | current->comm, from, to - 1); |
496 | current->comm, from, to); | ||
497 | return 0; | 495 | return 0; |
498 | } | 496 | } |
499 | cursor += PAGE_SIZE; | 497 | cursor += PAGE_SIZE; |
@@ -554,12 +552,11 @@ int kernel_map_sync_memtype(u64 base, unsigned long size, unsigned long flags) | |||
554 | size; | 552 | size; |
555 | 553 | ||
556 | if (ioremap_change_attr((unsigned long)__va(base), id_sz, flags) < 0) { | 554 | if (ioremap_change_attr((unsigned long)__va(base), id_sz, flags) < 0) { |
557 | printk(KERN_INFO | 555 | printk(KERN_INFO "%s:%d ioremap_change_attr failed %s " |
558 | "%s:%d ioremap_change_attr failed %s " | 556 | "for [mem %#010Lx-%#010Lx]\n", |
559 | "for %Lx-%Lx\n", | ||
560 | current->comm, current->pid, | 557 | current->comm, current->pid, |
561 | cattr_name(flags), | 558 | cattr_name(flags), |
562 | base, (unsigned long long)(base + size)); | 559 | base, (unsigned long long)(base + size-1)); |
563 | return -EINVAL; | 560 | return -EINVAL; |
564 | } | 561 | } |
565 | return 0; | 562 | return 0; |
@@ -591,12 +588,11 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot, | |||
591 | 588 | ||
592 | flags = lookup_memtype(paddr); | 589 | flags = lookup_memtype(paddr); |
593 | if (want_flags != flags) { | 590 | if (want_flags != flags) { |
594 | printk(KERN_WARNING | 591 | printk(KERN_WARNING "%s:%d map pfn RAM range req %s for [mem %#010Lx-%#010Lx], got %s\n", |
595 | "%s:%d map pfn RAM range req %s for %Lx-%Lx, got %s\n", | ||
596 | current->comm, current->pid, | 592 | current->comm, current->pid, |
597 | cattr_name(want_flags), | 593 | cattr_name(want_flags), |
598 | (unsigned long long)paddr, | 594 | (unsigned long long)paddr, |
599 | (unsigned long long)(paddr + size), | 595 | (unsigned long long)(paddr + size - 1), |
600 | cattr_name(flags)); | 596 | cattr_name(flags)); |
601 | *vma_prot = __pgprot((pgprot_val(*vma_prot) & | 597 | *vma_prot = __pgprot((pgprot_val(*vma_prot) & |
602 | (~_PAGE_CACHE_MASK)) | | 598 | (~_PAGE_CACHE_MASK)) | |
@@ -614,11 +610,11 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot, | |||
614 | !is_new_memtype_allowed(paddr, size, want_flags, flags)) { | 610 | !is_new_memtype_allowed(paddr, size, want_flags, flags)) { |
615 | free_memtype(paddr, paddr + size); | 611 | free_memtype(paddr, paddr + size); |
616 | printk(KERN_ERR "%s:%d map pfn expected mapping type %s" | 612 | printk(KERN_ERR "%s:%d map pfn expected mapping type %s" |
617 | " for %Lx-%Lx, got %s\n", | 613 | " for [mem %#010Lx-%#010Lx], got %s\n", |
618 | current->comm, current->pid, | 614 | current->comm, current->pid, |
619 | cattr_name(want_flags), | 615 | cattr_name(want_flags), |
620 | (unsigned long long)paddr, | 616 | (unsigned long long)paddr, |
621 | (unsigned long long)(paddr + size), | 617 | (unsigned long long)(paddr + size - 1), |
622 | cattr_name(flags)); | 618 | cattr_name(flags)); |
623 | return -EINVAL; | 619 | return -EINVAL; |
624 | } | 620 | } |
diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c index efb5b4b93711..732af3a96183 100644 --- a/arch/x86/mm/srat.c +++ b/arch/x86/mm/srat.c | |||
@@ -176,8 +176,9 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma) | |||
176 | return; | 176 | return; |
177 | } | 177 | } |
178 | 178 | ||
179 | printk(KERN_INFO "SRAT: Node %u PXM %u %Lx-%Lx\n", node, pxm, | 179 | printk(KERN_INFO "SRAT: Node %u PXM %u [mem %#010Lx-%#010Lx]\n", |
180 | start, end); | 180 | node, pxm, |
181 | (unsigned long long) start, (unsigned long long) end - 1); | ||
181 | } | 182 | } |
182 | 183 | ||
183 | void __init acpi_numa_arch_fixup(void) {} | 184 | void __init acpi_numa_arch_fixup(void) {} |