ACK: [PATCH] lib: fw_pm_method: move the sleep t_start time out of logind_on_signal (LP: #1809096)
Colin Ian King
colin.king at canonical.com
Mon Jan 14 09:14:06 UTC 2019
On 14/01/2019 09:10, Ivan Hu wrote:
> Some systems that t_start time will be recorded after resume, that causes false
> alarm, the duration be 0. This is because storing t_start is on
> logind_on_signal(), waiting for "PrepareForSleep" signal, which hasn't be
> triggled, but the system has already slept. Move the t_start recording right
> before doing the s3/s4, also move the kernel logging, so that the logs can be
> in the right place and have right time record on the dmesg, which are used to
> calculate the suspend time.
>
> Signed-off-by: Robert Liu <robert.liu at canonical.com>
> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
> ---
> src/lib/src/fwts_pm_method.c | 30 ++++++++++++++++--------------
> 1 file changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/src/lib/src/fwts_pm_method.c b/src/lib/src/fwts_pm_method.c
> index e9faede..69866bf 100644
> --- a/src/lib/src/fwts_pm_method.c
> +++ b/src/lib/src/fwts_pm_method.c
> @@ -39,9 +39,23 @@ static gboolean logind_do(gpointer data)
> */
> if (g_main_loop_is_running (fwts_settings->gmainloop)) {
> GVariant *reply;
> + bool is_s3;
> + char buffer[50];
>
> fwts_log_info(fwts_settings->fw, "Requesting %s action\n",
> fwts_settings->action);
> +
> + is_s3 = (strcmp(fwts_settings->action, PM_SUSPEND_LOGIND) == 0 ||
> + strcmp(fwts_settings->action, PM_SUSPEND_HYBRID_LOGIND) == 0);
> +
> + snprintf(buffer, sizeof(buffer), "Starting fwts %s\n",
> + is_s3 ? "suspend" : "hibernate");
> + (void)fwts_klog_write(fwts_settings->fw, buffer);
> + snprintf(buffer, sizeof(buffer), "%s\n",
> + fwts_settings->action);
> + (void)fwts_klog_write(fwts_settings->fw, buffer);
> + (void)time(&(fwts_settings->t_start));
> +
> reply = g_dbus_proxy_call_sync(fwts_settings->logind_proxy,
> fwts_settings->action,
> g_variant_new("(b)", FALSE),
> @@ -106,7 +120,7 @@ static void logind_on_signal(
> GVariant *parameters,
> gpointer user_data)
> {
> - gboolean status, is_s3;
> + gboolean status;
> fwts_pm_method_vars *fwts_settings = (fwts_pm_method_vars *)user_data;
>
> /* Prevent -Werror=unused-parameter from complaining */
> @@ -116,9 +130,6 @@ static void logind_on_signal(
> FWTS_UNUSED(interface_name);
> FWTS_UNUSED(signal_name);
>
> - is_s3 = (strcmp(fwts_settings->action, PM_SUSPEND_LOGIND) == 0 ||
> - strcmp(fwts_settings->action, PM_SUSPEND_HYBRID_LOGIND) == 0);
> -
> if (!g_variant_is_of_type(parameters, G_VARIANT_TYPE ("(b)"))) {
> fwts_log_error(fwts_settings->fw, "Suspend type %s\n",
> g_variant_get_type_string(parameters));
> @@ -126,17 +137,8 @@ static void logind_on_signal(
> } else {
> g_variant_get(parameters, "(b)", &status);
>
> - if (status) {
> - char buffer[50];
> + if (!status) {
>
> - (void)time(&(fwts_settings->t_start));
> - snprintf(buffer, sizeof(buffer), "Starting fwts %s\n",
> - is_s3 ? "suspend" : "hibernate");
> - (void)fwts_klog_write(fwts_settings->fw, buffer);
> - snprintf(buffer, sizeof(buffer), "%s\n",
> - fwts_settings->action);
> - (void)fwts_klog_write(fwts_settings->fw, buffer);
> - } else {
> time(&(fwts_settings->t_end));
> (void)fwts_klog_write(fwts_settings->fw,
> FWTS_RESUME "\n");
>
Good idea.
Thanks for the fix.
Acked-by: Colin Ian King <colin.king at canonical.com>
More information about the fwts-devel
mailing list