aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-03-22 12:04:48 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-22 12:04:48 -0400
commit95211279c5ad00a317c98221d7e4365e02f20836 (patch)
tree2ddc8625378d2915b8c96392f3cf6663b705ed55 /kernel/fork.c
parent5375871d432ae9fc581014ac117b96aaee3cd0c7 (diff)
parent12724850e8064f64b6223d26d78c0597c742c65a (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.c22
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
515static 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}
547EXPORT_SYMBOL_GPL(__mmdrop); 562EXPORT_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;