mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Len Brown <lenb@kernel.org>
To: linux-acpi@vger.kernel.org, linux-pm@lists.linux-foundation.org
Cc: linux-kernel@vger.kernel.org, Colin Cross <ccross@android.com>,
	Len Brown <len.brown@intel.com>
Subject: [PATCH 15/52] cpuidle: refactor out cpuidle_enter_state
Date: Tue, 24 Jul 2012 23:41:11 -0400	[thread overview]
Message-ID: <56cfbf74a17c40f3a741398103c9f5d5a6806715.1343187617.git.len.brown@intel.com> (raw)
In-Reply-To: <1343187708-19532-1-git-send-email-lenb@kernel.org>
In-Reply-To: <6af1c4fc5227af65092ebc848989693562bfa3e8.1343187617.git.len.brown@intel.com>

From: Colin Cross <ccross@android.com>

Split the code to enter a state and update the stats into a helper
function, cpuidle_enter_state, and export it.  This function will
be called by the coupled state code to handle entering the safe
state and the final coupled state.

Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Tested-by: Kevin Hilman <khilman@ti.com>
Signed-off-by: Colin Cross <ccross@android.com>
Reviewed-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
---
 drivers/cpuidle/cpuidle.c | 42 +++++++++++++++++++++++++++++-------------
 drivers/cpuidle/cpuidle.h |  2 ++
 2 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 2f0083a..3e3e3e4 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -103,6 +103,34 @@ int cpuidle_play_dead(void)
 }
 
 /**
+ * cpuidle_enter_state - enter the state and update stats
+ * @dev: cpuidle device for this cpu
+ * @drv: cpuidle driver for this cpu
+ * @next_state: index into drv->states of the state to enter
+ */
+int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
+		int next_state)
+{
+	int entered_state;
+
+	entered_state = cpuidle_enter_ops(dev, drv, next_state);
+
+	if (entered_state >= 0) {
+		/* Update cpuidle counters */
+		/* This can be moved to within driver enter routine
+		 * but that results in multiple copies of same code.
+		 */
+		dev->states_usage[entered_state].time +=
+				(unsigned long long)dev->last_residency;
+		dev->states_usage[entered_state].usage++;
+	} else {
+		dev->last_residency = 0;
+	}
+
+	return entered_state;
+}
+
+/**
  * cpuidle_idle_call - the main idle loop
  *
  * NOTE: no locks or semaphores should be used here
@@ -143,23 +171,11 @@ int cpuidle_idle_call(void)
 	trace_power_start_rcuidle(POWER_CSTATE, next_state, dev->cpu);
 	trace_cpu_idle_rcuidle(next_state, dev->cpu);
 
-	entered_state = cpuidle_enter_ops(dev, drv, next_state);
+	entered_state = cpuidle_enter_state(dev, drv, next_state);
 
 	trace_power_end_rcuidle(dev->cpu);
 	trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu);
 
-	if (entered_state >= 0) {
-		/* Update cpuidle counters */
-		/* This can be moved to within driver enter routine
-		 * but that results in multiple copies of same code.
-		 */
-		dev->states_usage[entered_state].time +=
-				(unsigned long long)dev->last_residency;
-		dev->states_usage[entered_state].usage++;
-	} else {
-		dev->last_residency = 0;
-	}
-
 	/* give the governor an opportunity to reflect on the outcome */
 	if (cpuidle_curr_governor->reflect)
 		cpuidle_curr_governor->reflect(dev, entered_state);
diff --git a/drivers/cpuidle/cpuidle.h b/drivers/cpuidle/cpuidle.h
index 7db1866..d8a3ccc 100644
--- a/drivers/cpuidle/cpuidle.h
+++ b/drivers/cpuidle/cpuidle.h
@@ -14,6 +14,8 @@ extern struct list_head cpuidle_detected_devices;
 extern struct mutex cpuidle_lock;
 extern spinlock_t cpuidle_driver_lock;
 extern int cpuidle_disabled(void);
+extern int cpuidle_enter_state(struct cpuidle_device *dev,
+		struct cpuidle_driver *drv, int next_state);
 
 /* idle loop */
 extern void cpuidle_install_idle_handler(void);
