diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2008-08-01 10:39:11 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-08-01 10:39:30 -0400 |
commit | 934b2857cc576ae53c92a66e63fce7ddcfa74691 (patch) | |
tree | 4a8e261d16739624bb91ed9f56062ec5f7401227 /include/asm-s390/hardirq.h | |
parent | 3a95e8eb34f595a0144adb6e5513d456319bd8a5 (diff) |
[S390] nohz/sclp: disable timer on synchronous waits.
sclp_sync_wait wait synchronously for an sclp interrupt and disables
timer interrupts. However on the irq enter paths there is an extra
check if a timer interrupt would be due and calls the timer callback.
This would schedule softirqs in the wrong context.
So introduce local_tick_enable/disable which prevents this.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'include/asm-s390/hardirq.h')
-rw-r--r-- | include/asm-s390/hardirq.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/asm-s390/hardirq.h b/include/asm-s390/hardirq.h index 4b7cb964ff35..89ec7056da28 100644 --- a/include/asm-s390/hardirq.h +++ b/include/asm-s390/hardirq.h | |||
@@ -34,4 +34,18 @@ typedef struct { | |||
34 | 34 | ||
35 | void clock_comparator_work(void); | 35 | void clock_comparator_work(void); |
36 | 36 | ||
37 | static inline unsigned long long local_tick_disable(void) | ||
38 | { | ||
39 | unsigned long long old; | ||
40 | |||
41 | old = S390_lowcore.clock_comparator; | ||
42 | S390_lowcore.clock_comparator = -1ULL; | ||
43 | return old; | ||
44 | } | ||
45 | |||
46 | static inline void local_tick_enable(unsigned long long comp) | ||
47 | { | ||
48 | S390_lowcore.clock_comparator = comp; | ||
49 | } | ||
50 | |||
37 | #endif /* __ASM_HARDIRQ_H */ | 51 | #endif /* __ASM_HARDIRQ_H */ |