From patchwork Tue Feb 25 08:08:52 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 25239 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-oa0-f71.google.com (mail-oa0-f71.google.com [209.85.219.71]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 86D7A20543 for ; Tue, 25 Feb 2014 08:09:55 +0000 (UTC) Received: by mail-oa0-f71.google.com with SMTP id o6sf149277oag.6 for ; Tue, 25 Feb 2014 00:09:55 -0800 (PST) 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=ToDffdFmIwUYH0GqM3ydmdHH2umERklZrfFKCNHTJ7k=; b=lmQTS6i/q4jQcVT1fPa36j3qKdP2p1CBjT/gLcxNlv589jfeFJlGWK6v8S0e1JToWC TQvPxJrfk/Ee/4POShSoxt5sKQva2maeThuSb65dxZNJSFeGfUwYHveUqTTkF2rCTIKP /Sl7Cjy2mMpFatmVhQdI7CA7izSgKLLknS6cBdySIMjU0v9z1L/HygZyqdk8NhcBE5zG WNan73SZEJ08nXxzTc6INtn4dz0F+5iY7tsmCyo5AXmA5R64sWnTgfhAF+Pz21SBNpmX SSMc//hMKnZOBgOcqeWS/WH8XkadFKP5uELHx830cMPy9owfnL5mmG8t4pS3aoWk9+wM W+iA== X-Gm-Message-State: ALoCoQkkV8N9jythiLhoKoCHVhCs+rpBuA1YVJlEJvbrlRSJBpQxhiLg8ANMHqOYM9NEbOjvoZh5 X-Received: by 10.182.153.68 with SMTP id ve4mr20348obb.39.1393315795085; Tue, 25 Feb 2014 00:09:55 -0800 (PST) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.30.201 with SMTP id d67ls2288795qgd.62.gmail; Tue, 25 Feb 2014 00:09:54 -0800 (PST) X-Received: by 10.220.162.196 with SMTP id w4mr55237vcx.58.1393315794925; Tue, 25 Feb 2014 00:09:54 -0800 (PST) Received: from mail-ve0-f180.google.com (mail-ve0-f180.google.com [209.85.128.180]) by mx.google.com with ESMTPS id f5si6631396vej.35.2014.02.25.00.09.54 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 25 Feb 2014 00:09:54 -0800 (PST) Received-SPF: neutral (google.com: 209.85.128.180 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.128.180; Received: by mail-ve0-f180.google.com with SMTP id jz11so40916veb.39 for ; Tue, 25 Feb 2014 00:09:54 -0800 (PST) X-Received: by 10.59.5.102 with SMTP id cl6mr20597ved.41.1393315794829; Tue, 25 Feb 2014 00:09:54 -0800 (PST) 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.174.196 with SMTP id u4csp120173vcz; Tue, 25 Feb 2014 00:09:54 -0800 (PST) X-Received: by 10.66.26.176 with SMTP id m16mr160697pag.142.1393315793516; Tue, 25 Feb 2014 00:09:53 -0800 (PST) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id xz2si2745824pbb.179.2014.02.25.00.09.52; Tue, 25 Feb 2014 00:09:52 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752550AbaBYIJp (ORCPT + 26 others); Tue, 25 Feb 2014 03:09:45 -0500 Received: from mail-wg0-f51.google.com ([74.125.82.51]:50742 "EHLO mail-wg0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751500AbaBYII7 (ORCPT ); Tue, 25 Feb 2014 03:08:59 -0500 Received: by mail-wg0-f51.google.com with SMTP id a1so39859wgh.22 for ; Tue, 25 Feb 2014 00:08:57 -0800 (PST) X-Received: by 10.180.7.130 with SMTP id j2mr17935004wia.25.1393315737490; Tue, 25 Feb 2014 00:08:57 -0800 (PST) Received: from localhost.localdomain (AToulouse-654-1-343-25.w90-55.abo.wanadoo.fr. [90.55.62.25]) by mx.google.com with ESMTPSA id ga20sm31710399wic.0.2014.02.25.00.08.56 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 25 Feb 2014 00:08:56 -0800 (PST) From: Daniel Lezcano To: mingo@kernel.org, peterz@infradead.org, tglx@linutronix.de, rjw@rjwysocki.net Cc: nicolas.pitre@linaro.org, preeti@linux.vnet.ibm.com, linux-kernel@vger.kernel.org Subject: [PATCH V3 4/5] idle: Move idle conditions in cpuidle_idle main function Date: Tue, 25 Feb 2014 09:08:52 +0100 Message-Id: <1393315733-32321-4-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1393315733-32321-1-git-send-email-daniel.lezcano@linaro.org> References: <1393315733-32321-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: 209.85.128.180 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) 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: , This patch moves the condition before entering idle into the cpuidle main function located in idle.c. That simplify the idle mainloop functions and increase the readibility of the conditions to enter truly idle. This patch is code reorganization and does not change the behavior of the function. Signed-off-by: Daniel Lezcano Cc: Peter Zijlstra --- V3: * reorganized cpuidle_idle_call function as Suggested by Peter Zijlstra https://lkml.org/lkml/2014/2/24/492 --- kernel/sched/idle.c | 85 ++++++++++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 39 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ Index: cpuidle-next/kernel/sched/idle.c =================================================================== --- cpuidle-next.orig/kernel/sched/idle.c +++ cpuidle-next/kernel/sched/idle.c @@ -73,46 +73,58 @@ 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; + int next_state, entered_state; bool broadcast; - stop_critical_timings(); - rcu_idle_enter(); - - ret = cpuidle_enabled(drv, dev); - if (ret < 0) { - arch_cpu_idle(); - goto out; - } - - /* ask the governor for the next state */ - next_state = cpuidle_select(drv, dev); - - if (need_resched()) { - dev->last_residency = 0; - /* give the governor an opportunity to reflect on the outcome */ - cpuidle_reflect(dev, next_state); + if (current_clr_polling_and_test()) { local_irq_enable(); - goto out; + __current_set_polling(); + return 0; } - trace_cpu_idle_rcuidle(next_state, dev->cpu); + stop_critical_timings(); + rcu_idle_enter(); - broadcast = !!(drv->states[next_state].flags & CPUIDLE_FLAG_TIMER_STOP); + if (cpuidle_enabled(drv, dev) == 0) { - if (broadcast) - clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &dev->cpu); + /* ask the governor for the next state */ + next_state = cpuidle_select(drv, dev); - entered_state = cpuidle_enter(drv, dev, next_state); + if (current_clr_polling_and_test()) { + dev->last_residency = 0; + entered_state = next_state; + local_irq_enable(); + } else { + trace_cpu_idle_rcuidle(next_state, dev->cpu); + + broadcast = !!(drv->states[next_state].flags & + CPUIDLE_FLAG_TIMER_STOP); + + if (broadcast) + clockevents_notify( + CLOCK_EVT_NOTIFY_BROADCAST_ENTER, + &dev->cpu); + + entered_state = cpuidle_enter(drv, dev, next_state); + + if (broadcast) + clockevents_notify( + CLOCK_EVT_NOTIFY_BROADCAST_EXIT, + &dev->cpu); - if (broadcast) - clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &dev->cpu); + trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu); + } - trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu); + /* give the governor an opportunity to reflect on the outcome */ + cpuidle_reflect(dev, next_state); + } else { + if (current_clr_polling_and_test()) + local_irq_enable(); + else + arch_cpu_idle(); + } + __current_set_polling(); - /* give the governor an opportunity to reflect on the outcome */ - cpuidle_reflect(dev, entered_state); -out: if (WARN_ON_ONCE(irqs_disabled())) local_irq_enable(); @@ -139,7 +151,7 @@ static void cpu_idle_loop(void) local_irq_disable(); arch_cpu_idle_enter(); - + /* * In poll mode we reenable interrupts and spin. * @@ -149,16 +161,11 @@ static void cpu_idle_loop(void) * know that the IPI is going to arrive right * away */ - if (cpu_idle_force_poll || tick_check_broadcast_expired()) { + if (cpu_idle_force_poll || tick_check_broadcast_expired()) cpu_idle_poll(); - } else { - if (!current_clr_polling_and_test()) { - cpuidle_idle_call(); - } else { - local_irq_enable(); - } - __current_set_polling(); - } + else + cpuidle_idle_call(); + arch_cpu_idle_exit(); /* * We need to test and propagate the TIF_NEED_RESCHED