-- 
1.7.12.rc0


  parent reply	other threads:[~2012-07-25  3:42 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-25  3:40 ACPI & Power Management Patches for Linux-3.6-merge - part 1 Len Brown
2012-07-25  3:40 ` [PATCH 01/52] ACPICA: AML Parser: Fix two possible memory leaks in error path Len Brown
2012-07-25  3:40   ` [PATCH 02/52] ACPICA: Object dump routines: Use common function for string output Len Brown
2012-07-25  3:40   ` [PATCH 03/52] ACPICA: Lint fixes for acpi_write, no functional changes Len Brown
2012-07-25  3:41   ` [PATCH 04/52] ACPICA: Add support for multiple notify handlers Len Brown
2012-07-25  3:41   ` [PATCH 05/52] ACPICA: Update to version 20120420 Len Brown
2012-07-25  3:41   ` [PATCH 06/52] ACPICA: Disassembler: Add support for Operation Region externals Len Brown
2012-07-25  3:41   ` [PATCH 07/52] ACPICA: ACPI 5/iASL: Add support for PCC keyword Len Brown
2012-07-25  3:41   ` [PATCH 08/52] ACPICA: iASL: Improved pathname support Len Brown
2012-07-25  3:41   ` [PATCH 09/52] ACPICA: Remove argument of acpi_os_wait_events_complete Len Brown
2012-07-25  3:41   ` [PATCH 10/52] ACPICA: Add FADT error message for GAS BitWidth overflow Len Brown
2012-07-25  3:41   ` [PATCH 11/52] ACPICA: Update to version 20120518 Len Brown
2012-07-25  3:41   ` [PATCH 12/52] cpuidle: remove unused hrtimer_peek_ahead_timers() call Len Brown
2012-07-25  3:41   ` [PATCH 13/52] cpuidle: add checks to avoid NULL pointer dereference Len Brown
2012-07-25  3:41   ` [PATCH 14/52] ACPI Battery: Added capacity Len Brown
2012-07-25  3:41   ` Len Brown [this message]
2012-07-25  3:41   ` [PATCH 16/52] cpuidle: fix error handling in __cpuidle_register_device Len Brown
2012-07-25  3:41   ` [PATCH 17/52] cpuidle: add support for states that affect multiple cpus Len Brown
2012-07-25  3:41   ` [PATCH 18/52] cpuidle: coupled: add parallel barrier function Len Brown
2012-07-25  3:41   ` [PATCH 19/52] drivers/thermal/spear_thermal.c: add Device Tree probing capability Len Brown
2012-07-25  3:41   ` [PATCH 20/52] ACPI: Add an interface to evaluate _OST Len Brown
2012-07-25  3:41   ` [PATCH 21/52] ACPI: Add _OST support for sysfs eject Len Brown
2012-07-25  3:41   ` [PATCH 22/52] ACPI: Add _OST support for ACPI CPU hotplug Len Brown
2012-07-25  3:41   ` [PATCH 23/52] ACPI: Add _OST support for ACPI memory hotplug Len Brown
2012-07-25  3:41   ` [PATCH 24/52] ACPI: Add _OST support for ACPI container hotplug Len Brown
2012-07-25  3:41   ` [PATCH 25/52] ACPI: Set hotplug _OST support bit to _OSC Len Brown
2012-07-25  3:41   ` [PATCH 26/52] ACPI, PM, Specify lowest allowed state for device sleep state Len Brown
2012-07-25  3:41   ` [PATCH 27/52] intel_idle: initial IVB support Len Brown
2012-07-25  3:41   ` [PATCH 28/52] ACPI: remove acpi_pad MAINTAINERS entry Len Brown
2012-07-25  3:41   ` [PATCH 29/52] ACPI: acpi_pad: rename "power_saving" thread to "acpi_pad" thread Len Brown
2012-07-25  3:41   ` [PATCH 31/52] ACPICA: Disassembler: Emit descriptions for ACPI predefined names Len Brown
2012-07-25  3:41   ` [PATCH 32/52] ACPICA: Utilities: conditionally compile backslash removal function Len Brown
2012-07-25  3:41   ` [PATCH 33/52] ACPICA: Update comments; no functional change Len Brown
2012-07-25  3:41   ` [PATCH 34/52] ACPICA: Add support for implicit notify on multiple devices Len Brown
2012-07-25  3:41   ` [PATCH 35/52] ACPICA: Update to version 20120620 Len Brown
2012-07-25  3:41   ` [PATCH 36/52] ACPI: acpi_pad: tune round_robin_time Len Brown
2012-07-25  3:41   ` [PATCH 37/52] ACPICA: Split exception code utilities to a new file, utexcep.c Len Brown
2012-07-25  3:41   ` [PATCH 38/52] ACPICA: Add new interfaces for BIOS(firmware) errors and warnings Len Brown
2012-07-25  3:41   ` [PATCH 39/52] ACPICA: Table manager: deploy new firmware error/warning interfaces Len Brown
2012-07-25  3:41   ` [PATCH 40/52] ACPICA: Fix some comment fields Len Brown
2012-07-25  3:41   ` [PATCH 41/52] ACPICA: Add PCC address space to space ID decode function Len Brown
2012-07-25  3:41   ` [PATCH 42/52] ACPICA: Split file: tbxface.c -> tbxfload.c Len Brown
2012-07-25  3:41   ` [PATCH 43/52] ACPICA: Add new ACPI table load/unload external interfaces Len Brown
2012-07-25  3:41   ` [PATCH 44/52] ACPICA: Update header files copyrights to 2012 Len Brown
2012-07-25  3:41   ` [PATCH 45/52] ACPICA: AcpiSrc: Fix some translation issues for Linux conversion Len Brown
2012-07-25  3:41   ` [PATCH 46/52] ACPICA: Update to version 20120711 Len Brown
2012-07-25  3:41   ` [PATCH 47/52] tools/power: turbostat v2 - re-write for efficiency Len Brown
2012-07-25  3:41   ` [PATCH 48/52] tools/power: turbostat: fix large c1% issue Len Brown
2012-07-25 13:03     ` Konrad Rzeszutek Wilk
2012-07-25  3:41   ` [PATCH 49/52] ACPI/AC: prevent OOPS on some boxes due to missing check power_supply_register() return value check Len Brown
2012-07-25  3:41   ` [PATCH 50/52] Thermal: Make Thermal trip points writeable Len Brown
2012-07-25 11:13     ` Rafael J. Wysocki
2012-07-25 11:15       ` [linux-pm] " R, Durgadoss
2012-07-25  3:41   ` [PATCH 51/52] Thermal: Add Hysteresis attributes Len Brown
2012-07-25  3:41   ` [PATCH 52/52] Thermal: Documentation update Len Brown
2012-07-25  6:47 ` [linux-pm] ACPI & Power Management Patches for Linux-3.6-merge - part 1 Amit Kachhap

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56cfbf74a17c40f3a741398103c9f5d5a6806715.1343187617.git.len.brown@intel.com \
    --to=lenb@kernel.org \
    --cc=ccross@android.com \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®