Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f062a2cd authored by Mark Salyzyn's avatar Mark Salyzyn Committed by android-build-merger
Browse files

Merge "lmkd: only mlockall() if enabled"

am: 7ee579f6

Change-Id: I9e4eedbef5caddca9d7f5452dc483a73cb7de728
parents d832ea81 7ee579f6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3,8 +3,8 @@ cc_binary {

    srcs: ["lmkd.c"],
    shared_libs: [
        "liblog",
        "libcutils",
        "liblog",
    ],
    local_include_dirs: ["include"],
    cflags: ["-Werror"],
+27 −18
Original line number Diff line number Diff line
@@ -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, &params);
    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, &param);
    if (!init())
        }

        mainloop();
    }

    ALOGI("exiting");
    return 0;