linux/kernel
Balbir Singh cf475ad28a cgroups: add an owner to the mm_struct
Remove the mem_cgroup member from mm_struct and instead adds an owner.

This approach was suggested by Paul Menage.  The advantage of this approach
is that, once the mm->owner is known, using the subsystem id, the cgroup
can be determined.  It also allows several control groups that are
virtually grouped by mm_struct, to exist independent of the memory
controller i.e., without adding mem_cgroup's for each controller, to
mm_struct.

A new config option CONFIG_MM_OWNER is added and the memory resource
controller selects this config option.

This patch also adds cgroup callbacks to notify subsystems when mm->owner
changes.  The mm_cgroup_changed callback is called with the task_lock() of
the new task held and is called just prior to changing the mm->owner.

I am indebted to Paul Menage for the several reviews of this patchset and
helping me make it lighter and simpler.

This patch was tested on a powerpc box, it was compiled with both the
MM_OWNER config turned on and off.

After the thread group leader exits, it's moved to init_css_state by
cgroup_exit(), thus all future charges from runnings threads would be
redirected to the init_css_set's subsystem.

Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Cc: Pavel Emelianov <xemul@openvz.org>
Cc: Hugh Dickins <hugh@veritas.com>
Cc: Sudhir Kumar <skumar@linux.vnet.ibm.com>
Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Cc: Hirokazu Takahashi <taka@valinux.co.jp>
Cc: David Rientjes <rientjes@google.com>,
Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>
Reviewed-by: Paul Menage <menage@google.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-29 08:06:10 -07:00
..
irq kernel: explicitly include required header files under kernel/ 2008-04-29 08:06:04 -07:00
power PM/gxfb: add hook to PM console layer that allows disabling of suspend VT switch 2008-04-28 08:58:36 -07:00
time softlockup: fix NOHZ wakeup 2008-04-25 00:25:08 +02:00
.gitignore
acct.c
audit_tree.c
audit.c
audit.h
auditfilter.c
auditsc.c
backtracetest.c
bounds.c mm: Get rid of __ZONE_COUNT 2008-04-28 08:58:22 -07:00
capability.c
cgroup_debug.c CGroup API files: move "releasable" to cgroup_debug subsystem 2008-04-29 08:06:09 -07:00
cgroup.c cgroups: add an owner to the mm_struct 2008-04-29 08:06:10 -07:00
compat.c
configs.c
cpu.c cpu: fix section mismatch warning in reference to register_cpu_notifier 2008-04-29 08:06:00 -07:00
cpuset.c CGroup API files: update cpusets to use cgroup structured file API 2008-04-29 08:06:08 -07:00
delayacct.c
dma.c
exec_domain.c
exit.c cgroups: add an owner to the mm_struct 2008-04-29 08:06:10 -07:00
extable.c
fork.c cgroups: add an owner to the mm_struct 2008-04-29 08:06:10 -07:00
futex_compat.c
futex.c
hrtimer.c hrtimer: raise softirq unlocked to avoid circular lock dependency 2008-04-28 22:22:21 +02:00
itimer.c
kallsyms.c
Kconfig.hz
Kconfig.preempt
kexec.c vmcoreinfo: add page flags values 2008-04-28 08:58:23 -07:00
kfifo.c
kgdb.c
kmod.c
kprobes.c kprobes: add (un)register_jprobes for batch registration 2008-04-28 08:58:32 -07:00
ksysfs.c
kthread.c kthread: call wake_up_process() without the lock being held 2008-04-29 08:06:04 -07:00
latencytop.c
lockdep_internals.h
lockdep_proc.c
lockdep.c
Makefile
marker.c kernel: explicitly include required header files under kernel/ 2008-04-29 08:06:04 -07:00
module.c
mutex-debug.c
mutex-debug.h
mutex.c
mutex.h
notifier.c
ns_cgroup.c cgroups: kernel/ns_cgroup.c should #include <linux/nsproxy.h> 2008-04-29 08:06:07 -07:00
nsproxy.c
panic.c Taint kernel after WARN_ON(condition) 2008-04-29 08:05:59 -07:00
params.c
pid_namespace.c kernel: fix integer as NULL pointer warnings 2008-04-28 17:29:18 -07:00
pid.c
pm_qos_params.c
posix-cpu-timers.c
posix-timers.c
printk.c isolate ratelimit from printk.c for other use 2008-04-29 08:06:06 -07:00
profile.c
ptrace.c ptrace: conditionalize compat_ptrace_request 2008-04-28 14:14:36 -07:00
rcuclassic.c
rcupdate.c
rcupreempt_trace.c
rcupreempt.c
rcutorture.c kernel: explicitly include required header files under kernel/ 2008-04-29 08:06:04 -07:00
relay.c
res_counter.c CGroup API files: add res_counter_read_u64() 2008-04-29 08:06:08 -07:00
resource.c
rtmutex_common.h
rtmutex-debug.c
rtmutex-debug.h
rtmutex-tester.c
rtmutex.c
rtmutex.h
rwsem.c
sched_debug.c
sched_fair.c
sched_features.h
sched_idletask.c
sched_rt.c
sched_stats.h
sched.c CGroups _s64 files: use read_s64/write_s64 in CFS cgroup for rt_runtime file 2008-04-29 08:06:09 -07:00
seccomp.c
semaphore.c
signal.c
softirq.c
softlockup.c
spinlock.c
srcu.c
stacktrace.c
stop_machine.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/juhl/trivial 2008-04-21 16:36:46 -07:00
sys_ni.c
sys.c add RUSAGE_THREAD 2008-04-29 08:05:59 -07:00
sysctl_check.c
sysctl.c
taskstats.c
test_kprobes.c
time.c kernel: explicitly include required header files under kernel/ 2008-04-29 08:06:04 -07:00
timeconst.pl
timer.c
tsacct.c
uid16.c
user_namespace.c eCryptfs: make key module subsystem respect namespaces 2008-04-29 08:06:07 -07:00
user.c
utsname_sysctl.c
utsname.c kernel: explicitly include required header files under kernel/ 2008-04-29 08:06:04 -07:00
wait.c
workqueue.c