Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp1269475pxb; Fri, 27 Aug 2021 05:23:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxVyi83J19OfPCd+vqdW/yS9Q4ItxOPg//GhUV10I1v4B0LPP/ntPE529eEGo4RBYg8vZYA X-Received: by 2002:a92:db0c:: with SMTP id b12mr6192054iln.171.1630067011723; Fri, 27 Aug 2021 05:23:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630067011; cv=none; d=google.com; s=arc-20160816; b=iuQFKqvyeNSEdJgwSqd3oOFkgyrOK1B1gaRzz5lrYemsBaUpOEHb0mnJY1EKC23D7z rAsqfhzyh+ocb3eMGE1Wo++feaOu1HmyEinAc1odneQ8YEc11souzawU+VQh42G/ESQw /KWr8UOn5bYq5Lm5PBaitl4j9Elh3zRFkhl9iy19+uZ+HFtGyyR3IHXNDeFpkj7v5kKs 6W78dGOFHer6y8+FPo3dMksR5F66YB2CPRMBIOMZIAd03wSVdq9BlaXpW96OgCQw/kvu m8xlRfOoUqBFPECM9fNmeF61FESQBGN24QxaQrpgOsWLVmntCIvVkmamo8C9v/I4FcqJ JYjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version; bh=B3od3vyvcuge7BK5/FxXd+T+mQcTApP8RCdRnptyqb0=; b=FeYbO4XLDQcK5ryzktUQDRqFnrnt7UMUIXDYaVFQwjv7+8gcncLXM6buZQIJxVvP33 NexYvBLvcLJAka82Kf+lr4rAgJ/78eefy40PS25DY1ERZiV8/XT6Uf6gtqXYQ/kLJDPa d+diLx+JqpSb/mmr+JoDsMlA6XZ2djhgBNH/gvdasIoIQVcmJT6tZ6D7JZ6Npmkk/wnQ JHEe16YPoocXCBuBpjfKIGrTR8I04peFP3HODu+jQkXVSIJVht6FLdp0xvlJfzQtvu9A ZiZukYpaqPseEdV8A1Ms1Qd2TR6vPEWC6A1SbNMrFBlNepHeeL7AEEDYsOamuniRehjP j/AQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q20si5777085ilj.61.2021.08.27.05.23.19; Fri, 27 Aug 2021 05:23:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245091AbhH0MU6 (ORCPT + 99 others); Fri, 27 Aug 2021 08:20:58 -0400 Received: from mail-ot1-f42.google.com ([209.85.210.42]:42702 "EHLO mail-ot1-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231260AbhH0MU6 (ORCPT ); Fri, 27 Aug 2021 08:20:58 -0400 Received: by mail-ot1-f42.google.com with SMTP id c19-20020a9d6153000000b0051829acbfc7so7569261otk.9; Fri, 27 Aug 2021 05:20:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=B3od3vyvcuge7BK5/FxXd+T+mQcTApP8RCdRnptyqb0=; b=mVWaBICFn4TiL0Q5a95VQ04nqixa92ObxGnP/BVLPP/2mqHL0ucDR8FWeSDAVA/sOL w81UEXcM4LZCme5BBdHPh/NllXGAj+pcFCvzhO6fkl+fY1V5Prbre+3+pzv12DkS0Lgv bsW8ezCi+igf1a+gPpTowgkpCovWRw0b9mSlkio1OpZyUVPPNAzNhxmP7cYP1+tqxE6f LIHxYC2ajNHWVDctW4JUPkWV5OrtyfC9AVzBh6IvQHCdGcKA9bgEsL1iy/nqNaDwdUMc 1L4DyuHQiuOisog7ePUKh+G6dPCZBoOFLXSOyMtToZ6wBjYXOYkNa+ZdhZZVWpekIOC+ a2FQ== X-Gm-Message-State: AOAM533pJb/kA4baam4MZ3I2ex19FUpPevuPA53oVFpcZrDoXgBlEBDa +Wm7GrGBmnmmDLB+zUb50sOcGQhORaITizvy0NzMyf/DV1rOpg== X-Received: by 2002:a9d:7115:: with SMTP id n21mr2067521otj.321.1630066809238; Fri, 27 Aug 2021 05:20:09 -0700 (PDT) MIME-Version: 1.0 References: <1629732470-155444-1-git-send-email-psodagud@codeaurora.org> In-Reply-To: <1629732470-155444-1-git-send-email-psodagud@codeaurora.org> From: "Rafael J. Wysocki" Date: Fri, 27 Aug 2021 14:19:58 +0200 Message-ID: Subject: Re: [PATCH v4] PM: sleep: core: Avoid setting power.must_resume to false To: Prasad Sodagudi Cc: Greg Kroah-Hartman , "Rafael J. Wysocki" , Len Brown , Linux Kernel Mailing List , Linux PM , Pavel Machek Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Aug 23, 2021 at 5:28 PM Prasad Sodagudi wrote: > > There are variables(power.may_skip_resume and dev->power.must_resume) > and DPM_FLAG_MAY_SKIP_RESUME flags to control the resume of devices after > a system wide suspend transition. > > Setting the DPM_FLAG_MAY_SKIP_RESUME flag means that the driver allows > its "noirq" and "early" resume callbacks to be skipped if the device > can be left in suspend after a system-wide transition into the working > state. PM core determines that the driver's "noirq" and "early" resume > callbacks should be skipped or not with dev_pm_skip_resume() function by > checking power.may_skip_resume variable. > > power.must_resume variable is getting set to false in __device_suspend() > function without checking device's DPM_FLAG_MAY_SKIP_RESUME settings. > In problematic scenario, where all the devices in the suspend_late > stage are successful and some device can fail to suspend in > suspend_noirq phase. So some devices successfully suspended in suspend_late > stage are not getting chance to execute __device_suspend_noirq() > to set dev->power.must_resume variable to true and not getting > resumed in early_resume phase. > > Add a check for device's DPM_FLAG_MAY_SKIP_RESUME flag before > setting power.must_resume variable in __device_suspend function. > > Fixes: 6e176bf8d461 ("PM: sleep: core: Do not skip callbacks in the resume phase") > Signed-off-by: Prasad Sodagudi > --- > V3 -> V4: Remove dev->power.usage_count variable check > V2 -> V3: Format issues patch posting > V1 -> V2: Fixed indentation and commit text to include scenario > drivers/base/power/main.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c > index d568772..50e8ea3 100644 > --- a/drivers/base/power/main.c > +++ b/drivers/base/power/main.c > @@ -1642,7 +1642,10 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) > } > > dev->power.may_skip_resume = true; > - dev->power.must_resume = false; > + if (dev_pm_test_driver_flags(dev, DPM_FLAG_MAY_SKIP_RESUME)) > + dev->power.must_resume = false; > + else > + dev->power.must_resume = true; Why don't you write it as dev->power.must_resume = !dev_pm_test_driver_flags(dev, DPM_FLAG_MAY_SKIP_RESUME); > > dpm_watchdog_set(&wd, dev); > device_lock(dev); > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project >