diff options
Diffstat (limited to 'arch/s390/kernel/irq.c')
| -rw-r--r-- | arch/s390/kernel/irq.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c index 1c2cdd59ccd0..8a22c27219dd 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c | |||
| @@ -118,9 +118,10 @@ asmlinkage void do_softirq(void) | |||
| 118 | "a" (__do_softirq) | 118 | "a" (__do_softirq) |
| 119 | : "0", "1", "2", "3", "4", "5", "14", | 119 | : "0", "1", "2", "3", "4", "5", "14", |
| 120 | "cc", "memory" ); | 120 | "cc", "memory" ); |
| 121 | } else | 121 | } else { |
| 122 | /* We are already on the async stack. */ | 122 | /* We are already on the async stack. */ |
| 123 | __do_softirq(); | 123 | __do_softirq(); |
| 124 | } | ||
| 124 | } | 125 | } |
| 125 | 126 | ||
| 126 | local_irq_restore(flags); | 127 | local_irq_restore(flags); |
| @@ -192,11 +193,12 @@ int unregister_external_interrupt(u16 code, ext_int_handler_t handler) | |||
| 192 | int index = ext_hash(code); | 193 | int index = ext_hash(code); |
| 193 | 194 | ||
| 194 | spin_lock_irqsave(&ext_int_hash_lock, flags); | 195 | spin_lock_irqsave(&ext_int_hash_lock, flags); |
| 195 | list_for_each_entry_rcu(p, &ext_int_hash[index], entry) | 196 | list_for_each_entry_rcu(p, &ext_int_hash[index], entry) { |
| 196 | if (p->code == code && p->handler == handler) { | 197 | if (p->code == code && p->handler == handler) { |
| 197 | list_del_rcu(&p->entry); | 198 | list_del_rcu(&p->entry); |
| 198 | kfree_rcu(p, rcu); | 199 | kfree_rcu(p, rcu); |
| 199 | } | 200 | } |
| 201 | } | ||
| 200 | spin_unlock_irqrestore(&ext_int_hash_lock, flags); | 202 | spin_unlock_irqrestore(&ext_int_hash_lock, flags); |
| 201 | return 0; | 203 | return 0; |
| 202 | } | 204 | } |
| @@ -211,9 +213,10 @@ void __irq_entry do_extint(struct pt_regs *regs, struct ext_code ext_code, | |||
| 211 | 213 | ||
| 212 | old_regs = set_irq_regs(regs); | 214 | old_regs = set_irq_regs(regs); |
| 213 | irq_enter(); | 215 | irq_enter(); |
| 214 | if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator) | 216 | if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator) { |
| 215 | /* Serve timer interrupts first. */ | 217 | /* Serve timer interrupts first. */ |
| 216 | clock_comparator_work(); | 218 | clock_comparator_work(); |
| 219 | } | ||
| 217 | kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++; | 220 | kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++; |
| 218 | if (ext_code.code != 0x1004) | 221 | if (ext_code.code != 0x1004) |
| 219 | __get_cpu_var(s390_idle).nohz_delay = 1; | 222 | __get_cpu_var(s390_idle).nohz_delay = 1; |
