diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-03-11 11:59:27 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-03-11 11:59:28 -0400 |
commit | 4c1051e37a0e2a941115c6fb7ba08c318f25a0f9 (patch) | |
tree | f228f1a90c0d7abb8308f275d0906dd7d1588ba3 /arch/s390/kernel/entry.h | |
parent | 8b646bd759086f6090fe27acf414c0b5faa737f4 (diff) |
[S390] rework idle code
Whenever the cpu loads an enabled wait PSW it will appear as idle to the
underlying host system. The code in default_idle calls vtime_stop_cpu
which does the necessary voodoo to get the cpu time accounting right.
The udelay code just loads an enabled wait PSW. To correct this rework
the vtime_stop_cpu/vtime_start_cpu logic and move the difficult parts
to entry[64].S, vtime_stop_cpu can now be called from anywhere and
vtime_start_cpu is gone. The correction of the cpu time during wakeup
from an enabled wait PSW is done with a critical section in entry[64].S.
As vtime_start_cpu is gone, s390_idle_check can be removed as well.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/entry.h')
-rw-r--r-- | arch/s390/kernel/entry.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h index 92b1617d0c95..4984785e3078 100644 --- a/arch/s390/kernel/entry.h +++ b/arch/s390/kernel/entry.h | |||
@@ -4,7 +4,8 @@ | |||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/signal.h> | 5 | #include <linux/signal.h> |
6 | #include <asm/ptrace.h> | 6 | #include <asm/ptrace.h> |
7 | 7 | #include <asm/cputime.h> | |
8 | #include <asm/timer.h> | ||
8 | 9 | ||
9 | extern void (*pgm_check_table[128])(struct pt_regs *); | 10 | extern void (*pgm_check_table[128])(struct pt_regs *); |
10 | extern void *restart_stack; | 11 | extern void *restart_stack; |
@@ -16,6 +17,8 @@ void io_int_handler(void); | |||
16 | void mcck_int_handler(void); | 17 | void mcck_int_handler(void); |
17 | void restart_int_handler(void); | 18 | void restart_int_handler(void); |
18 | void restart_call_handler(void); | 19 | void restart_call_handler(void); |
20 | void psw_idle(struct s390_idle_data *, struct vtimer_queue *, | ||
21 | unsigned long, int); | ||
19 | 22 | ||
20 | asmlinkage long do_syscall_trace_enter(struct pt_regs *regs); | 23 | asmlinkage long do_syscall_trace_enter(struct pt_regs *regs); |
21 | asmlinkage void do_syscall_trace_exit(struct pt_regs *regs); | 24 | asmlinkage void do_syscall_trace_exit(struct pt_regs *regs); |