From patchwork Thu Apr 24 12:24:49 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 28962 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-yh0-f71.google.com (mail-yh0-f71.google.com [209.85.213.71]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 075C1203AC for ; Thu, 24 Apr 2014 12:25:47 +0000 (UTC) Received: by mail-yh0-f71.google.com with SMTP id a41sf9497517yho.2 for ; Thu, 24 Apr 2014 05:25:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=x9Zd2ovWj+WHwm7DjRcaoTCE8sWcj+W10GRJzgA2ym8=; b=G3jCkGgryNL8FO4ch+nKFcIO8vVLQEF4aP1qWcUAfzSjQHlqgE/BuZi+R6+ul8Ctzy oukU8/cbVFFWLjKlzfVrsNgChHsBAqp+4XmW1969yDGPWXCQQxEwjECIwSyYUYfE2PXm MWqTN/gyNFkKVrfbnod8G1Q4DJovQEjr33jEEYJal4M3fdl9s6tELKxtMQNH2zuEPeGp iZxhk2tnHqpVWFTUORtvrg3Lm5wLV6iv29d+Xj7d7iHgF4CRPUzYypiFJc5w+dLYkeB1 3IKN7Awc5z43pUVldLonb55Co+0lJilIHTGLTQGh9NNCmi2N20AxXEpBuU5pTjmPqR3J vCNg== X-Gm-Message-State: ALoCoQnS1IplKLo3mArEWjOpAK9vLJPndnHAP+Zu2r+WI3Gy9Dudd0gqIfmI6QZzPEULMgQkweFz X-Received: by 10.236.153.73 with SMTP id e49mr23800198yhk.53.1398342347731; Thu, 24 Apr 2014 05:25:47 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.44.72 with SMTP id f66ls997891qga.47.gmail; Thu, 24 Apr 2014 05:25:47 -0700 (PDT) X-Received: by 10.58.127.168 with SMTP id nh8mr222889veb.44.1398342347623; Thu, 24 Apr 2014 05:25:47 -0700 (PDT) Received: from mail-vc0-f169.google.com (mail-vc0-f169.google.com [209.85.220.169]) by mx.google.com with ESMTPS id sn5si878691vdc.29.2014.04.24.05.25.47 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 24 Apr 2014 05:25:47 -0700 (PDT) Received-SPF: none (google.com: patch+caf_=patchwork-forward=linaro.org@linaro.org does not designate permitted sender hosts) client-ip=209.85.220.169; Received: by mail-vc0-f169.google.com with SMTP id im17so2888544vcb.0 for ; Thu, 24 Apr 2014 05:25:47 -0700 (PDT) X-Received: by 10.221.20.199 with SMTP id qp7mr1075735vcb.24.1398342347539; Thu, 24 Apr 2014 05:25:47 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.220.221.72 with SMTP id ib8csp11682vcb; Thu, 24 Apr 2014 05:25:47 -0700 (PDT) X-Received: by 10.68.133.229 with SMTP id pf5mr35463874pbb.115.1398342346191; Thu, 24 Apr 2014 05:25:46 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ke1si2582403pad.214.2014.04.24.05.25.45; Thu, 24 Apr 2014 05:25:45 -0700 (PDT) Received-SPF: none (google.com: linux-kernel-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755410AbaDXMYf (ORCPT + 27 others); Thu, 24 Apr 2014 08:24:35 -0400 Received: from mail-wi0-f180.google.com ([209.85.212.180]:47759 "EHLO mail-wi0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755368AbaDXMY1 (ORCPT ); Thu, 24 Apr 2014 08:24:27 -0400 Received: by mail-wi0-f180.google.com with SMTP id q5so955940wiv.1 for ; Thu, 24 Apr 2014 05:24:26 -0700 (PDT) X-Received: by 10.194.76.10 with SMTP id g10mr1364467wjw.67.1398342266145; Thu, 24 Apr 2014 05:24:26 -0700 (PDT) Received: from localhost.localdomain (AToulouse-654-1-448-67.w83-205.abo.wanadoo.fr. [83.205.199.67]) by mx.google.com with ESMTPSA id wl6sm6008074wjb.3.2014.04.24.05.24.24 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 24 Apr 2014 05:24:25 -0700 (PDT) From: Daniel Lezcano To: peterz@infradead.org, mingo@elte.hu Cc: linux-kernel@vger.kernel.org, rjw@rjwysocki.net, linux-pm@vger.kernel.org, alex.shi@linaro.org, vincent.guittot@linaro.org, morten.rasmussen@arm.com, linaro-kernel@lists.linaro.org Subject: [PATCH 1/3] sched: idle: Encapsulate the code to compile it out Date: Thu, 24 Apr 2014 14:24:49 +0200 Message-Id: <1398342291-16322-2-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1398342291-16322-1-git-send-email-daniel.lezcano@linaro.org> References: <1398342291-16322-1-git-send-email-daniel.lezcano@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: daniel.lezcano@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: patch+caf_=patchwork-forward=linaro.org@linaro.org does not designate permitted sender hosts) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , Encapsulate the large portion of cpuidle_idle_call inside another function so when CONFIG_CPU_IDLE=n, the code will be compiled out. Also that is benefitial for the clarity of the code as it removes a nested indentation level. Signed-off-by: Daniel Lezcano --- kernel/sched/idle.c | 161 +++++++++++++++++++++++++++------------------------ 1 file changed, 86 insertions(+), 75 deletions(-) diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index 8f4390a..e877dd4 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -63,6 +63,90 @@ void __weak arch_cpu_idle(void) local_irq_enable(); } +#ifdef CONFIG_CPU_IDLE +static int __cpuidle_idle_call(void) +{ + struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices); + struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev); + int next_state, entered_state, ret; + bool broadcast; + + /* + * Check if the cpuidle framework is ready, otherwise fallback + * to the default arch specific idle method + */ + ret = cpuidle_enabled(drv, dev); + if (ret) + return ret; + + /* + * Ask the governor to choose an idle state it thinks + * it is convenient to go to. There is *always* a + * convenient idle state + */ + next_state = cpuidle_select(drv, dev); + + /* + * The idle task must be scheduled, it is pointless to + * go to idle, just update no idle residency and get + * out of this function + */ + if (current_clr_polling_and_test()) { + dev->last_residency = 0; + entered_state = next_state; + local_irq_enable(); + } else { + broadcast = !!(drv->states[next_state].flags & + CPUIDLE_FLAG_TIMER_STOP); + + if (broadcast) + /* + * Tell the time framework to switch to a + * broadcast timer because our local timer + * will be shutdown. If a local timer is used + * from another cpu as a broadcast timer, this + * call may fail if it is not available + */ + ret = clockevents_notify( + CLOCK_EVT_NOTIFY_BROADCAST_ENTER, + &dev->cpu); + + if (!ret) { + trace_cpu_idle_rcuidle(next_state, dev->cpu); + + /* + * Enter the idle state previously returned by + * the governor decision. This function will + * block until an interrupt occurs and will + * take care of re-enabling the local + * interrupts + */ + entered_state = cpuidle_enter(drv, dev, next_state); + + trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu); + + if (broadcast) + clockevents_notify( + CLOCK_EVT_NOTIFY_BROADCAST_EXIT, + &dev->cpu); + + /* + * Give the governor an opportunity to reflect + * on the outcome + */ + cpuidle_reflect(dev, entered_state); + } + } + + return 0; +} +#else +static int inline __cpuidle_idle_call(void) +{ + return -ENOSYS; +} +#endif + /** * cpuidle_idle_call - the main idle function * @@ -71,10 +155,7 @@ void __weak arch_cpu_idle(void) */ static int cpuidle_idle_call(void) { - struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices); - struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev); - int next_state, entered_state, ret; - bool broadcast; + int ret; /* * Check if the idle task must be rescheduled. If it is the @@ -101,80 +182,10 @@ static int cpuidle_idle_call(void) rcu_idle_enter(); /* - * Check if the cpuidle framework is ready, otherwise fallback - * to the default arch specific idle method - */ - ret = cpuidle_enabled(drv, dev); - - if (!ret) { - /* - * Ask the governor to choose an idle state it thinks - * it is convenient to go to. There is *always* a - * convenient idle state - */ - next_state = cpuidle_select(drv, dev); - - /* - * The idle task must be scheduled, it is pointless to - * go to idle, just update no idle residency and get - * out of this function - */ - if (current_clr_polling_and_test()) { - dev->last_residency = 0; - entered_state = next_state; - local_irq_enable(); - } else { - broadcast = !!(drv->states[next_state].flags & - CPUIDLE_FLAG_TIMER_STOP); - - if (broadcast) - /* - * Tell the time framework to switch - * to a broadcast timer because our - * local timer will be shutdown. If a - * local timer is used from another - * cpu as a broadcast timer, this call - * may fail if it is not available - */ - ret = clockevents_notify( - CLOCK_EVT_NOTIFY_BROADCAST_ENTER, - &dev->cpu); - - if (!ret) { - trace_cpu_idle_rcuidle(next_state, dev->cpu); - - /* - * Enter the idle state previously - * returned by the governor - * decision. This function will block - * until an interrupt occurs and will - * take care of re-enabling the local - * interrupts - */ - entered_state = cpuidle_enter(drv, dev, - next_state); - - trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, - dev->cpu); - - if (broadcast) - clockevents_notify( - CLOCK_EVT_NOTIFY_BROADCAST_EXIT, - &dev->cpu); - - /* - * Give the governor an opportunity to reflect on the - * outcome - */ - cpuidle_reflect(dev, entered_state); - } - } - } - - /* * We can't use the cpuidle framework, let's use the default * idle routine */ + ret = __cpuidle_idle_call(); if (ret) arch_cpu_idle();