Allow ANDROID_LOW_MEMORY_KILLER to coexist with lmkd
For Go devices fallback to memcg/memory pressure events for LMK. Go devices will use memcg pressure events while inkernel module is disabled. Bug: 64852905 Test: tested on gobo Change-Id: I267ab00be85e324331f6c91551ba013184de817e
This commit is contained in:
parent
c72b2930d9
commit
7878c9b2ca
12
lmkd.c
12
lmkd.c
|
|
@ -70,6 +70,7 @@ enum lmk_cmd {
|
||||||
|
|
||||||
/* default to old in-kernel interface if no memory pressure events */
|
/* default to old in-kernel interface if no memory pressure events */
|
||||||
static int use_inkernel_interface = 1;
|
static int use_inkernel_interface = 1;
|
||||||
|
static bool has_inkernel_module;
|
||||||
|
|
||||||
/* memory pressure level medium event */
|
/* memory pressure level medium event */
|
||||||
static int mpevfd[2];
|
static int mpevfd[2];
|
||||||
|
|
@ -81,6 +82,7 @@ static int critical_oomadj;
|
||||||
static bool debug_process_killing;
|
static bool debug_process_killing;
|
||||||
static bool enable_pressure_upgrade;
|
static bool enable_pressure_upgrade;
|
||||||
static int64_t upgrade_pressure;
|
static int64_t upgrade_pressure;
|
||||||
|
static bool is_go_device;
|
||||||
|
|
||||||
/* control socket listen and data */
|
/* control socket listen and data */
|
||||||
static int ctrl_lfd;
|
static int ctrl_lfd;
|
||||||
|
|
@ -332,7 +334,7 @@ static void cmd_target(int ntargets, int *params) {
|
||||||
|
|
||||||
lowmem_targets_size = ntargets;
|
lowmem_targets_size = ntargets;
|
||||||
|
|
||||||
if (use_inkernel_interface) {
|
if (has_inkernel_module) {
|
||||||
char minfreestr[128];
|
char minfreestr[128];
|
||||||
char killpriostr[128];
|
char killpriostr[128];
|
||||||
|
|
||||||
|
|
@ -347,9 +349,9 @@ static void cmd_target(int ntargets, int *params) {
|
||||||
strlcat(killpriostr, ",", sizeof(killpriostr));
|
strlcat(killpriostr, ",", sizeof(killpriostr));
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(val, sizeof(val), "%d", lowmem_minfree[i]);
|
snprintf(val, sizeof(val), "%d", use_inkernel_interface ? lowmem_minfree[i] : 0);
|
||||||
strlcat(minfreestr, val, sizeof(minfreestr));
|
strlcat(minfreestr, val, sizeof(minfreestr));
|
||||||
snprintf(val, sizeof(val), "%d", lowmem_adj[i]);
|
snprintf(val, sizeof(val), "%d", use_inkernel_interface ? lowmem_adj[i] : 0);
|
||||||
strlcat(killpriostr, val, sizeof(killpriostr));
|
strlcat(killpriostr, val, sizeof(killpriostr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -821,7 +823,8 @@ static int init(void) {
|
||||||
}
|
}
|
||||||
maxevents++;
|
maxevents++;
|
||||||
|
|
||||||
use_inkernel_interface = !access(INKERNEL_MINFREE_PATH, W_OK);
|
has_inkernel_module = !access(INKERNEL_MINFREE_PATH, W_OK);
|
||||||
|
use_inkernel_interface = has_inkernel_module && !is_go_device;
|
||||||
|
|
||||||
if (use_inkernel_interface) {
|
if (use_inkernel_interface) {
|
||||||
ALOGI("Using in-kernel low memory killer interface");
|
ALOGI("Using in-kernel low memory killer interface");
|
||||||
|
|
@ -875,6 +878,7 @@ int main(int argc __unused, char **argv __unused) {
|
||||||
debug_process_killing = property_get_bool("ro.lmk.debug", false);
|
debug_process_killing = property_get_bool("ro.lmk.debug", false);
|
||||||
enable_pressure_upgrade = property_get_bool("ro.lmk.critical_upgrade", false);
|
enable_pressure_upgrade = property_get_bool("ro.lmk.critical_upgrade", false);
|
||||||
upgrade_pressure = (int64_t)property_get_int32("ro.lmk.upgrade_pressure", 50);
|
upgrade_pressure = (int64_t)property_get_int32("ro.lmk.upgrade_pressure", 50);
|
||||||
|
is_go_device = property_get_bool("ro.config.low_ram", false);
|
||||||
|
|
||||||
mlockall(MCL_FUTURE);
|
mlockall(MCL_FUTURE);
|
||||||
sched_setscheduler(0, SCHED_FIFO, ¶m);
|
sched_setscheduler(0, SCHED_FIFO, ¶m);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue