diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-22 12:04:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-22 12:04:48 -0400 |
commit | 95211279c5ad00a317c98221d7e4365e02f20836 (patch) | |
tree | 2ddc8625378d2915b8c96392f3cf6663b705ed55 /kernel/fork.c | |
parent | 5375871d432ae9fc581014ac117b96aaee3cd0c7 (diff) | |
parent | 12724850e8064f64b6223d26d78c0597c742c65a (diff) |
Merge branch 'akpm' (Andrew's patch-bomb)
Merge first batch of patches from Andrew Morton:
"A few misc things and all the MM queue"
* emailed from Andrew Morton <akpm@linux-foundation.org>: (92 commits)
memcg: avoid THP split in task migration
thp: add HPAGE_PMD_* definitions for !CONFIG_TRANSPARENT_HUGEPAGE
memcg: clean up existing move charge code
mm/memcontrol.c: remove unnecessary 'break' in mem_cgroup_read()
mm/memcontrol.c: remove redundant BUG_ON() in mem_cgroup_usage_unregister_event()
mm/memcontrol.c: s/stealed/stolen/
memcg: fix performance of mem_cgroup_begin_update_page_stat()
memcg: remove PCG_FILE_MAPPED
memcg: use new logic for page stat accounting
memcg: remove PCG_MOVE_LOCK flag from page_cgroup
memcg: simplify move_account() check
memcg: remove EXPORT_SYMBOL(mem_cgroup_update_page_stat)
memcg: kill dead prev_priority stubs
memcg: remove PCG_CACHE page_cgroup flag
memcg: let css_get_next() rely upon rcu_read_lock()
cgroup: revert ss_id_lock to spinlock
idr: make idr_get_next() good for rcu_read_lock()
memcg: remove unnecessary thp check in page stat accounting
memcg: remove redundant returns
memcg: enum lru_list lru
...
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 26a7138bb849..37674ec55cde 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -512,6 +512,23 @@ static struct mm_struct *mm_init(struct mm_struct *mm, struct task_struct *p) | |||
512 | return NULL; | 512 | return NULL; |
513 | } | 513 | } |
514 | 514 | ||
515 | static void check_mm(struct mm_struct *mm) | ||
516 | { | ||
517 | int i; | ||
518 | |||
519 | for (i = 0; i < NR_MM_COUNTERS; i++) { | ||
520 | long x = atomic_long_read(&mm->rss_stat.count[i]); | ||
521 | |||
522 | if (unlikely(x)) | ||
523 | printk(KERN_ALERT "BUG: Bad rss-counter state " | ||
524 | "mm:%p idx:%d val:%ld\n", mm, i, x); | ||
525 | } | ||
526 | |||
527 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||
528 | VM_BUG_ON(mm->pmd_huge_pte); | ||
529 | #endif | ||
530 | } | ||
531 | |||
515 | /* | 532 | /* |
516 | * Allocate and initialize an mm_struct. | 533 | * Allocate and initialize an mm_struct. |
517 | */ | 534 | */ |
@@ -539,9 +556,7 @@ void __mmdrop(struct mm_struct *mm) | |||
539 | mm_free_pgd(mm); | 556 | mm_free_pgd(mm); |
540 | destroy_context(mm); | 557 | destroy_context(mm); |
541 | mmu_notifier_mm_destroy(mm); | 558 | mmu_notifier_mm_destroy(mm); |
542 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 559 | check_mm(mm); |
543 | VM_BUG_ON(mm->pmd_huge_pte); | ||
544 | #endif | ||
545 | free_mm(mm); | 560 | free_mm(mm); |
546 | } | 561 | } |
547 | EXPORT_SYMBOL_GPL(__mmdrop); | 562 | EXPORT_SYMBOL_GPL(__mmdrop); |
@@ -1223,6 +1238,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1223 | #ifdef CONFIG_CPUSETS | 1238 | #ifdef CONFIG_CPUSETS |
1224 | p->cpuset_mem_spread_rotor = NUMA_NO_NODE; | 1239 | p->cpuset_mem_spread_rotor = NUMA_NO_NODE; |
1225 | p->cpuset_slab_spread_rotor = NUMA_NO_NODE; | 1240 | p->cpuset_slab_spread_rotor = NUMA_NO_NODE; |
1241 | seqcount_init(&p->mems_allowed_seq); | ||
1226 | #endif | 1242 | #endif |
1227 | #ifdef CONFIG_TRACE_IRQFLAGS | 1243 | #ifdef CONFIG_TRACE_IRQFLAGS |
1228 | p->irq_events = 0; | 1244 | p->irq_events = 0; |