Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp592470ybz; Wed, 22 Apr 2020 04:21:18 -0700 (PDT) X-Google-Smtp-Source: APiQypKMyvuOEdG0JZ81udPQqyS2HnPpyzYNKEKz/aOk0M527eqhHRWf/O8gG7QwpmvBkwst115r X-Received: by 2002:a17:906:3713:: with SMTP id d19mr24421125ejc.111.1587554478241; Wed, 22 Apr 2020 04:21:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587554478; cv=none; d=google.com; s=arc-20160816; b=t5S9NZr/BVVy7093Fuf9ZKuKY1/AutjW5g9DWinXCJnlCEtrZ+KMBTOs/tQ+/kPbI4 j9rx5E7TNz7E28cAUDf5luVEAKpheUBLsUeQkuqFQhPkgUvmysMJulsY1QGUvRBZQ3nk en5AwNy6pllmHwhUMC1dMnZNvZI1CSxPVtvUXGOf6CPNaPeyYM+GJAlcuH40huRyCpxz JGgpNRamhjhWInMAKSaFV5F0yuQqcJgHkORSbALjjOmlJIhPnCjW6BhZh9KchLEQDdf2 Esj4uQvthaeXq63BEwM5PB0hqTyxUloF2r9p2SN11c2l+iO4rZkP4FC5o5mq2BT4v1S9 zlvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=7/BLLLzInoLEb37soX3+1vL3RtGn9XG8RZCsed4AJ9c=; b=WHXfe2YYrnoGgSOCMRnQArq53GuGu6v4d99n8ytKs6xPntMHOGPQI6si70KjgbMqsG fN5pPzGQT+H2lQlgPhai7wzQTmN/D79WWGoTTW/e1LJ/x45QqPtk6Tv7q5HjFo1hW99a 9kpPOnzYwZ4etqc/Qu+BR2cFDEnQPB1Fqf5F3NOgXeyErMhaled+0osgD6CEMD5vJts7 zUns7uHLuVdUrhPLgN4+CsXKQ80DsWrPHRIq2cDUvgsKHpev5HPKLSX9GtKpy3SiKkqz bDIP7fCQb3sGuXdLyBIyrQMfqgGx2LQeFyRBnzh/0ORPuNRMTXgcNZsysHByJdGlEF/i BPnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=oUTgC1un; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cb14si3362341ejb.80.2020.04.22.04.20.55; Wed, 22 Apr 2020 04:21:18 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=oUTgC1un; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726718AbgDVLTZ (ORCPT + 99 others); Wed, 22 Apr 2020 07:19:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44186 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725787AbgDVLTX (ORCPT ); Wed, 22 Apr 2020 07:19:23 -0400 Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 293BBC03C1A8; Wed, 22 Apr 2020 04:19:23 -0700 (PDT) Received: by mail-wm1-x344.google.com with SMTP id t63so1862460wmt.3; Wed, 22 Apr 2020 04:19:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=7/BLLLzInoLEb37soX3+1vL3RtGn9XG8RZCsed4AJ9c=; b=oUTgC1unxTNGrkAobClJd3vMl93zNO/UG9sew82P03MXYQ4rmYgpS/jNEsC8/IjsuO LkKguB7oNb4bGuTbzHBllpAhxn3+63mBROzFkDPFBW+kT1G0tP4gyNo8cdaTDsyJdoRz Rpvd0p5lsQ9Wo2H36YDdR3vsGXrekUxZwtHvwSqhcvUXvEJu8Yz1vEKg0fyKdYVV6gZB 0f5f8p0ivFh5QknqNKoQEwQ145mL54XRBY7vcwehMcHXs5cSknvRVZ8rQGqE9VH2wfaT Du8MAd7Kj49xguqMZ+USRzoE+6ptCYGK7N3NMIcD2I1f/nvJRe9sY8uISbgsCmfhyDdH wm2A== 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:content-transfer-encoding; bh=7/BLLLzInoLEb37soX3+1vL3RtGn9XG8RZCsed4AJ9c=; b=sfn+g8bbG+WwBYkYjJdF6AELohAr29ysotPjE5JFPnK8s9z9o46NEFsWYDMyKYFMAt 3fWsrbjHrhdpgTAFWy49gyCcHwWBsojFo65/kh8RqRLSVNIWTS1EwhVyh/ofZVx0K7rY tNFj//mlkbQg8a/jPdf3BFag+ED4XOrZ1GvCARU72OJS0Fb0YD5WOPcS3AyxkKD+ZFCr ZKJbeJo6LjK3e/L+4NBnWXp8Zc21L9Wq1LIIJZo4+c/0Wg+ebZkyfHjBSVTgof33YuJB /yp8q+zuMs4dgzU/ERUWfv2YvnKmgldJWFJi2Eum1ftWhxLTy+/CZ701lUhYSZxJDs6I LATw== X-Gm-Message-State: AGi0PuagiZsUuCCXFjiuTWejvi+dCZp/7O+aFd1mv/5yBxRcHxI0R/Bi addPnxNY3vF+WZUMDO8/4kmLf1WtiOIaGFrZHq0= X-Received: by 2002:a7b:cd04:: with SMTP id f4mr9591767wmj.3.1587554361895; Wed, 22 Apr 2020 04:19:21 -0700 (PDT) MIME-Version: 1.0 References: <20200422051529.30757-1-zhang.lyra@gmail.com> In-Reply-To: From: Chunyan Zhang Date: Wed, 22 Apr 2020 19:18:45 +0800 Message-ID: Subject: Re: [PATCH] PM: sleep: call devfreq_suspend/resume and cpufreq_suspend/resume in pairs. To: "Rafael J. Wysocki" Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Len Brown , Pavel Machek , Linux PM , Linux Kernel Mailing List , Orson Zhai , Vincent Wang , Samer Xie , Chunyan Zhang Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Rafael, (Behalf Of Vincent Wang) Thanks for your comments, please see my answers below. On Wed, 22 Apr 2020 at 17:05, Rafael J. Wysocki wrote: > > On Wed, Apr 22, 2020 at 7:15 AM Chunyan Zhang wrot= e: > > > > From: Vincent Wang > > > > If dpm_prepare() fails in dpm_suspend_start(), dpm_suspend() can't be > > called. > > That's correct. > > > And then, devfreq_suspend() and cpufreq_suspend() will not be > > called in the suspend flow. > > Right. > > > But in the resiume flow, devfreq_resume() and cpufreq_resume() will > > be called. > > Right, and they are expected to cope with the situation. > > > This patch will ensure that devfreq_suspend/devfreq_resume and > > cpufreq_suspend/cpufreq_resume are called in pairs. > > So why is it better to do this than to make devfreq_resume() meet the > expectations? Yes=EF=BC=8Cwe found an issue with cpufreq schedutil governor on kernel4.14= , and I think the issue should haven't been changed on the latest version of kernel. In the function dpm_suspend_start(), dpm_suspend() would not be exceuted if return error from device_prepare() [1]. So cpufreq_cpufreq() will not be called, then cpufreq_remove_update_util_hook() will not be called either, and so cpufreq_update_util_data will not be NULL. In the dpm resume flow, sugov_start() will be called, in which sg_cpu.update_util will be set to 0. And since cpufreq_update_util_data is not NULL, data->func will not be set and is still NULL which actually is sg_cpu.update_util. void cpufreq_add_update_util_hook(int cpu, struct update_util_data *data, void (*func)(struct update_util_data *data, u64 tim= e, unsigned int flags)) { [...] if (WARN_ON(per_cpu(cpufreq_update_util_data, cpu))) return; data->func =3D func; [...] } When cpufreq_update_util() is called by scheduler, there will be a NULL pointer issue. [1] https://elixir.bootlin.com/linux/v5.7-rc1/source/drivers/base/power/mai= n.c#L2052 > > > Signed-off-by: Vincent Wang > > Signed-off-by: Samer Xie > > Signed-off-by: Chunyan Zhang > > --- > > drivers/base/power/main.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c > > index fdd508a78ffd..eb3d987d43e0 100644 > > --- a/drivers/base/power/main.c > > +++ b/drivers/base/power/main.c > > @@ -1866,9 +1866,6 @@ int dpm_suspend(pm_message_t state) > > trace_suspend_resume(TPS("dpm_suspend"), state.event, true); > > might_sleep(); > > > > - devfreq_suspend(); > > - cpufreq_suspend(); > > - > > mutex_lock(&dpm_list_mtx); > > pm_transition =3D state; > > async_error =3D 0; > > @@ -1988,6 +1985,9 @@ int dpm_prepare(pm_message_t state) > > trace_suspend_resume(TPS("dpm_prepare"), state.event, true); > > might_sleep(); > > > > + devfreq_suspend(); > > + cpufreq_suspend(); > > + > > /* > > * Give a chance for the known devices to complete their probes= , before > > * disable probing of devices. This sync point is important at = least > > -- > > 2.20.1 > >