From: Trinabh Gupta <trinabh@linux.vnet.ibm.com>
To: arjan@linux.intel.com, peterz@infradead.org, lenb@kernel.org,
suresh.b.siddha@intel.com, benh@kernel.crashing.org,
venki@google.com, ak@linux.intel.com
Cc: linux-kernel@vger.kernel.org, sfr@canb.auug.org.au
Subject: [RFC PATCH V4 5/5] cpuidle: cpuidle driver for apm
Date: Tue, 22 Mar 2011 18:03:40 +0530 [thread overview]
Message-ID: <20110322123336.28725.29810.stgit@tringupt.in.ibm.com> (raw)
In-Reply-To: <20110322123208.28725.30945.stgit@tringupt.in.ibm.com>
Signed-off-by: Trinabh Gupta <trinabh@linux.vnet.ibm.com>
---
arch/x86/kernel/apm_32.c | 75 +++++++++++++++++++++++++++++++++++++---------
1 files changed, 60 insertions(+), 15 deletions(-)
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c
index 0e4f24c..22d40bf 100644
--- a/arch/x86/kernel/apm_32.c
+++ b/arch/x86/kernel/apm_32.c
@@ -882,8 +882,6 @@ static void apm_do_busy(void)
#define IDLE_CALC_LIMIT (HZ * 100)
#define IDLE_LEAKY_MAX 16
-static void (*original_pm_idle)(void) __read_mostly;
-
/**
* apm_cpu_idle - cpu idling for APM capable Linux
*
@@ -947,10 +945,7 @@ recalc:
break;
}
}
- if (original_pm_idle)
- original_pm_idle();
- else
- default_idle();
+ default_idle();
local_irq_disable();
jiffies_since_last_check = jiffies - last_jiffies;
if (jiffies_since_last_check > idle_period)
@@ -2256,6 +2251,63 @@ static struct dmi_system_id __initdata apm_dmi_table[] = {
{ }
};
+int apm_idle_wrapper(struct cpuidle_device *dev,
+ struct cpuidle_state *state)
+{
+ apm_cpu_idle();
+ return 0;
+}
+
+struct cpuidle_state state_apm_idle = {
+ .name = "APM-IDLE",
+ .desc = "APM idle routine",
+ .exit_latency = 1,
+ .target_residency = 1,
+ .enter = &apm_idle_wrapper,
+};
+
+static struct cpuidle_driver apm_idle_driver = {
+ .name = "apm_idle",
+ .owner = THIS_MODULE,
+ .priority = 1,
+};
+
+static int apm_setup_cpuidle(int cpu)
+{
+ struct cpuidle_device *dev = kzalloc(sizeof(struct cpuidle_device),
+ GFP_KERNEL);
+ int count = CPUIDLE_DRIVER_STATE_START;
+ dev->cpu = cpu;
+ dev->drv = &apm_idle_driver;
+
+ dev->states[count] = state_apm_idle;
+ count++;
+
+ dev->state_count = count;
+
+ if (cpuidle_register_device(dev))
+ return -EIO;
+ return 0;
+}
+
+static int apm_idle_init(void)
+{
+ int retval, i;
+ retval = cpuidle_register_driver(&apm_idle_driver);
+
+ for_each_online_cpu(i) {
+ apm_setup_cpuidle(i);
+ }
+
+ return 0;
+}
+
+static void apm_idle_exit(void)
+{
+ cpuidle_unregister_driver(&apm_idle_driver);
+ return;
+}
+
/*
* Just start the APM thread. We do NOT want to do APM BIOS
* calls from anything but the APM thread, if for no other reason
@@ -2393,8 +2445,7 @@ static int __init apm_init(void)
if (HZ != 100)
idle_period = (idle_period * HZ) / 100;
if (idle_threshold < 100) {
- original_pm_idle = pm_idle;
- pm_idle = apm_cpu_idle;
+ apm_idle_init();
set_pm_idle = 1;
}
@@ -2406,13 +2457,7 @@ static void __exit apm_exit(void)
int error;
if (set_pm_idle) {
- pm_idle = original_pm_idle;
- /*
- * We are about to unload the current idle thread pm callback
- * (pm_idle), Wait for all processors to update cached/local
- * copies of pm_idle before proceeding.
- */
- cpu_idle_wait();
+ apm_idle_exit();
}
if (((apm_info.bios.flags & APM_BIOS_DISENGAGED) == 0)
&& (apm_info.connection_version > 0x0100)) {
next prev parent reply other threads:[~2011-03-22 12:33 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-22 12:32 [RFC PATCH V4 0/5] cpuidle: Cleanup pm_idle and include driver/cpuidle.c in-kernel Trinabh Gupta
2011-03-22 12:32 ` [RFC PATCH V4 1/5] cpuidle: Remove pm_idle pointer for x86 Trinabh Gupta
2011-03-23 1:00 ` Stephen Rothwell
2011-03-23 10:10 ` Trinabh Gupta
2011-03-22 12:32 ` [RFC PATCH V4 2/5] cpuidle: list based cpuidle driver registration and selection Trinabh Gupta
2011-03-23 2:59 ` Len Brown
2011-03-23 9:22 ` Trinabh Gupta
2011-03-23 20:51 ` Len Brown
2011-03-24 4:41 ` Len Brown
2011-03-24 14:13 ` Trinabh Gupta
2011-03-24 16:52 ` Vaidyanathan Srinivasan
2011-03-25 7:13 ` Len Brown
2011-03-25 7:05 ` Len Brown
2011-03-25 15:35 ` [Xen-devel] " Konrad Rzeszutek Wilk
2011-03-31 2:25 ` Len Brown
2011-03-22 12:33 ` [RFC PATCH V4 3/5] cpuidle: default idle driver for x86 Trinabh Gupta
2011-03-23 3:13 ` Len Brown
2011-03-23 9:31 ` Trinabh Gupta
2011-03-24 16:32 ` Vaidyanathan Srinivasan
2011-03-22 12:33 ` [RFC PATCH V4 4/5] cpuidle: driver for xen Trinabh Gupta
2011-03-22 14:50 ` Konrad Rzeszutek Wilk
2011-03-23 9:57 ` Trinabh Gupta
2011-03-24 7:18 ` Len Brown
2011-03-24 12:05 ` Konrad Rzeszutek Wilk
2011-03-25 7:19 ` Len Brown
2011-03-25 14:43 ` [Xen-devel] " Jeremy Fitzhardinge
2011-03-25 14:38 ` Jeremy Fitzhardinge
2011-03-31 2:02 ` Len Brown
2011-03-31 21:26 ` Len Brown
2011-03-31 22:36 ` Jeremy Fitzhardinge
2011-04-01 3:03 ` Len Brown
2011-03-22 12:33 ` Trinabh Gupta [this message]
2011-03-23 1:14 ` [RFC PATCH V4 5/5] cpuidle: cpuidle driver for apm Stephen Rothwell
2011-03-23 10:25 ` Trinabh Gupta
2011-03-23 20:32 ` Len Brown
2011-03-24 14:28 ` Trinabh Gupta
2011-03-24 16:21 ` Vaidyanathan Srinivasan
2011-03-25 7:24 ` Len Brown
2011-03-25 18:01 ` Vaidyanathan Srinivasan
2011-03-31 2:17 ` cpuidle asymmetry (was Re: [RFC PATCH V4 5/5] cpuidle: cpuidle driver for apm) Len Brown
2011-03-31 13:18 ` Peter Zijlstra
2011-04-01 4:09 ` Len Brown
2011-04-01 8:15 ` Dipankar Sarma
2011-04-01 14:38 ` Arjan van de Ven
2011-04-03 16:18 ` Dipankar Sarma
2011-04-01 14:02 ` Peter Zijlstra
2011-04-04 14:32 ` Dipankar Sarma
2011-04-05 15:01 ` Peter Zijlstra
2011-04-05 15:48 ` Dipankar Sarma
2011-04-01 7:02 ` Trinabh Gupta
2011-03-24 4:27 ` [RFC PATCH V4 5/5] cpuidle: cpuidle driver for apm Len Brown
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=20110322123336.28725.29810.stgit@tringupt.in.ibm.com \
--to=trinabh@linux.vnet.ibm.com \
--cc=ak@linux.intel.com \
--cc=arjan@linux.intel.com \
--cc=benh@kernel.crashing.org \
--cc=lenb@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=sfr@canb.auug.org.au \
--cc=suresh.b.siddha@intel.com \
--cc=venki@google.com \
/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®