From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755982AbcK1XTM (ORCPT ); Mon, 28 Nov 2016 18:19:12 -0500 Received: from mail-wj0-f194.google.com ([209.85.210.194]:34062 "EHLO mail-wj0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755790AbcK1XTD (ORCPT ); Mon, 28 Nov 2016 18:19:03 -0500 MIME-Version: 1.0 In-Reply-To: <1480368809-23685-3-git-send-email-jacob.jun.pan@linux.intel.com> References: <1480368809-23685-1-git-send-email-jacob.jun.pan@linux.intel.com> <1480368809-23685-3-git-send-email-jacob.jun.pan@linux.intel.com> From: "Rafael J. Wysocki" Date: Tue, 29 Nov 2016 00:19:01 +0100 X-Google-Sender-Auth: 9VFd2pY36KS7c1_7fmXoiHrgk-w Message-ID: Subject: Re: [PATCH v4 2/2] cpuidle: allow setting deepest idle To: Jacob Pan Cc: Peter Zijlstra , Ingo Molnar , Thomas Gleixner , LKML , Linux PM , Arjan van de Ven , Srinivas Pandruvada , Len Brown , Rafael Wysocki , Eduardo Valentin , Zhang Rui , Petr Mladek , Sebastian Andrzej Siewior Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Nov 28, 2016 at 10:33 PM, Jacob Pan wrote: > When idle injection is used to cap power, we need to override > governor's choice of idle states. This patch allows caller to select > the deepest idle state on a CPU therefore achieve the maximum > potential power saving. > > Signed-off-by: Jacob Pan > --- > drivers/cpuidle/cpuidle.c | 11 +++++++++++ > include/linux/cpuidle.h | 4 +++- > kernel/sched/idle.c | 13 ++++++++----- > 3 files changed, 22 insertions(+), 6 deletions(-) > > diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c > index c73207a..887a52a 100644 > --- a/drivers/cpuidle/cpuidle.c > +++ b/drivers/cpuidle/cpuidle.c > @@ -97,6 +97,17 @@ static int find_deepest_state(struct cpuidle_driver *drv, > return ret; > } > > +/* Set the current cpu to use the deepest idle state, override governors */ > +void cpuidle_use_deepest_state(bool enable) > +{ > + struct cpuidle_device *dev; > + > + preempt_disable(); > + dev = cpuidle_get_device(); > + dev->use_deepest_state = enable; > + preempt_enable(); > +} > + > #ifdef CONFIG_SUSPEND > /** > * cpuidle_find_deepest_state - Find the deepest available idle state. > diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h > index bb31373..97c169b 100644 > --- a/include/linux/cpuidle.h > +++ b/include/linux/cpuidle.h > @@ -74,6 +74,7 @@ struct cpuidle_state { > struct cpuidle_device { > unsigned int registered:1; > unsigned int enabled:1; > + unsigned int use_deepest_state:1; > unsigned int cpu; > > int last_residency; > @@ -192,11 +193,12 @@ static inline struct cpuidle_driver *cpuidle_get_cpu_driver( > static inline struct cpuidle_device *cpuidle_get_device(void) {return NULL; } > #endif > > -#if defined(CONFIG_CPU_IDLE) && defined(CONFIG_SUSPEND) > +#ifdef CONFIG_CPU_IDLE The corresponding change in cpuidle.c is missing (and 0-day has just found that too). Thanks, Rafael