ACK: [PATCH] acpi: s3: check sleep type for output messages
Colin Ian King
colin.king at canonical.com
Thu May 16 07:46:36 UTC 2019
On 10/05/2019 05:50, Alex Hung wrote:
> Recent systems may support s2idle; as a result, output messages based on
> reading from /sys/power/mem_sleep.
>
> Signed-off-by: Alex Hung <alex.hung at canonical.com>
> ---
> src/acpi/s3/s3.c | 48 ++++++++++++++++++++++++++++--------------------
> 1 file changed, 28 insertions(+), 20 deletions(-)
>
> diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
> index fa7ed52b..ff25960f 100644
> --- a/src/acpi/s3/s3.c
> +++ b/src/acpi/s3/s3.c
> @@ -32,6 +32,9 @@
>
> #define PM_SUSPEND_PMUTILS "pm-suspend"
> #define PM_SUSPEND_HYBRID_PMUTILS "pm-suspend-hybrid"
> +#define PM_SUPEND_PATH "/sys/power/mem_sleep"
> +
> +static char sleep_type[7];
>
> static int s3_multiple = 1; /* number of s3 multiple tests to run */
> static int s3_min_delay = 0; /* min time between resume and next suspend */
> @@ -51,12 +54,17 @@ static int s3_init(fwts_framework *fw)
> {
> /* Pre-init - make sure wakealarm works so that we can wake up after suspend */
> if (fwts_wakealarm_test_firing(fw, 1) != FWTS_OK) {
> - fwts_log_error(fw, "Cannot automatically wake machine up - aborting S3 test.");
> - fwts_failed(fw, LOG_LEVEL_MEDIUM, "BadWakeAlarmS3",
> - "Check if wakealarm works reliably for S3 tests.");
> + fwts_log_error(fw, "Cannot automatically wake machine up - aborting Sleep test.");
> + fwts_failed(fw, LOG_LEVEL_MEDIUM, "BadWakeAlarmSleep",
> + "Check if wakealarm works reliably for Sleep tests.");
> return FWTS_ERROR;
> }
>
> + if (fwts_get(PM_SUPEND_PATH) != NULL && strstr(fwts_get(PM_SUPEND_PATH), "[s2idle]"))
> + strncpy(sleep_type, "s2idle", strlen("s2idle") + 1);
> + else
> + strncpy(sleep_type, "S3", strlen("S3") + 1);
> +
> return FWTS_OK;
> }
>
> @@ -134,7 +142,7 @@ static int wrap_logind_do_suspend(fwts_pm_method_vars *fwts_settings,
> fwts_progress_message(fwts_settings->fw, percent, "(Suspending)");
> /* This blocks by entering a glib mainloop */
> *duration = fwts_logind_wait_for_resume_from_action(fwts_settings, action, s3_min_delay);
> - fwts_log_info(fwts_settings->fw, "S3 duration = %d.", *duration);
> + fwts_log_info(fwts_settings->fw, "%s duration = %d.", sleep_type, *duration);
> fwts_progress_message(fwts_settings->fw, percent, "(Resumed)");
>
> return *duration > 0 ? 0 : 1;
> @@ -281,7 +289,7 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>
> fwts_wakealarm_trigger(fw, delay);
>
> - /* Do S3 here */
> + /* Do S3 / S2idle here */
> status = do_suspend(fwts_settings, percent, &duration, command);
>
> fwts_log_info(fw, "pm-action returned %d after %d seconds.", status, duration);
> @@ -303,30 +311,30 @@ static int s3_do_suspend_resume(fwts_framework *fw,
> fwts_hwinfo_free(&hwinfo2);
>
> if (differences > 0) {
> - fwts_failed(fw, LOG_LEVEL_HIGH, "DevConfigDiffAfterS3",
> - "Found %d differences in device configuration during S3 cycle.", differences);
> + fwts_failed(fw, LOG_LEVEL_HIGH, "DevConfigDiffAfterSleep",
> + "Found %d differences in device configuration during %s cycle.", differences, sleep_type);
> (*hw_errors)++;
> }
> }
>
> if (s3_hook && (s3_hook_exec(fw, s3_hook) != FWTS_OK)) {
> fwts_failed(fw, LOG_LEVEL_MEDIUM, "HookScriptFailed",
> - "Error executing hook script '%s', S3 cycles "
> - "will be aborted.", s3_hook);
> + "Error executing hook script '%s', %s cycles "
> + "will be aborted.", s3_hook, sleep_type);
> (*hook_errors)++;
> }
>
> if (duration < delay) {
> (*pm_errors)++;
> fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend",
> - "Unexpected: S3 slept for %d seconds, less than the expected %d seconds.", duration, delay);
> + "Unexpected: %s slept for %d seconds, less than the expected %d seconds.", sleep_type, duration, delay);
> }
> fwts_progress_message(fw, percent, "(Checking for errors)");
> if (duration > (delay*2)) {
> int s3_C1E_enabled;
> (*pm_errors)++;
> fwts_failed(fw, LOG_LEVEL_HIGH, "LongSuspend",
> - "Unexpected: S3 much longer than expected (%d seconds).", duration);
> + "Unexpected: %s much longer than expected (%d seconds).", sleep_type, duration);
>
> s3_C1E_enabled = fwts_cpu_has_c1e();
> if (s3_C1E_enabled == -1)
> @@ -343,17 +351,17 @@ static int s3_do_suspend_resume(fwts_framework *fw,
> /* Add in error check for pm-suspend status */
> if ((status > 0) && (status < 128)) {
> (*pm_errors)++;
> - fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreS3",
> + fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreSleep",
> "pm-action failed before trying to put the system "
> "in the requested power saving state.");
> } else if (status == 128) {
> (*pm_errors)++;
> - fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateS3",
> + fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateSleep",
> "pm-action tried to put the machine in the requested "
> "power state but failed.");
> } else if (status > 128) {
> (*pm_errors)++;
> - fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedS3",
> + fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedSleep",
> "pm-action encountered an error and also failed to "
> "enter the requested power saving state.");
> }
> @@ -506,13 +514,13 @@ static int s3_test_multiple(fwts_framework *fw)
> (void)fwts_pm_debug_set(1);
>
> if (s3_multiple == 1)
> - fwts_log_info(fw, "Defaulted to 1 test, use --s3-multiple=N to run more S3 cycles\n");
> + fwts_log_info(fw, "Defaulted to 1 test, use --s3-multiple=N to run more %s cycles\n", sleep_type);
>
> for (i = 0; i < s3_multiple; i++) {
> struct timeval tv;
> int ret, percent = (i * 100) / s3_multiple;
> fwts_list *klog_pre, *klog_post, *klog_diff;
> - fwts_log_info(fw, "S3 cycle %d of %d\n",i+1,s3_multiple);
> + fwts_log_info(fw, "%s cycle %d of %d\n", sleep_type, i+1, s3_multiple);
>
> if ((klog_pre = fwts_klog_read()) == NULL)
> fwts_log_error(fw, "Cannot read kernel log.");
> @@ -521,7 +529,7 @@ static int s3_test_multiple(fwts_framework *fw)
> &hook_errors, s3_sleep_delay,
> percent);
> if (ret == FWTS_OUT_OF_MEMORY) {
> - fwts_log_error(fw, "S3 cycle %d failed - out of memory error.", i+1);
> + fwts_log_error(fw, "%s cycle %d failed - out of memory error.", sleep_type, i+1);
> fwts_klog_free(klog_pre);
> break;
> }
> @@ -567,7 +575,7 @@ static int s3_test_multiple(fwts_framework *fw)
> if (pm_debug != -1)
> (void)fwts_pm_debug_set(pm_debug);
>
> - fwts_log_info(fw, "Completed S3 cycle(s)\n");
> + fwts_log_info(fw, "Completed %s cycle(s)\n", sleep_type);
>
> if (klog_errors > 0)
> fwts_log_info(fw, "Found %d errors in kernel log.", klog_errors);
> @@ -752,12 +760,12 @@ static fwts_option s3_options[] = {
> };
>
> static fwts_framework_minor_test s3_tests[] = {
> - { s3_test_multiple, "S3 suspend/resume test." },
> + { s3_test_multiple, "Sleep suspend/resume test." },
> { NULL, NULL }
> };
>
> static fwts_framework_ops s3_ops = {
> - .description = "S3 suspend/resume test.",
> + .description = "Sleep suspend/resume test.",
> .init = s3_init,
> .minor_tests = s3_tests,
> .options = s3_options,
>
Acked-by: Colin Ian King <colin.king at canonical.com>
More information about the fwts-devel
mailing list