Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3531150ybz; Mon, 20 Apr 2020 04:46:19 -0700 (PDT) X-Google-Smtp-Source: APiQypKPf845JmRIa3WPglrBRRG4b6L4KxTbQ3kMZhF8i5EKlSh8/EGhfXBs9vibpWWjpqXESTGw X-Received: by 2002:a17:906:e01:: with SMTP id l1mr15256563eji.76.1587383179243; Mon, 20 Apr 2020 04:46:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587383179; cv=none; d=google.com; s=arc-20160816; b=v1EPsdoIkl38Gj/1GDKSxbIr+6pCRy9p/edaCzbzJbxl2ZzgE46Q7WmgjFcuRBkBit pjme06Cx8eleDtQFXv92/IAM7XSzaEqFn7Q79PzOg3eP8UqTeAWyeeW2rsTtYkGD50h+ K/3eCiNh5Q4GvDp+Y/ND/Qb3vLdM23UpoKGEqYNbUQzbzXBSetXb4CgohCde5o4Wr/gn 1T+jKjU4GE448n4/SqN0IxVD/ovH7fWD6+gwPk7Ktxijc0gTNKR8v7VeFsWHizuIjd0i rQ6Jkr+79vph3FlIt0yc9e48WNYmsiaiJDOJ7zB9+gNEvfoCvRpeZ5s6WeGMootzsm9K pjfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=332YiHJfNT+z+W41pA2eILCpiXNt9DJh4GVn2AGVGu0=; b=VJtgORa4FBudmvt/iY20tXf1sY70NkJixzVHB+vB9a1suBkbmp6o/OF01leL2vj7+a PJcWfUdfFLRkBqVNDRhRT/9aqD+NVqRlZua4FCH0pYZ2HvGWPnRmQnjlgseCRmFD/pzt 1eTlTRtXH1wvZlXIsP7bxLdzWsjjk46dJnoU4CzVlKjN4PUQt5xy6zit1j0qanLCnCkY O8HwHMmhB+Z2dz4F7oCMqhtshc5OCjTdhe7SgEgz1EDIWqKmKikCLiahsgNGAGcR8pJZ a4JVSvzNZqtyz28lc9EARfrIjRPOeCRX/CDqNNDhTMxH5PfWNPCcKgByyio0KEtfq/Nw MiQw== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v12si416287edw.72.2020.04.20.04.45.56; Mon, 20 Apr 2020 04:46:19 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726597AbgDTLmd (ORCPT + 99 others); Mon, 20 Apr 2020 07:42:33 -0400 Received: from foss.arm.com ([217.140.110.172]:46866 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725886AbgDTLmc (ORCPT ); Mon, 20 Apr 2020 07:42:32 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 545301FB; Mon, 20 Apr 2020 04:42:31 -0700 (PDT) Received: from lakrids.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2846D3F237; Mon, 20 Apr 2020 04:42:30 -0700 (PDT) Date: Mon, 20 Apr 2020 12:42:25 +0100 From: Mark Rutland To: zhang.lyra@gmail.com Cc: "Rafael J . Wysocki" , Daniel Lezcano , Rob Herring , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Chunyan Zhang Subject: Re: [RFC PATCH v1 1/2] cpuidle: allow idle state to be found as deepest state for s2idle only Message-ID: <20200420114222.GA14343@lakrids.cambridge.arm.com> References: <20200413070014.12960-1-zhang.lyra@gmail.com> <20200413070014.12960-2-zhang.lyra@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200413070014.12960-2-zhang.lyra@gmail.com> User-Agent: Mutt/1.11.1+11 (2f07cb52) (2018-12-01) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Apr 13, 2020 at 03:00:13PM +0800, zhang.lyra@gmail.com wrote: > From: Chunyan Zhang > > Add a new flag CPUIDLE_FLAG_S2IDLE to allow c-state to be found as > deepest state for s2idle only, so that users can add a new c-state > for using s2idle and don't worry disturbing other use cases such as > play_idle() which probably don't want to enter into so much deep > idle state since devices are not suspended for that kind of cases. Can you please elaborate on this? Why exactly are these states not suited for regular cpu idle? What problems do they cause? e.g. long wakeup latency? The flag and the for-s2-idle-only DT property are encoding a policy rarher than a property, and as such I don't think this is the right way to describe this in the DT. However, if there might be porperties of the idle state that we could describe so that the OS can come to the same conclusion. Thanks, Mark. > > Signed-off-by: Chunyan Zhang > --- > drivers/cpuidle/cpuidle.c | 3 ++- > drivers/cpuidle/dt_idle_states.c | 3 +++ > include/linux/cpuidle.h | 1 + > 3 files changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c > index de81298051b3..bb61f0c271d2 100644 > --- a/drivers/cpuidle/cpuidle.c > +++ b/drivers/cpuidle/cpuidle.c > @@ -89,7 +89,8 @@ static int find_deepest_state(struct cpuidle_driver *drv, > s->exit_latency_ns <= latency_req || > s->exit_latency_ns > max_latency_ns || > (s->flags & forbidden_flags) || > - (s2idle && !s->enter_s2idle)) > + (s2idle && !s->enter_s2idle) || > + (!s2idle && (s->flags & CPUIDLE_FLAG_S2ILDE))) > continue; > > latency_req = s->exit_latency_ns; > diff --git a/drivers/cpuidle/dt_idle_states.c b/drivers/cpuidle/dt_idle_states.c > index 252f2a9686a6..530db2726c05 100644 > --- a/drivers/cpuidle/dt_idle_states.c > +++ b/drivers/cpuidle/dt_idle_states.c > @@ -80,6 +80,9 @@ static int init_state_node(struct cpuidle_state *idle_state, > idle_state->flags = 0; > if (of_property_read_bool(state_node, "local-timer-stop")) > idle_state->flags |= CPUIDLE_FLAG_TIMER_STOP; > + > + if (of_property_read_bool(state_node, "for-s2idle-only")) > + idle_state->flags |= CPUIDLE_FLAG_S2ILDE; > /* > * TODO: > * replace with kstrdup and pointer assignment when name > diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h > index ec2ef63771f0..08da701f74cd 100644 > --- a/include/linux/cpuidle.h > +++ b/include/linux/cpuidle.h > @@ -78,6 +78,7 @@ struct cpuidle_state { > #define CPUIDLE_FLAG_TIMER_STOP BIT(2) /* timer is stopped on this state */ > #define CPUIDLE_FLAG_UNUSABLE BIT(3) /* avoid using this state */ > #define CPUIDLE_FLAG_OFF BIT(4) /* disable this state by default */ > +#define CPUIDLE_FLAG_S2ILDE BIT(5) /* state is used for s2idle only */ > > struct cpuidle_device_kobj; > struct cpuidle_state_kobj; > -- > 2.20.1 >