This patch removes cpuidle_get_bm_activity() and updates governors
accordingly.
Please Apply,
Adam
Change Summary:
drivers/cpuidle/driver.c | 13 ----------
drivers/cpuidle/governors/ladder.c | 46 -------------------------------------
drivers/cpuidle/governors/menu.c | 26 +-------------------
include/linux/cpuidle.h | 4 ---
4 files changed, 3 insertions(+), 86 deletions(-)
---
diff -urN a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c
--- a/drivers/cpuidle/driver.c 2007-08-15 21:51:46.000000000 -0400
+++ b/drivers/cpuidle/driver.c 2007-08-15 22:07:59.000000000 -0400
@@ -54,16 +54,3 @@
}
EXPORT_SYMBOL_GPL(cpuidle_unregister_driver);
-
-/**
- * cpuidle_get_bm_activity - determines if BM activity has occured
- */
-int cpuidle_get_bm_activity(void)
-{
- if (cpuidle_curr_driver->bm_check)
- return cpuidle_curr_driver->bm_check();
- else
- return 0;
-}
-
-EXPORT_SYMBOL_GPL(cpuidle_get_bm_activity);
diff -urN a/drivers/cpuidle/governors/ladder.c
b/drivers/cpuidle/governors/ladder.c
--- a/drivers/cpuidle/governors/ladder.c 2007-08-15 21:51:46.000000000
-0400
+++ b/drivers/cpuidle/governors/ladder.c 2007-08-15 22:23:18.000000000
-0400
@@ -24,24 +24,12 @@
#define PROMOTION_COUNT 4
#define DEMOTION_COUNT 1
-/*
- * bm_history -- bit-mask with a bit per jiffy of bus-master activity
- * 1000 HZ: 0xFFFFFFFF: 32 jiffies = 32ms
- * 800 HZ: 0xFFFFFFFF: 32 jiffies = 40ms
- * 100 HZ: 0x0000000F: 4 jiffies = 40ms
- * reduce history for more aggressive entry into C3
- */
-static unsigned int bm_history __read_mostly =
- (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1));
-module_param(bm_history, uint, 0644);
-
struct ladder_device_state {
struct {
u32 promotion_count;
u32 demotion_count;
u32 promotion_time;
u32 demotion_time;
- u32 bm;
} threshold;
struct {
int promotion_count;
@@ -51,9 +39,6 @@
struct ladder_device {
struct ladder_device_state states[CPUIDLE_STATE_MAX];
- unsigned int bm_check:1;
- unsigned long bm_check_timestamp;
- unsigned long bm_activity; /* FIXME: bm activity should be global */
int last_state_idx;
};
@@ -88,26 +73,6 @@
last_state = &ldev->states[last_idx];
- /* demote if within BM threshold */
- if (ldev->bm_check) {
- unsigned long diff;
-
- diff = jiffies - ldev->bm_check_timestamp;
- if (diff > 31)
- diff = 31;
-
- ldev->bm_activity <<= diff;
- if (cpuidle_get_bm_activity())
- ldev->bm_activity |= ((1 << diff) - 1);
-
- ldev->bm_check_timestamp = jiffies;
- if ((last_idx > 0) &&
- (last_state->threshold.bm & ldev->bm_activity)) {
- ladder_do_selection(ldev, last_idx, last_idx - 1);
- return last_idx - 1;
- }
- }
-
if (dev->states[last_idx].flags & CPUIDLE_FLAG_TIME_VALID)
last_residency = cpuidle_get_last_residency(dev) -
dev->states[last_idx].exit_latency;
else
@@ -146,14 +111,12 @@
*/
static int ladder_enable_device(struct cpuidle_device *dev)
{
- int i, bm_check = 0;
+ int i;
struct ladder_device *ldev = &per_cpu(ladder_devices, dev->cpu);
struct ladder_device_state *lstate;
struct cpuidle_state *state;
ldev->last_state_idx = 0;
- ldev->bm_check_timestamp = 0;
- ldev->bm_activity = 0;
for (i = 0; i < dev->state_count; i++) {
state = &dev->states[i];
@@ -169,15 +132,8 @@
lstate->threshold.promotion_time = state->exit_latency;
if (i > 0)
lstate->threshold.demotion_time = state->exit_latency;
- if (state->flags & CPUIDLE_FLAG_CHECK_BM) {
- lstate->threshold.bm = bm_history;
- bm_check = 1;
- } else
- lstate->threshold.bm = 0;
}
- ldev->bm_check = bm_check;
-
return 0;
}
diff -urN a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
--- a/drivers/cpuidle/governors/menu.c 2007-08-15 21:57:19.000000000 -0400
+++ b/drivers/cpuidle/governors/menu.c 2007-08-15 22:24:10.000000000 -0400
@@ -14,7 +14,6 @@
#include <linux/hrtimer.h>
#include <linux/tick.h>
-#define BM_HOLDOFF 2000 /* 2 ms */
#define BREAK_FUZZ 4 /* 4 us */
struct menu_device {
@@ -24,10 +23,6 @@
unsigned int predicted_us;
unsigned int last_measured_us;
unsigned int elapsed_us;
-
- int deepest_bm_state;
- unsigned int bm_elapsed_us;
- unsigned int bm_holdoff_us;
};
static DEFINE_PER_CPU(struct menu_device, menu_devices);
@@ -39,20 +34,14 @@
static int menu_select(struct cpuidle_device *dev)
{
struct menu_device *data = &__get_cpu_var(menu_devices);
- int i, max_state = dev->state_count;
+ int i;
/* determine the expected residency time */
data->expected_us =
(u32) ktime_to_ns(tick_nohz_get_sleep_length()) / 1000;
- /* determine the maximum state compatible with current BM status */
- if (cpuidle_get_bm_activity())
- data->bm_elapsed_us = 0;
- if (data->bm_elapsed_us <= data->bm_holdoff_us)
- max_state = data->deepest_bm_state + 1;
-
/* find the deepest idle state that satisfies our constraints */
- for (i = 1; i < max_state; i++) {
+ for (i = 1; i < dev->state_count; i++) {
struct cpuidle_state *s = &dev->states[i];
if (s->target_residency > data->expected_us)
@@ -91,10 +80,6 @@
if (!(target->flags & CPUIDLE_FLAG_TIME_VALID))
measured_us = USEC_PER_SEC / HZ;
- /* Update time elapsed since last BM detection */
- if (data->bm_elapsed_us <= data->bm_holdoff_us)
- data->bm_elapsed_us += measured_us;
-
/* Predict time remaining until next break event */
if (measured_us + BREAK_FUZZ < data->expected_us -
target->exit_latency) {
data->predicted_us = max(measured_us, data->last_measured_us);
@@ -116,15 +101,8 @@
static int menu_enable_device(struct cpuidle_device *dev)
{
struct menu_device *data = &per_cpu(menu_devices, dev->cpu);
- int i;
memset(data, 0, sizeof(struct menu_device));
- data->bm_holdoff_us = BM_HOLDOFF;
-
- for (i = 1; i < dev->state_count; i++)
- if (dev->states[i].flags & CPUIDLE_FLAG_CHECK_BM)
- break;
- data->deepest_bm_state = i - 1;
return 0;
}
diff -urN a/include/linux/cpuidle.h b/include/linux/cpuidle.h
--- a/include/linux/cpuidle.h 2007-08-15 21:52:11.000000000 -0400
+++ b/include/linux/cpuidle.h 2007-08-15 22:07:40.000000000 -0400
@@ -114,7 +114,6 @@
struct cpuidle_driver {
char name[CPUIDLE_NAME_LEN];
- int (*bm_check) (void);
struct module *owner;
};
@@ -169,15 +168,12 @@
extern int cpuidle_register_governor(struct cpuidle_governor *gov);
extern void cpuidle_unregister_governor(struct cpuidle_governor *gov);
-extern int cpuidle_get_bm_activity(void);
#else
static inline int cpuidle_register_governor(struct cpuidle_governor *gov)
{return 0;}
static inline void cpuidle_unregister_governor(struct cpuidle_governor *gov) {
}
-static inline int cpuidle_get_bm_activity(void)
-{return 0;}
#endif
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html