android_kernel_xiaomi_sm8350/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 Update kernel/.gitignore with new auto-generated files 2008-02-09 23:27:01 -08:00
acct.c bsd_acct: using task_struct->tgid is not right in pid-namespaces 2008-03-24 19:22:20 -07:00
audit_tree.c Introduce path_put() 2008-02-14 21:13:33 -08:00
audit.c Audit: internally use the new LSM audit hooks 2008-04-19 09:52:37 +10:00
audit.h SELinux: use new audit hooks, remove redundant exports 2008-04-19 09:53:46 +10:00
auditfilter.c Audit: Final renamings and cleanup 2008-04-19 09:59:43 +10:00
auditsc.c Audit: Final renamings and cleanup 2008-04-19 09:59:43 +10:00
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 generic: reduce stack pressure in sched_affinity 2008-04-19 19:44:59 +02:00
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_compat __user annotation 2008-03-30 14:18:41 -07:00
futex.c NULL noise: fs/*, mm/*, kernel/* 2008-03-30 14:18:41 -07:00
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 rcu: move PREEMPT_RCU config option back under PREEMPT 2008-03-10 18:01:20 -07:00
kexec.c vmcoreinfo: add page flags values 2008-04-28 08:58:23 -07:00
kfifo.c
kgdb.c kgdb: always use icache flush for sw breakpoints 2008-04-17 20:05:43 +02:00
kmod.c generic: use new set_cpus_allowed_ptr function 2008-04-19 19:44:58 +02:00
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 latencytop: optimize LT_BACKTRACEDEPTH loops a bit 2008-04-19 19:44:57 +02:00
lockdep_internals.h
lockdep_proc.c
lockdep.c Subject: lockdep: include all lock classes in all_lock_classes 2008-02-25 23:03:02 +01:00
Makefile Merge git://git.kernel.org/pub/scm/linux/kernel/git/mingo/linux-2.6-kgdb 2008-04-18 08:37:01 -07:00
marker.c kernel: explicitly include required header files under kernel/ 2008-04-29 08:06:04 -07:00
module.c kernel: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:17:04 -04:00
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 Add new string functions strict_strto* and convert kernel params to use them 2008-02-08 09:22:41 -08:00
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: fix shadowed variables 2008-04-17 12:22:30 +02:00
posix-timers.c kernel: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:17:04 -04:00
printk.c isolate ratelimit from printk.c for other use 2008-04-29 08:06:06 -07:00
profile.c kernel: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:17:04 -04:00
ptrace.c ptrace: conditionalize compat_ptrace_request 2008-04-28 14:14:36 -07:00
rcuclassic.c
rcupdate.c rcupdate: fix comment 2008-02-13 16:21:18 -08:00
rcupreempt_trace.c
rcupreempt.c generic: reduce stack pressure in sched_affinity 2008-04-19 19:44:59 +02:00
rcutorture.c kernel: explicitly include required header files under kernel/ 2008-04-29 08:06:04 -07:00
relay.c relay: set an spd_release() hook for splice 2008-03-26 12:04:09 +01:00
res_counter.c CGroup API files: add res_counter_read_u64() 2008-04-29 08:06:08 -07:00
resource.c PCI: clean up resource alignment management 2008-04-20 21:47:08 -07:00
rtmutex_common.h Don't operate with pid_t in rtmutex tester 2008-02-08 09:22:41 -08:00
rtmutex-debug.c Don't operate with pid_t in rtmutex tester 2008-02-08 09:22:41 -08:00
rtmutex-debug.h
rtmutex-tester.c
rtmutex.c hrtimer: more hrtimer_init_sleeper() fallout. 2008-02-13 15:45:36 +01:00
rtmutex.h
rwsem.c
sched_debug.c sched: build fix 2008-04-19 19:45:01 +02:00
sched_fair.c sched: debug: show a weight tree 2008-04-19 19:45:00 +02:00
sched_features.h sched: /debug/sched_features 2008-04-19 19:45:00 +02:00
sched_idletask.c
sched_rt.c sched: rt-group: optimize dequeue_rt_stack 2008-04-19 19:45:00 +02:00
sched_stats.h cpumask: use new cpus_scnprintf function 2008-04-19 19:44:59 +02:00
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 Improve semaphore documentation 2008-04-17 10:43:01 -04:00
signal.c trivial: small cleanups 2008-04-21 22:15:06 +00:00
softirq.c tasklets: execute tasklets in the same order they were queued 2008-04-19 19:44:58 +02:00
softlockup.c softlockup: fix task state setting 2008-02-29 18:46:53 +01:00
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 sched: rt-group: synchonised bandwidth period 2008-04-19 19:44:57 +02:00
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 timeconst.pl: correct reversal of USEC_TO_HZ and HZ_TO_USEC 2008-02-12 14:29:26 -08:00
timer.c timers: simplify lockdep handling 2008-04-17 12:22:31 +02:00
tsacct.c
uid16.c asmlinkage_protect replaces prevent_tail_call 2008-04-10 17:28:26 -07:00
user_namespace.c eCryptfs: make key module subsystem respect namespaces 2008-04-29 08:06:07 -07:00
user.c sched: fix the task_group hierarchy for UID grouping 2008-04-19 19:45:00 +02:00
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 timer_list: add annotations to workqueue.c 2008-04-17 12:22:30 +02:00