[S390] idle time accounting vs. machine checks
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 17 May 2010 08:00:03 +0000 (10:00 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Mon, 17 May 2010 08:00:15 +0000 (10:00 +0200)
commit6377981faf1a4425b0531e577736ef03df97c8f6
treef690c5d357413cb6f26c8463519ad2b1f8800851
parent6a2df3a87276cdc08fd87070d09ea18d1fb9d622
[S390] idle time accounting vs. machine checks

A machine check can interrupt the i/o and external interrupt handler
anytime. If the machine check occurs while the interrupt handler is
waking up from idle vtime_start_cpu can get executed a second time
and the int_clock / async_enter_timer values in the lowcore get
clobbered. This can confuse the cpu time accounting.
To fix this problem two changes are needed. First the machine check
handler has to use its own copies of int_clock and async_enter_timer,
named mcck_clock and mcck_enter_timer. Second the nested execution
of vtime_start_cpu has to be prevented. This is done in s390_idle_check
by checking the wait bit in the program status word.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/cputime.h
arch/s390/include/asm/lowcore.h
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/entry.S
arch/s390/kernel/entry64.S
arch/s390/kernel/nmi.c
arch/s390/kernel/s390_ext.c
arch/s390/kernel/vtime.c
drivers/s390/cio/cio.c