drivers: android: lowmemorykiller: a 7 commits cluster
[*] drivers: android: lowmemorykiller: change default debug_level to 1
	The select...to kill messages are not very useful when not debugging
	the lowmemorykiller itself. After the change to check TIF_MEMDIE
	instead of using a task notifer this message can also get very
	noisy.

	Commit: https://github.com/androidarmv6/android_kernel_samsung_bcm21553-common/commit/193069870dfac3c1b43e7576fe8abf42949b36da

[*] drivers: android: lowmemorykiller: no tasklist_lock grabbing
	Grabbing tasklist_lock has its disadvantages, i.e. it blocks
	process creation and destruction. If there are lots of processes,
	blocking doesn't sound as a great idea.

	For LMK, it is sufficient to surround tasks list traverse with
	rcu_read_{,un}lock().

	From now on using force_sig() is not safe, as it can race with an
	already exiting task, so we use send_sig() now. As a downside, it
	won't kill PID namespace init processes, but that's not what we
	want anyway.

	Commit: https://github.com/androidarmv6/android_kernel_samsung_bcm21553-common/commit/ab0f63e61aa02285c6c76e8060ac0886b5330c38

[*] drivers: android: lowmemorykiller: fixed warnings
	This patch fixes some 80 chatacters limit warnings in the lowmemorykiller.c file

	Commit: https://github.com/androidarmv6/android_kernel_samsung_bcm21553-common/commit/72efe236339202f3d37875795eed4d7817a11af2

[*] drivers: android: lowmemorykiller: compact memory when killing processes
	Memory compaction is never invoked on Android because we avoid swap
	and don't allocate huge pages. Fix it by invoking compaction from the LMK when
	a process is killed to reduce memory fragmentation.

	Commit: https://github.com/androidarmv6/android_kernel_samsung_bcm21553-common/commit/e5bcd0960ba521155507624a7faf780d4818a379

[*] drivers: android: lowmemorykiller: use asynchronous compaction

	Commit: https://github.com/androidarmv6/android_kernel_samsung_bcm21553-common/commit/0d9d3412bdcb3e8f5552d3222200710c99866163

[*] drivers: android: lowmemorykiller: skip already freed memory

	Commit: https://github.com/androidarmv6/android_kernel_samsung_bcm21553-common/commit/a238f08f9a9e5f1ec164700b9f436d1a8172df05

[*] drivers: android: lowmemorykiller: implement task's adj rbtree
	Based on the current LMK implementation, LMK has to scan all processes to
	select the correct task to kill during low memory.
	The basic idea for the optimization is to :
	queue all tasks with oom_score_adj priority, and then LMK just selects the
	proper task from the queue(rbtree) to kill.

	performance improvement:
	the current implementation: average time to find a task to kill : 1004us
	the optimized implementation: average time to find a task to kill: 43us

	squished another 3 commits:

	staging: android: lowmemorykiller: select a new task to kill
	Under certain circumstances, a process may take time to handle a SIGKILL.
	When lowmemkiller is called again shortly after, it would pick the same
	process to kill over and over, so that we cann't get free memory for long time.

	Solution is to check fatal_signal_pending() on the selected task, and if it's
	already pending, select a new task to kill.

	staging: android: lmk: skip if killed by lmk
	A task can be selected to kill when it's already exiting. Sending
	signal to the task at that state won't set TIF_SIGPENDING for it.
	After that, every task including threads in the exiting task itself
	running into lmk will compete for the mutex, then spend some time
	waiting for the exiting task to release memory or try to send signal
	to the same task again.
	We want the exiting task to exit as early as possible but it's slowed
	down greatly by the mutex and waiting. Skip lmk if current thread
	group leader is exiting and is killed by lmk. Also delegate TIF_MEMDIE
	to current task.

	staging: android: lmk: check TIF directly
	When trying to fix that lmk can't kill an exiting task
	(commit 895304e
	(CR) staging: android: lmk: skip if killed by lmk),
	additional check was added for the TIF_MEMDIE flag.
	However the task lock has already been taken when examining
	the task. The same helper function which tries to grab the
	task lock again will be deadlocked.
	Change to check the thread flag of thread group leader directly.

	Commit: https://github.com/androidarmv6/android_kernel_samsung_bcm21553-common/commit/69d012c3e60267813cf524221893ef74154fe05c