Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
* 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (23 commits) time, s390: Get rid of compile warning dw_apb_timer: constify clocksource name time: Cleanup old CONFIG_GENERIC_TIME references that snuck in time: Change jiffies_to_clock_t() argument type to unsigned long alarmtimers: Fix error handling clocksource: Make watchdog reset lockless posix-cpu-timers: Cure SMP accounting oddities s390: Use direct ktime path for s390 clockevent device clockevents: Add direct ktime programming function clockevents: Make minimum delay adjustments configurable nohz: Remove "Switched to NOHz mode" debugging messages proc: Consider NO_HZ when printing idle and iowait times nohz: Make idle/iowait counter update conditional nohz: Fix update_ts_time_stat idle accounting cputime: Clean up cputime_to_usecs and usecs_to_cputime macros alarmtimers: Rework RTC device selection using class interface alarmtimers: Add try_to_cancel functionality alarmtimers: Add more refined alarm state tracking alarmtimers: Remove period from alarm structure alarmtimers: Remove interval cap limit hack ...
This commit is contained in:
@ -10,6 +10,7 @@
|
||||
#include <linux/time.h>
|
||||
#include <linux/irqnr.h>
|
||||
#include <asm/cputime.h>
|
||||
#include <linux/tick.h>
|
||||
|
||||
#ifndef arch_irq_stat_cpu
|
||||
#define arch_irq_stat_cpu(cpu) 0
|
||||
@ -21,6 +22,35 @@
|
||||
#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));
|
||||
} 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;
|
||||
@ -42,9 +72,8 @@ static int show_stat(struct seq_file *p, void *v)
|
||||
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, kstat_cpu(i).cpustat.idle);
|
||||
idle = cputime64_add(idle, arch_idle_time(i));
|
||||
iowait = cputime64_add(iowait, kstat_cpu(i).cpustat.iowait);
|
||||
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);
|
||||
@ -76,14 +105,12 @@ static int show_stat(struct seq_file *p, void *v)
|
||||
(unsigned long long)cputime64_to_clock_t(guest),
|
||||
(unsigned long long)cputime64_to_clock_t(guest_nice));
|
||||
for_each_online_cpu(i) {
|
||||
|
||||
/* Copy values here to work around gcc-2.95.3, gcc-2.96 */
|
||||
user = kstat_cpu(i).cpustat.user;
|
||||
nice = kstat_cpu(i).cpustat.nice;
|
||||
system = kstat_cpu(i).cpustat.system;
|
||||
idle = kstat_cpu(i).cpustat.idle;
|
||||
idle = cputime64_add(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;
|
||||
|
Reference in New Issue
Block a user