diff --git a/lmkd.cpp b/lmkd.cpp index 1daf198..b258f27 100644 --- a/lmkd.cpp +++ b/lmkd.cpp @@ -2253,9 +2253,11 @@ struct zone_watermarks { * Returns lowest breached watermark or WMARK_NONE. */ static enum zone_watermark get_lowest_watermark(union meminfo *mi, - struct zone_watermarks *watermarks) + struct zone_watermarks *watermarks, + long margin) { int64_t nr_free_pages = mi->field.nr_free_pages - mi->field.cma_free; + int64_t high_wmark = (watermarks->high_wmark * margin) / 100; if (nr_free_pages < watermarks->min_wmark) { return WMARK_MIN; @@ -2263,7 +2265,7 @@ static enum zone_watermark get_lowest_watermark(union meminfo *mi, if (nr_free_pages < watermarks->low_wmark) { return WMARK_LOW; } - if (nr_free_pages < watermarks->high_wmark) { + if (nr_free_pages < high_wmark) { return WMARK_HIGH; } return WMARK_NONE; @@ -2429,7 +2431,7 @@ static void mp_event_psi(int data, uint32_t events, struct polling_params *poll_ } /* Find out which watermark is breached if any */ - wmark = get_lowest_watermark(&mi, &watermarks); + wmark = get_lowest_watermark(&mi, &watermarks, swap_is_low ? 115 : 100); /* * TODO: move this logic into a separate function