diff --git a/lmkd/Android.bp b/lmkd/Android.bp index 58647f2ff..c7cc41b9e 100644 --- a/lmkd/Android.bp +++ b/lmkd/Android.bp @@ -3,8 +3,8 @@ cc_binary { srcs: ["lmkd.c"], shared_libs: [ - "liblog", "libcutils", + "liblog", ], static_libs: [ "libstatslogc", diff --git a/lmkd/lmkd.c b/lmkd/lmkd.c index 937a21821..1f167589d 100644 --- a/lmkd/lmkd.c +++ b/lmkd/lmkd.c @@ -29,8 +29,8 @@ #include #include #include -#include #include +#include #include #include @@ -81,7 +81,7 @@ #define SYSTEM_ADJ (-900) /* default to old in-kernel interface if no memory pressure events */ -static int use_inkernel_interface = 1; +static bool use_inkernel_interface = true; static bool has_inkernel_module; /* memory pressure levels */ @@ -335,8 +335,9 @@ static void cmd_procprio(LMKD_CTRL_PACKET packet) { return; } - if (use_inkernel_interface) + if (use_inkernel_interface) { return; + } if (params.oomadj >= 900) { soft_limit_mult = 0; @@ -402,8 +403,9 @@ static void cmd_procprio(LMKD_CTRL_PACKET packet) { static void cmd_procremove(LMKD_CTRL_PACKET packet) { struct lmk_procremove params; - if (use_inkernel_interface) + if (use_inkernel_interface) { return; + } lmkd_pack_get_procremove(packet, ¶ms); pid_remove(params.pid); @@ -1232,21 +1234,28 @@ int main(int argc __unused, char **argv __unused) { statslog_init(&log_ctx, &enable_stats_log); #endif - // MCL_ONFAULT pins pages as they fault instead of loading - // everything immediately all at once. (Which would be bad, - // because as of this writing, we have a lot of mapped pages we - // never use.) Old kernels will see MCL_ONFAULT and fail with - // EINVAL; we ignore this failure. - // - // N.B. read the man page for mlockall. MCL_CURRENT | MCL_ONFAULT - // pins ⊆ MCL_CURRENT, converging to just MCL_CURRENT as we fault - // in pages. - if (mlockall(MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT) && errno != EINVAL) - ALOGW("mlockall failed: errno=%d", errno); + if (!init()) { + if (!use_inkernel_interface) { + /* + * MCL_ONFAULT pins pages as they fault instead of loading + * everything immediately all at once. (Which would be bad, + * because as of this writing, we have a lot of mapped pages we + * never use.) Old kernels will see MCL_ONFAULT and fail with + * EINVAL; we ignore this failure. + * + * N.B. read the man page for mlockall. MCL_CURRENT | MCL_ONFAULT + * pins ⊆ MCL_CURRENT, converging to just MCL_CURRENT as we fault + * in pages. + */ + if (mlockall(MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT) && (errno != EINVAL)) { + ALOGW("mlockall failed %s", strerror(errno)); + } + + sched_setscheduler(0, SCHED_FIFO, ¶m); + } - sched_setscheduler(0, SCHED_FIFO, ¶m); - if (!init()) mainloop(); + } #ifdef LMKD_LOG_STATS statslog_destroy(&log_ctx);