Merge "lmkd: only mlockall() if enabled"
am: 7ee579f6ea
Change-Id: I9e4eedbef5caddca9d7f5452dc483a73cb7de728
This commit is contained in:
commit
f062a2cd9e
2 changed files with 27 additions and 18 deletions
|
@ -3,8 +3,8 @@ cc_binary {
|
|||
|
||||
srcs: ["lmkd.c"],
|
||||
shared_libs: [
|
||||
"liblog",
|
||||
"libcutils",
|
||||
"liblog",
|
||||
],
|
||||
local_include_dirs: ["include"],
|
||||
cflags: ["-Werror"],
|
||||
|
|
43
lmkd/lmkd.c
43
lmkd/lmkd.c
|
@ -29,8 +29,8 @@
|
|||
#include <sys/eventfd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysinfo.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <cutils/properties.h>
|
||||
|
@ -77,7 +77,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 */
|
||||
|
@ -326,8 +326,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;
|
||||
|
@ -393,8 +394,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);
|
||||
|
@ -1205,21 +1207,28 @@ int main(int argc __unused, char **argv __unused) {
|
|||
kill_timeout_ms =
|
||||
(unsigned long)property_get_int32("ro.lmk.kill_timeout_ms", 0);
|
||||
|
||||
// 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();
|
||||
}
|
||||
|
||||
ALOGI("exiting");
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue