From 6e6d14b387c021999d3432614e45d29e27dad5e8 Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Thu, 28 Oct 2021 13:30:08 -0700 Subject: [PATCH] lmkd: fix low swap threshold failing to update after reinit lmkd calculates low swap threshold using total available swap and ro.lmk.swap_free_low_percentage property. A wrong assumption is made that both these values are constant and therefore the threshold can be calculated once and reused later. However ro.lmk.swap_free_low_percentage can be changed by the user and lmkd --reinit issued to reapply new configuration. If that happens low swap threshold will not be updated. Fix this by calculating the threshold whenever it is used. The overhead of that calculation is negligible. Bug: 203161607 Test: setprop ro.lmk.swap_free_low_percentage ; lmkd --reinit Signed-off-by: Suren Baghdasaryan Change-Id: Idff50655a75d006ea86d9ab10ca54c375c4bea46 --- lmkd.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lmkd.cpp b/lmkd.cpp index 6b15943..6911a81 100644 --- a/lmkd.cpp +++ b/lmkd.cpp @@ -2428,7 +2428,6 @@ static void mp_event_psi(int data, uint32_t events, struct polling_params *poll_ static int64_t base_file_lru; static int64_t init_pgscan_kswapd; static int64_t init_pgscan_direct; - static int64_t swap_low_threshold; static bool killing; static int thrashing_limit = thrashing_limit_pct; static struct zone_watermarks watermarks; @@ -2453,6 +2452,7 @@ static void mp_event_psi(int data, uint32_t events, struct polling_params *poll_ bool cut_thrashing_limit = false; int min_score_adj = 0; int swap_util = 0; + int64_t swap_low_threshold; long since_thrashing_reset_ms; int64_t workingset_refault_file; @@ -2501,10 +2501,10 @@ static void mp_event_psi(int data, uint32_t events, struct polling_params *poll_ /* Check free swap levels */ if (swap_free_low_percentage) { - if (!swap_low_threshold) { - swap_low_threshold = mi.field.total_swap * swap_free_low_percentage / 100; - } + swap_low_threshold = mi.field.total_swap * swap_free_low_percentage / 100; swap_is_low = mi.field.free_swap < swap_low_threshold; + } else { + swap_low_threshold = 0; } /* Identify reclaim state */