Skip to content

Commit

Permalink
Merge branch 'pm-cpuidle'
Browse files Browse the repository at this point in the history
* pm-cpuidle:
  cpuidle: Remove time measurement in poll state
  cpuidle: Remove manual selection of the multiple driver support
  cpuidle: ladder governor - use macro instead of hardcoded value
  cpuidle: big_little: Fix build error
  cpuidle: menu governor - remove unused macro STDDEV_THRESH
  cpuidle: fix permission for driver name sysfs node
  cpuidle: move idle traces to cpuidle_enter_state()
  • Loading branch information
Rafael J. Wysocki committed Aug 5, 2014
2 parents 7672b96 + dd38c9d commit eada238
Show file tree
Hide file tree
Showing 8 changed files with 7 additions and 25 deletions.
7 changes: 1 addition & 6 deletions drivers/cpuidle/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,7 @@ config CPU_IDLE
if CPU_IDLE

config CPU_IDLE_MULTIPLE_DRIVERS
bool "Support multiple cpuidle drivers"
default n
help
Allows the cpuidle framework to use different drivers for each CPU.
This is useful if you have a system with different CPU latencies and
states. If unsure say N.
bool

config CPU_IDLE_GOV_LADDER
bool "Ladder governor (for periodic timer tick)"
Expand Down
1 change: 1 addition & 0 deletions drivers/cpuidle/Kconfig.arm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ config ARM_ARMADA_370_XP_CPUIDLE
config ARM_BIG_LITTLE_CPUIDLE
bool "Support for ARM big.LITTLE processors"
depends on ARCH_VEXPRESS_TC2_PM
depends on MCPM
select ARM_CPU_SUSPEND
select CPU_IDLE_MULTIPLE_DRIVERS
help
Expand Down
2 changes: 2 additions & 0 deletions drivers/cpuidle/cpuidle.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,13 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
ktime_t time_start, time_end;
s64 diff;

trace_cpu_idle_rcuidle(index, dev->cpu);
time_start = ktime_get();

entered_state = target_state->enter(dev, drv, index);

time_end = ktime_get();
trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu);

if (!cpuidle_state_is_coupled(dev, drv, entered_state))
local_irq_enable();
Expand Down
11 changes: 0 additions & 11 deletions drivers/cpuidle/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,24 +182,13 @@ static void __cpuidle_driver_init(struct cpuidle_driver *drv)
static int poll_idle(struct cpuidle_device *dev,
struct cpuidle_driver *drv, int index)
{
ktime_t t1, t2;
s64 diff;

t1 = ktime_get();
local_irq_enable();
if (!current_set_polling_and_test()) {
while (!need_resched())
cpu_relax();
}
current_clr_polling();

t2 = ktime_get();
diff = ktime_to_us(ktime_sub(t2, t1));
if (diff > INT_MAX)
diff = INT_MAX;

dev->last_residency = (int) diff;

return index;
}

Expand Down
4 changes: 2 additions & 2 deletions drivers/cpuidle/governors/ladder.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ static int ladder_enable_device(struct cpuidle_driver *drv,

ldev->last_state_idx = CPUIDLE_DRIVER_STATE_START;

for (i = 0; i < drv->state_count; i++) {
for (i = CPUIDLE_DRIVER_STATE_START; i < drv->state_count; i++) {
state = &drv->states[i];
lstate = &ldev->states[i];

Expand All @@ -156,7 +156,7 @@ static int ladder_enable_device(struct cpuidle_driver *drv,

if (i < drv->state_count - 1)
lstate->threshold.promotion_time = state->exit_latency;
if (i > 0)
if (i > CPUIDLE_DRIVER_STATE_START)
lstate->threshold.demotion_time = state->exit_latency;
}

Expand Down
1 change: 0 additions & 1 deletion drivers/cpuidle/governors/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
#define RESOLUTION 1024
#define DECAY 8
#define MAX_INTERESTING 50000
#define STDDEV_THRESH 400


/*
Expand Down
2 changes: 1 addition & 1 deletion drivers/cpuidle/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,7 @@ static void cpuidle_remove_state_sysfs(struct cpuidle_device *device)

#define define_one_driver_ro(_name, show) \
static struct cpuidle_driver_attr attr_driver_##_name = \
__ATTR(_name, 0644, show, NULL)
__ATTR(_name, 0444, show, NULL)

struct cpuidle_driver_kobj {
struct cpuidle_driver *drv;
Expand Down
4 changes: 0 additions & 4 deletions kernel/sched/idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,17 +147,13 @@ static void cpuidle_idle_call(void)
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &dev->cpu))
goto use_default;

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);

Expand Down

0 comments on commit eada238

Please sign in to comment.