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:
parent
bd76a3b0b5
commit
4664833104
4
lmkd.c
4
lmkd.c
|
|
@ -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, ¶m);
|
||||
if (!init())
|
||||
mainloop();
|
||||
|
|
|
|||
Loading…
Reference in New Issue