ckrm E17 memory controller
[linux-2.6.git] / kernel / sched.c
index a356f39..d2df77c 100644 (file)
@@ -298,6 +298,8 @@ static DEFINE_PER_CPU(struct runqueue, runqueues);
 #define task_rq(p)             cpu_rq(task_cpu(p))
 #define cpu_curr(cpu)          (cpu_rq(cpu)->curr)
 
+#define task_is_running(p)     (this_rq() == task_rq(p))
+
 /*
  * Default context-switch locking:
  */
@@ -2669,6 +2671,7 @@ switch_tasks:
        clear_tsk_need_resched(prev);
        rcu_qsctr_inc(task_cpu(prev));
 
+       add_delay_ts(prev, runcpu_total, prev->timestamp, now);
        prev->sleep_avg -= run_time;
        if ((long)prev->sleep_avg <= 0) {
                prev->sleep_avg = 0;
@@ -2679,6 +2682,8 @@ switch_tasks:
 
        sched_info_switch(prev, next);
        if (likely(prev != next)) {
+               add_delay_ts(next, waitcpu_total, next->timestamp, now);
+               inc_delay(next, runs);
                next->timestamp = now;
                rq->nr_switches++;
                rq->curr = next;
@@ -3484,9 +3489,12 @@ void __sched io_schedule(void)
 {
        struct runqueue *rq = this_rq();
 
+       def_delay_var(dstart);
+       start_delay_set(dstart, PF_IOWAIT);
        atomic_inc(&rq->nr_iowait);
        schedule();
        atomic_dec(&rq->nr_iowait);
+       add_io_delay(dstart);
 }
 
 EXPORT_SYMBOL(io_schedule);
@@ -3495,10 +3503,13 @@ long __sched io_schedule_timeout(long timeout)
 {
        struct runqueue *rq = this_rq();
        long ret;
+       def_delay_var(dstart);
 
+       start_delay_set(dstart,PF_IOWAIT);
        atomic_inc(&rq->nr_iowait);
        ret = schedule_timeout(timeout);
        atomic_dec(&rq->nr_iowait);
+       add_io_delay(dstart);
        return ret;
 }
 
@@ -4676,3 +4687,12 @@ void normalize_rt_tasks(void)
 }
 
 #endif /* CONFIG_MAGIC_SYSRQ */
+
+#ifdef CONFIG_DELAY_ACCT
+int task_running_sys(struct task_struct *p)
+{
+       return task_is_running(p);
+}
+EXPORT_SYMBOL_GPL(task_running_sys);
+#endif
+