Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 312383
b: refs/heads/master
c: 84bf1bc
h: refs/heads/master
i:
  312381: 1bca280
  312379: c7f1085
  312375: ea8e03a
  312367: 7bcdd5f
  312351: b602c90
  312319: 30705be
v: v3
  • Loading branch information
Frederic Weisbecker committed Jun 11, 2012
1 parent c8aedf9 commit b3b0df5
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5b39939a40801f0c17e31adaf643d6e974227856
refs/heads/master: 84bf1bccc60cc64376125ea2eae05e4ba12f795b
24 changes: 14 additions & 10 deletions trunk/kernel/time/tick-sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -271,11 +271,11 @@ u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time)
}
EXPORT_SYMBOL_GPL(get_cpu_iowait_time_us);

static void tick_nohz_stop_sched_tick(struct tick_sched *ts,
ktime_t now, int cpu)
static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
ktime_t now, int cpu)
{
unsigned long seq, last_jiffies, next_jiffies, delta_jiffies;
ktime_t last_update, expires;
ktime_t last_update, expires, ret = { .tv64 = 0 };
struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
u64 time_delta;

Expand Down Expand Up @@ -358,6 +358,8 @@ static void tick_nohz_stop_sched_tick(struct tick_sched *ts,
if (ts->tick_stopped && ktime_equal(expires, dev->next_event))
goto out;

ret = expires;

/*
* nohz_stop_sched_tick can be called several times before
* the nohz_restart_sched_tick is called. This happens when
Expand All @@ -372,11 +374,6 @@ static void tick_nohz_stop_sched_tick(struct tick_sched *ts,
ts->tick_stopped = 1;
}

ts->idle_sleeps++;

/* Mark expires */
ts->idle_expires = expires;

/*
* If the expiration time == KTIME_MAX, then
* in this case we simply stop the tick timer.
Expand Down Expand Up @@ -407,6 +404,8 @@ static void tick_nohz_stop_sched_tick(struct tick_sched *ts,
ts->next_jiffies = next_jiffies;
ts->last_jiffies = last_jiffies;
ts->sleep_length = ktime_sub(dev->next_event, now);

return ret;
}

static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
Expand Down Expand Up @@ -445,7 +444,7 @@ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)

static void __tick_nohz_idle_enter(struct tick_sched *ts)
{
ktime_t now;
ktime_t now, expires;
int cpu = smp_processor_id();

now = tick_nohz_start_idle(cpu, ts);
Expand All @@ -454,7 +453,12 @@ static void __tick_nohz_idle_enter(struct tick_sched *ts)
int was_stopped = ts->tick_stopped;

ts->idle_calls++;
tick_nohz_stop_sched_tick(ts, now, cpu);

expires = tick_nohz_stop_sched_tick(ts, now, cpu);
if (expires.tv64 > 0LL) {
ts->idle_sleeps++;
ts->idle_expires = expires;
}

if (!was_stopped && ts->tick_stopped)
ts->idle_jiffies = ts->last_jiffies;
Expand Down

0 comments on commit b3b0df5

Please sign in to comment.