aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorYi-wei Zhao <gbjc64@motorola.com>2012-12-14 16:34:53 -0600
committerSimon Shields <keepcalm444@gmail.com>2016-06-13 14:47:39 +1000
commiteeaf4e63e771b8084bd2fecd58ec4430383e2ef5 (patch)
treea1a2467b8dbafd2cac943bc10c6be856bf0899ac /drivers
parent6f04da23b1e3aa60626bfef868ee89a77cebd637 (diff)
downloadkernel_samsung_smdk4412-eeaf4e63e771b8084bd2fecd58ec4430383e2ef5.tar.gz
kernel_samsung_smdk4412-eeaf4e63e771b8084bd2fecd58ec4430383e2ef5.tar.bz2
kernel_samsung_smdk4412-eeaf4e63e771b8084bd2fecd58ec4430383e2ef5.zip
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. Cherry-pick 5e3358093351e5d48e21250e31896b855542f22c Reviewed-on: http://gerrit.pcs.mot.com/479831 Change-Id: I53445114451ffaba293f3c7174fb0b01ed0d34b6 Signed-off-by: Tianshui Shi <kfp634@motorola.com> Reviewed-on: http://gerrit.pcs.mot.com/505410 Tested-by: Jira Key <JIRAKEY@motorola.com> Reviewed-by: Yi-Wei Zhao <gbjc64@motorola.com> Reviewed-by: Jason Hrycay <jason.hrycay@motorola.com> Reviewed-by: Jeffrey Carlyle <jeff.carlyle@motorola.com> (cherry picked from commit da093001caf06ed2296b4f79c84cc48ce713eac6)
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/android/lowmemorykiller.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/staging/android/lowmemorykiller.c b/drivers/staging/android/lowmemorykiller.c
index 754057c4079..a0731afce3f 100644
--- a/drivers/staging/android/lowmemorykiller.c
+++ b/drivers/staging/android/lowmemorykiller.c
@@ -219,6 +219,11 @@ static int lowmem_shrink(struct shrinker *s, struct shrink_control *sc)
continue;
#endif
}
+ if (fatal_signal_pending(p)) {
+ lowmem_print(2, "skip slow dying process %d\n", p->pid);
+ task_unlock(p);
+ continue;
+ }
tasksize = get_mm_rss(p->mm);
task_unlock(p);
if (tasksize <= 0)