diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-29 20:29:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-29 20:29:08 -0400 |
commit | 73154383f02998fdd6a1f26c7ef33bfc3785a101 (patch) | |
tree | 85a4c10cf32172b99aed01e95ded7269afcc9d7d /arch/mips | |
parent | 362ed48dee509abe24cf84b7e137c7a29a8f4d2d (diff) | |
parent | ca0dde97178e75ed1370b8616326f5496a803d65 (diff) |
Merge branch 'akpm' (incoming from Andrew)
Merge first batch of fixes from Andrew Morton:
- A couple of kthread changes
- A few minor audit patches
- A number of fbdev patches. Florian remains AWOL so I'm picking up
some of these.
- A few kbuild things
- ocfs2 updates
- Almost all of the MM queue
(And in the meantime, I already have the second big batch from Andrew
pending in my mailbox ;^)
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (149 commits)
memcg: take reference before releasing rcu_read_lock
mem hotunplug: fix kfree() of bootmem memory
mmKconfig: add an option to disable bounce
mm, nobootmem: do memset() after memblock_reserve()
mm, nobootmem: clean-up of free_low_memory_core_early()
fs/buffer.c: remove unnecessary init operation after allocating buffer_head.
numa, cpu hotplug: change links of CPU and node when changing node number by onlining CPU
mm: fix memory_hotplug.c printk format warning
mm: swap: mark swap pages writeback before queueing for direct IO
swap: redirty page if page write fails on swap file
mm, memcg: give exiting processes access to memory reserves
thp: fix huge zero page logic for page with pfn == 0
memcg: avoid accessing memcg after releasing reference
fs: fix fsync() error reporting
memblock: fix missing comment of memblock_insert_region()
mm: Remove unused parameter of pages_correctly_reserved()
firmware, memmap: fix firmware_map_entry leak
mm/vmstat: add note on safety of drain_zonestat
mm: thp: add split tail pages to shrink page list in page reclaim
mm: allow for outstanding swap writeback accounting
...
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/include/asm/hugetlb.h | 1 | ||||
-rw-r--r-- | arch/mips/mm/init.c | 37 | ||||
-rw-r--r-- | arch/mips/sgi-ip27/ip27-memory.c | 4 |
3 files changed, 13 insertions, 29 deletions
diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h index ef99db994c2f..fe0d15d32660 100644 --- a/arch/mips/include/asm/hugetlb.h +++ b/arch/mips/include/asm/hugetlb.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #define __ASM_HUGETLB_H | 10 | #define __ASM_HUGETLB_H |
11 | 11 | ||
12 | #include <asm/page.h> | 12 | #include <asm/page.h> |
13 | #include <asm-generic/hugetlb.h> | ||
13 | 14 | ||
14 | 15 | ||
15 | static inline int is_hugepage_only_range(struct mm_struct *mm, | 16 | static inline int is_hugepage_only_range(struct mm_struct *mm, |
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 67929251286c..3d0346dbccf4 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c | |||
@@ -77,10 +77,9 @@ EXPORT_SYMBOL_GPL(empty_zero_page); | |||
77 | /* | 77 | /* |
78 | * Not static inline because used by IP27 special magic initialization code | 78 | * Not static inline because used by IP27 special magic initialization code |
79 | */ | 79 | */ |
80 | unsigned long setup_zero_pages(void) | 80 | void setup_zero_pages(void) |
81 | { | 81 | { |
82 | unsigned int order; | 82 | unsigned int order, i; |
83 | unsigned long size; | ||
84 | struct page *page; | 83 | struct page *page; |
85 | 84 | ||
86 | if (cpu_has_vce) | 85 | if (cpu_has_vce) |
@@ -94,15 +93,10 @@ unsigned long setup_zero_pages(void) | |||
94 | 93 | ||
95 | page = virt_to_page((void *)empty_zero_page); | 94 | page = virt_to_page((void *)empty_zero_page); |
96 | split_page(page, order); | 95 | split_page(page, order); |
97 | while (page < virt_to_page((void *)(empty_zero_page + (PAGE_SIZE << order)))) { | 96 | for (i = 0; i < (1 << order); i++, page++) |
98 | SetPageReserved(page); | 97 | mark_page_reserved(page); |
99 | page++; | ||
100 | } | ||
101 | |||
102 | size = PAGE_SIZE << order; | ||
103 | zero_page_mask = (size - 1) & PAGE_MASK; | ||
104 | 98 | ||
105 | return 1UL << order; | 99 | zero_page_mask = ((PAGE_SIZE << order) - 1) & PAGE_MASK; |
106 | } | 100 | } |
107 | 101 | ||
108 | #ifdef CONFIG_MIPS_MT_SMTC | 102 | #ifdef CONFIG_MIPS_MT_SMTC |
@@ -380,7 +374,7 @@ void __init mem_init(void) | |||
380 | high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT); | 374 | high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT); |
381 | 375 | ||
382 | totalram_pages += free_all_bootmem(); | 376 | totalram_pages += free_all_bootmem(); |
383 | totalram_pages -= setup_zero_pages(); /* Setup zeroed pages. */ | 377 | setup_zero_pages(); /* Setup zeroed pages. */ |
384 | 378 | ||
385 | reservedpages = ram = 0; | 379 | reservedpages = ram = 0; |
386 | for (tmp = 0; tmp < max_low_pfn; tmp++) | 380 | for (tmp = 0; tmp < max_low_pfn; tmp++) |
@@ -399,12 +393,8 @@ void __init mem_init(void) | |||
399 | SetPageReserved(page); | 393 | SetPageReserved(page); |
400 | continue; | 394 | continue; |
401 | } | 395 | } |
402 | ClearPageReserved(page); | 396 | free_highmem_page(page); |
403 | init_page_count(page); | ||
404 | __free_page(page); | ||
405 | totalhigh_pages++; | ||
406 | } | 397 | } |
407 | totalram_pages += totalhigh_pages; | ||
408 | num_physpages += totalhigh_pages; | 398 | num_physpages += totalhigh_pages; |
409 | #endif | 399 | #endif |
410 | 400 | ||
@@ -440,11 +430,8 @@ void free_init_pages(const char *what, unsigned long begin, unsigned long end) | |||
440 | struct page *page = pfn_to_page(pfn); | 430 | struct page *page = pfn_to_page(pfn); |
441 | void *addr = phys_to_virt(PFN_PHYS(pfn)); | 431 | void *addr = phys_to_virt(PFN_PHYS(pfn)); |
442 | 432 | ||
443 | ClearPageReserved(page); | ||
444 | init_page_count(page); | ||
445 | memset(addr, POISON_FREE_INITMEM, PAGE_SIZE); | 433 | memset(addr, POISON_FREE_INITMEM, PAGE_SIZE); |
446 | __free_page(page); | 434 | free_reserved_page(page); |
447 | totalram_pages++; | ||
448 | } | 435 | } |
449 | printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10); | 436 | printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10); |
450 | } | 437 | } |
@@ -452,18 +439,14 @@ void free_init_pages(const char *what, unsigned long begin, unsigned long end) | |||
452 | #ifdef CONFIG_BLK_DEV_INITRD | 439 | #ifdef CONFIG_BLK_DEV_INITRD |
453 | void free_initrd_mem(unsigned long start, unsigned long end) | 440 | void free_initrd_mem(unsigned long start, unsigned long end) |
454 | { | 441 | { |
455 | free_init_pages("initrd memory", | 442 | free_reserved_area(start, end, POISON_FREE_INITMEM, "initrd"); |
456 | virt_to_phys((void *)start), | ||
457 | virt_to_phys((void *)end)); | ||
458 | } | 443 | } |
459 | #endif | 444 | #endif |
460 | 445 | ||
461 | void __init_refok free_initmem(void) | 446 | void __init_refok free_initmem(void) |
462 | { | 447 | { |
463 | prom_free_prom_memory(); | 448 | prom_free_prom_memory(); |
464 | free_init_pages("unused kernel memory", | 449 | free_initmem_default(POISON_FREE_INITMEM); |
465 | __pa_symbol(&__init_begin), | ||
466 | __pa_symbol(&__init_end)); | ||
467 | } | 450 | } |
468 | 451 | ||
469 | #ifndef CONFIG_MIPS_PGD_C0_CONTEXT | 452 | #ifndef CONFIG_MIPS_PGD_C0_CONTEXT |
diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c index 3505d08ff2fd..5f2bddb1860e 100644 --- a/arch/mips/sgi-ip27/ip27-memory.c +++ b/arch/mips/sgi-ip27/ip27-memory.c | |||
@@ -457,7 +457,7 @@ void __init prom_free_prom_memory(void) | |||
457 | /* We got nothing to free here ... */ | 457 | /* We got nothing to free here ... */ |
458 | } | 458 | } |
459 | 459 | ||
460 | extern unsigned long setup_zero_pages(void); | 460 | extern void setup_zero_pages(void); |
461 | 461 | ||
462 | void __init paging_init(void) | 462 | void __init paging_init(void) |
463 | { | 463 | { |
@@ -492,7 +492,7 @@ void __init mem_init(void) | |||
492 | totalram_pages += free_all_bootmem_node(NODE_DATA(node)); | 492 | totalram_pages += free_all_bootmem_node(NODE_DATA(node)); |
493 | } | 493 | } |
494 | 494 | ||
495 | totalram_pages -= setup_zero_pages(); /* This comes from node 0 */ | 495 | setup_zero_pages(); /* This comes from node 0 */ |
496 | 496 | ||
497 | codesize = (unsigned long) &_etext - (unsigned long) &_text; | 497 | codesize = (unsigned long) &_etext - (unsigned long) &_text; |
498 | datasize = (unsigned long) &_edata - (unsigned long) &_etext; | 498 | datasize = (unsigned long) &_edata - (unsigned long) &_etext; |