From: Stephen Rothwell Date: Fri, 4 Nov 2011 03:37:32 +0000 (+1100) Subject: Merge remote-tracking branch 'cputime/cputime' X-Git-Tag: next-20111104~18 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=ac38e6cc0c34148ac72507ad83a04d25b7e84db5;p=karo-tx-linux.git Merge remote-tracking branch 'cputime/cputime' Conflicts: fs/proc/stat.c include/asm-generic/cputime.h kernel/sched_stats.h --- ac38e6cc0c34148ac72507ad83a04d25b7e84db5 diff --cc fs/proc/stat.c index 42b274da92c3,566cd04b27a1..f634cd73a5a9 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c @@@ -22,35 -21,6 +22,34 @@@ #define arch_idle_time(cpu) 0 #endif +static cputime64_t get_idle_time(int cpu) +{ + u64 idle_time = get_cpu_idle_time_us(cpu, NULL); + cputime64_t idle; + + if (idle_time == -1ULL) { + /* !NO_HZ so we can rely on cpustat.idle */ - idle = kstat_cpu(cpu).cpustat.idle; - idle = cputime64_add(idle, arch_idle_time(cpu)); ++ idle = kstat_cpu(cpu).cpustat.idle + arch_idle_time(cpu); + } else + idle = usecs_to_cputime(idle_time); + + return idle; +} + +static cputime64_t get_iowait_time(int cpu) +{ + u64 iowait_time = get_cpu_iowait_time_us(cpu, NULL); + cputime64_t iowait; + + if (iowait_time == -1ULL) + /* !NO_HZ so we can rely on cpustat.iowait */ + iowait = kstat_cpu(cpu).cpustat.iowait; + else + iowait = usecs_to_cputime(iowait_time); + + return iowait; +} + static int show_stat(struct seq_file *p, void *v) { int i, j; @@@ -69,17 -39,16 +68,16 @@@ jif = boottime.tv_sec; for_each_possible_cpu(i) { - user = cputime64_add(user, kstat_cpu(i).cpustat.user); - nice = cputime64_add(nice, kstat_cpu(i).cpustat.nice); - system = cputime64_add(system, kstat_cpu(i).cpustat.system); - idle = cputime64_add(idle, get_idle_time(i)); - iowait = cputime64_add(iowait, get_iowait_time(i)); - irq = cputime64_add(irq, kstat_cpu(i).cpustat.irq); - softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq); - steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal); - guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest); - guest_nice = cputime64_add(guest_nice, - kstat_cpu(i).cpustat.guest_nice); + user += kstat_cpu(i).cpustat.user; + nice += kstat_cpu(i).cpustat.nice; + system += kstat_cpu(i).cpustat.system; - idle += kstat_cpu(i).cpustat.idle + arch_idle_time(i); - iowait += kstat_cpu(i).cpustat.iowait; ++ idle += get_idle_time(i); ++ iowait += get_iowait_time(i); + irq += kstat_cpu(i).cpustat.irq; + softirq += kstat_cpu(i).cpustat.softirq; + steal += kstat_cpu(i).cpustat.steal; + guest += kstat_cpu(i).cpustat.guest; + guest_nice += kstat_cpu(i).cpustat.guest_nice; sum += kstat_cpu_irqs_sum(i); sum += arch_irq_stat_cpu(i); diff --cc include/asm-generic/cputime.h index 62ce6823c0f2,77202e2c9fc5..d88781bce990 --- a/include/asm-generic/cputime.h +++ b/include/asm-generic/cputime.h @@@ -38,8 -23,10 +23,10 @@@ typedef u64 __nocast cputime64_t /* * Convert cputime to microseconds and back. */ - #define cputime_to_usecs(__ct) jiffies_to_usecs(__ct) - #define usecs_to_cputime(__msecs) usecs_to_jiffies(__msecs) + #define cputime_to_usecs(__ct) \ - jiffies_to_usecs(cputime_to_jiffies(__ct)); ++ jiffies_to_usecs(cputime_to_jiffies(__ct)) + #define usecs_to_cputime(__msecs) \ - jiffies_to_cputime(usecs_to_jiffies(__msecs)); ++ jiffies_to_cputime(usecs_to_jiffies(__msecs)) /* * Convert cputime to seconds and back. diff --cc kernel/sched_stats.h index 87f9e36ea56e,a455e625fa10..4b71dbef271d --- a/kernel/sched_stats.h +++ b/kernel/sched_stats.h @@@ -282,10 -282,9 +282,9 @@@ static inline void account_group_user_t if (!cputimer->running) return; - spin_lock(&cputimer->lock); + raw_spin_lock(&cputimer->lock); - cputimer->cputime.utime = - cputime_add(cputimer->cputime.utime, cputime); + cputimer->cputime.utime += cputime; - spin_unlock(&cputimer->lock); + raw_spin_unlock(&cputimer->lock); } /** @@@ -306,10 -305,9 +305,9 @@@ static inline void account_group_system if (!cputimer->running) return; - spin_lock(&cputimer->lock); + raw_spin_lock(&cputimer->lock); - cputimer->cputime.stime = - cputime_add(cputimer->cputime.stime, cputime); + cputimer->cputime.stime += cputime; - spin_unlock(&cputimer->lock); + raw_spin_unlock(&cputimer->lock); } /**