lmkd: Add hook for when there are no killable processes

Add a hook that is invoked when there are no killable processes at any
priority. This allows ARCVM to send VMMMS's no kill candidates message,
which prevents thrashing without having to wait on a balloon stall.

Bug: 362383831
Test: cq
Change-Id: Iffb680a78025bd201932bd805ceeecfe07b1fac9
This commit is contained in:
David Stevens 2024-08-23 15:08:21 +09:00
parent 4c589f32f5
commit d256df3c5f
2 changed files with 10 additions and 0 deletions

View File

@ -50,6 +50,11 @@ bool lmkd_init_hook();
*/ */
int lmkd_free_memory_before_kill_hook(struct proc* procp, int proc_size_pages, int lmkd_free_memory_before_kill_hook(struct proc* procp, int proc_size_pages,
int proc_oom_score, int kill_reason); int proc_oom_score, int kill_reason);
/*
* Invoked when LMKD has no more candidates to kill at any priority. The hook
* may attempt to free memory elsewhere to try to preserve system stability.
*/
void lmkd_no_kill_candidates_hook();
#else /* LMKD_USE_HOOKS */ #else /* LMKD_USE_HOOKS */
@ -59,6 +64,7 @@ static inline int lmkd_free_memory_before_kill_hook(struct proc*, int, int,
int) { int) {
return 0; return 0;
} }
static inline void lmkd_no_kill_candidates_hook() {}
#endif /* LMKD_USE_HOOKS */ #endif /* LMKD_USE_HOOKS */

View File

@ -3248,6 +3248,10 @@ do_kill:
pages_freed = find_and_kill_process(min_score_adj, NULL, &mi, &wi, &curr_tm, NULL); pages_freed = find_and_kill_process(min_score_adj, NULL, &mi, &wi, &curr_tm, NULL);
if (pages_freed == 0 && min_score_adj == 0) {
lmkd_no_kill_candidates_hook();
}
if (pages_freed == 0) { if (pages_freed == 0) {
/* Rate limit kill reports when nothing was reclaimed */ /* Rate limit kill reports when nothing was reclaimed */
if (get_time_diff_ms(&last_report_tm, &curr_tm) < FAIL_REPORT_RLIMIT_MS) { if (get_time_diff_ms(&last_report_tm, &curr_tm) < FAIL_REPORT_RLIMIT_MS) {