From patchwork Mon Mar 20 10:19:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 9633683 X-Patchwork-Delegate: rjw@sisk.pl Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 49E14601E9 for ; Mon, 20 Mar 2017 10:21:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3A0F22780C for ; Mon, 20 Mar 2017 10:21:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2EE9D27F9A; Mon, 20 Mar 2017 10:21:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D919E2780C for ; Mon, 20 Mar 2017 10:21:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753201AbdCTKVD (ORCPT ); Mon, 20 Mar 2017 06:21:03 -0400 Received: from mail-lf0-f47.google.com ([209.85.215.47]:34593 "EHLO mail-lf0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753680AbdCTKUX (ORCPT ); Mon, 20 Mar 2017 06:20:23 -0400 Received: by mail-lf0-f47.google.com with SMTP id z15so53400534lfd.1 for ; Mon, 20 Mar 2017 03:19:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=DbndLKfL6PDffmkg9SsEJ3x+kwnPzeLbv6EnMPFLMGg=; b=Qiui1ewudt36Apnijc51zeaSVp28wqimOnDs0wUOaagQI/iBkISYVr1HvI5z+m0pYu xk/liai/nr571BrVny00dZowpwle9ZoiFmoJUzH7DlMeC06by/P6Witta0iQY9J0VVMT 6LUM5z3ifqVzC81QrpwYAvm/fVJnU5OG2YZ84= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=DbndLKfL6PDffmkg9SsEJ3x+kwnPzeLbv6EnMPFLMGg=; b=e4Amb5eXxEB1RyWGI6rT0j5YMfmPh7tpjpPr9Ijikj1Pl/6rPQ5N6n28Z9xEjEEVXm 2Jg0qxWR7FqrrYlPTJcAuCrxQ0n5WQxHety4rZyDu/dez1gAXIg+yyMmIz4jU5yOXoG7 SBAKrHIsbP/s+KVV3t3NGCzfO3Pw//MCdbJSFHt1qihEgVqKlEI17eYh9INC+0l9XmoE OQ487O/nNI7mRHOmeOlDMG609TUgcXMd8BiYviblPngtqqPlhdPYvlWl8e/OAPeO9SFk BjC0oMrGL8KIP/lBIQKmrt+L8o0Ayso+buBnC8NqEXPM0WrpF/s9bXKEPTApx3AfmIoa oGAQ== X-Gm-Message-State: AFeK/H1KDe6/SB+Ke24mtLIk05EbZnSp4p3o21ipqD/wfwIPWtCuL7vJ8YNKMEWVWtPjMbeQ X-Received: by 10.46.33.168 with SMTP id h40mr9259627lji.52.1490005177418; Mon, 20 Mar 2017 03:19:37 -0700 (PDT) Received: from uffe-XPS-13-9360.ideon.se ([85.235.10.227]) by smtp.gmail.com with ESMTPSA id c5sm223825lfk.51.2017.03.20.03.19.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 20 Mar 2017 03:19:36 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , Ulf Hansson , linux-pm@vger.kernel.org Cc: Len Brown , Pavel Machek , Kevin Hilman , Geert Uytterhoeven , Lina Iyer , Jon Hunter , Marek Szyprowski , Viresh Kumar Subject: [PATCH 3/4] PM / Domains: Respect errors from genpd's ->power_off() callback Date: Mon, 20 Mar 2017 11:19:22 +0100 Message-Id: <1490005163-28633-4-git-send-email-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1490005163-28633-1-git-send-email-ulf.hansson@linaro.org> References: <1490005163-28633-1-git-send-email-ulf.hansson@linaro.org> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The current code in genpd_sync_power_off(), doesn't care about potential errors being returned from genpd's ->power_off() callback. Obviously this behaviour could lead to problems, such as incorrectly setting the genpd's status to GPD_STATE_POWER_OFF, but also to incorrectly decrease the subdomain count for the masters, which potentially allows them to be powered off in the next recursive call to genpd_sync_power_off(). Let's fix this behaviour by bailing out when the ->power_off() callback returns an error code. Signed-off-by: Ulf Hansson Reviewed-by: Viresh Kumar Reviewed-by: Geert Uytterhoeven Reviewed-by: Bartlomiej Zolnierkiewicz --- drivers/base/power/domain.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index e63712d..8a2bfc8 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -767,7 +767,8 @@ static void genpd_sync_power_off(struct generic_pm_domain *genpd, bool use_lock, /* Choose the deepest state when suspending */ genpd->state_idx = genpd->state_count - 1; - _genpd_power_off(genpd, false); + if (_genpd_power_off(genpd, false)) + return; genpd->status = GPD_STATE_POWER_OFF;