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 1c2cdd59ccd..8a22c27219d 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c @@ -118,9 +118,10 @@ asmlinkage void do_softirq(void)  				         "a" (__do_softirq)  				     : "0", "1", "2", "3", "4", "5", "14",  				       "cc", "memory" ); -		} else +		} else {  			/* We are already on the async stack. */  			__do_softirq(); +		}  	}  	local_irq_restore(flags); @@ -192,11 +193,12 @@ int unregister_external_interrupt(u16 code, ext_int_handler_t handler)  	int index = ext_hash(code);  	spin_lock_irqsave(&ext_int_hash_lock, flags); -	list_for_each_entry_rcu(p, &ext_int_hash[index], entry) +	list_for_each_entry_rcu(p, &ext_int_hash[index], entry) {  		if (p->code == code && p->handler == handler) {  			list_del_rcu(&p->entry);  			kfree_rcu(p, rcu);  		} +	}  	spin_unlock_irqrestore(&ext_int_hash_lock, flags);  	return 0;  } @@ -211,9 +213,10 @@ void __irq_entry do_extint(struct pt_regs *regs, struct ext_code ext_code,  	old_regs = set_irq_regs(regs);  	irq_enter(); -	if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator) +	if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator) {  		/* Serve timer interrupts first. */  		clock_comparator_work(); +	}  	kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++;  	if (ext_code.code != 0x1004)  		__get_cpu_var(s390_idle).nohz_delay = 1;  |