Pin lmkd for real

We pin lmkd in memory so that we don't take page faults (and thus
requisition memory) while we're in the process of responding to a
low-memory condition. mlockall(2) is the right primitive for this
pinning. Previously, we used the MCL_FUTURE flag to mlockall: used
this way, mlockall doesn't actually pin all pages in memory, since
MCL_FUTURE affects only the default flags for future mappings and
doesn't affect mapping already in existence at the time of the
mlockall call --- like the lmkd executable itself.

This patch adds the MCL_CURRENT flag, which also pins all pages
already mapped.

Test: code inspection
Change-Id: I4563959367a2f0a9cadc3ea41731b7f311326685
This commit is contained in:
Daniel Colascione 2018-01-03 12:01:02 -08:00
parent bd76a3b0b5
commit 4664833104
1 changed files with 3 additions and 1 deletions

4
lmkd.c
View File

@ -900,7 +900,9 @@ int main(int argc __unused, char **argv __unused) {
downgrade_pressure = (int64_t)property_get_int32("ro.lmk.downgrade_pressure", 60);
is_go_device = property_get_bool("ro.config.low_ram", false);
mlockall(MCL_FUTURE);
if (mlockall(MCL_CURRENT | MCL_FUTURE))
ALOGW("mlockall failed: errno=%d", errno);
sched_setscheduler(0, SCHED_FIFO, &param);
if (!init())
mainloop();