[S390] Add per-cpu idle time / idle count sysfs attributes.
Add two new sysfs entries per cpu: idle_count and idle_time. idle_count contains the number of times a cpu went into idle state. idle_time contains the time a cpu spent in idle state in microseconds. This can be used e.g. by powertop to tell how often idle state is entered and left. # cat /sys/devices/system/cpu/cpu0/idle_count 504 # cat /sys/devices/system/cpu/cpu0/idle_time 469734037 us Cc: Arjan van de Ven <arjan@infradead.org> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
committed by
Martin Schwidefsky
parent
32346f47dd
commit
fae8b22d3e
@ -44,6 +44,7 @@
|
||||
#include <asm/processor.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/timer.h>
|
||||
#include <asm/cpu.h>
|
||||
|
||||
asmlinkage void ret_from_fork(void) asm ("ret_from_fork");
|
||||
|
||||
@ -91,6 +92,14 @@ EXPORT_SYMBOL(unregister_idle_notifier);
|
||||
|
||||
void do_monitor_call(struct pt_regs *regs, long interruption_code)
|
||||
{
|
||||
struct s390_idle_data *idle;
|
||||
|
||||
idle = &__get_cpu_var(s390_idle);
|
||||
spin_lock(&idle->lock);
|
||||
idle->idle_time += get_clock() - idle->idle_enter;
|
||||
idle->in_idle = 0;
|
||||
spin_unlock(&idle->lock);
|
||||
|
||||
/* disable monitor call class 0 */
|
||||
__ctl_clear_bit(8, 15);
|
||||
|
||||
@ -105,6 +114,7 @@ extern void s390_handle_mcck(void);
|
||||
static void default_idle(void)
|
||||
{
|
||||
int cpu, rc;
|
||||
struct s390_idle_data *idle;
|
||||
|
||||
/* CPU is going idle. */
|
||||
cpu = smp_processor_id();
|
||||
@ -142,6 +152,12 @@ static void default_idle(void)
|
||||
return;
|
||||
}
|
||||
|
||||
idle = &__get_cpu_var(s390_idle);
|
||||
spin_lock(&idle->lock);
|
||||
idle->idle_count++;
|
||||
idle->in_idle = 1;
|
||||
idle->idle_enter = get_clock();
|
||||
spin_unlock(&idle->lock);
|
||||
trace_hardirqs_on();
|
||||
/* Wait for external, I/O or machine check interrupt. */
|
||||
__load_psw_mask(psw_kernel_bits | PSW_MASK_WAIT |
|
||||
|
Reference in New Issue
Block a user