63 lines
2.0 KiB
Diff
63 lines
2.0 KiB
Diff
>From 60851b131900af03bf013afef69f3bcdbb04f1d6 Mon Sep 17 00:00:00 2001
|
|
From: Arjan van de Ven <arjan@linux.intel.com>
|
|
Date: Sun, 18 Apr 2010 10:41:30 -0700
|
|
Subject: [PATCH 3/7] sched: update the idle statistics in get_cpu_idle_time_us()
|
|
Patch-mainline: in -mm tree as of 19 Apr 2010
|
|
|
|
Right now, get_cpu_idle_time_us() only reports the idle statistics
|
|
upto the point the CPU entered last idle; not what is valid right now.
|
|
|
|
This patch adds an update of the idle statistics to get_cpu_idle_time_us(),
|
|
so that calling this function always returns statistics that are accurate
|
|
at the point of the call.
|
|
|
|
This includes resetting the start of the idle time for accounting purposes
|
|
to avoid double accounting.
|
|
|
|
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
|
|
---
|
|
kernel/time/tick-sched.c | 7 ++++++-
|
|
1 files changed, 6 insertions(+), 1 deletions(-)
|
|
|
|
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
|
|
index ca2211d..7dbad2f 100644
|
|
--- a/kernel/time/tick-sched.c
|
|
+++ b/kernel/time/tick-sched.c
|
|
@@ -161,6 +161,7 @@ static void update_ts_time_stats(struct tick_sched *ts, ktime_t now)
|
|
if (ts->idle_active) {
|
|
delta = ktime_sub(now, ts->idle_entrytime);
|
|
ts->idle_sleeptime = ktime_add(ts->idle_sleeptime, delta);
|
|
+ ts->idle_entrytime = now;
|
|
}
|
|
}
|
|
|
|
@@ -205,14 +206,18 @@ static ktime_t tick_nohz_start_idle(struct tick_sched *ts)
|
|
u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time)
|
|
{
|
|
struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
|
|
+ ktime_t now;
|
|
|
|
if (!tick_nohz_enabled)
|
|
return -1;
|
|
|
|
+ now = ktime_get();
|
|
+ update_ts_time_stats(ts, now);
|
|
+
|
|
if (ts->idle_active)
|
|
*last_update_time = ktime_to_us(ts->idle_lastupdate);
|
|
else
|
|
- *last_update_time = ktime_to_us(ktime_get());
|
|
+ *last_update_time = ktime_to_us(now);
|
|
|
|
return ktime_to_us(ts->idle_sleeptime);
|
|
}
|
|
--
|
|
1.6.2.5
|
|
|
|
--
|
|
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
|
the body of a message to majordomo@vger.kernel.org
|
|
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
Please read the FAQ at http://www.tux.org/lkml/
|
|
|