lmkd: fix possible long stall state am: 589b5752ee am: d65f63c7d4

Original change: https://android-review.googlesource.com/c/platform/system/memory/lmkd/+/1418830

Change-Id: Ic2598f572c456d3563e54a761806a50da3c26300
This commit is contained in:
Martin Liu 2020-09-03 16:52:09 +00:00 committed by Automerger Merge Worker
commit ff015bdf11
1 changed files with 5 additions and 7 deletions

View File

@ -3120,6 +3120,8 @@ static bool polling_paused(struct polling_params *poll_params) {
static void resume_polling(struct polling_params *poll_params, struct timespec curr_tm) { static void resume_polling(struct polling_params *poll_params, struct timespec curr_tm) {
poll_params->poll_start_tm = curr_tm; poll_params->poll_start_tm = curr_tm;
poll_params->poll_handler = poll_params->paused_handler; poll_params->poll_handler = poll_params->paused_handler;
poll_params->polling_interval_ms = PSI_POLL_PERIOD_SHORT_MS;
poll_params->paused_handler = NULL;
} }
static void call_handler(struct event_handler_info* handler_info, static void call_handler(struct event_handler_info* handler_info,
@ -3154,7 +3156,6 @@ static void call_handler(struct event_handler_info* handler_info,
if (get_time_diff_ms(&poll_params->poll_start_tm, &curr_tm) > PSI_WINDOW_SIZE_MS) { if (get_time_diff_ms(&poll_params->poll_start_tm, &curr_tm) > PSI_WINDOW_SIZE_MS) {
/* Polled for the duration of PSI window, time to stop */ /* Polled for the duration of PSI window, time to stop */
poll_params->poll_handler = NULL; poll_params->poll_handler = NULL;
poll_params->paused_handler = NULL;
} }
break; break;
} }
@ -3179,12 +3180,8 @@ static void mainloop(void) {
bool poll_now; bool poll_now;
clock_gettime(CLOCK_MONOTONIC_COARSE, &curr_tm); clock_gettime(CLOCK_MONOTONIC_COARSE, &curr_tm);
if (poll_params.poll_handler == poll_params.paused_handler) { if (poll_params.update == POLLING_RESUME) {
/* /* Just transitioned into POLLING_RESUME, poll immediately. */
* Just transitioned into POLLING_RESUME. Reset paused_handler
* and poll immediately
*/
poll_params.paused_handler = NULL;
poll_now = true; poll_now = true;
nevents = 0; nevents = 0;
} else { } else {
@ -3215,6 +3212,7 @@ static void mainloop(void) {
stop_wait_for_proc_kill(false); stop_wait_for_proc_kill(false);
if (polling_paused(&poll_params)) { if (polling_paused(&poll_params)) {
clock_gettime(CLOCK_MONOTONIC_COARSE, &curr_tm); clock_gettime(CLOCK_MONOTONIC_COARSE, &curr_tm);
poll_params.update = POLLING_RESUME;
resume_polling(&poll_params, curr_tm); resume_polling(&poll_params, curr_tm);
} }
} }