diff options
Diffstat (limited to 'arch/blackfin/kernel')
| -rw-r--r-- | arch/blackfin/kernel/gptimers.c | 2 | ||||
| -rw-r--r-- | arch/blackfin/kernel/time-ts.c | 8 | 
2 files changed, 8 insertions, 2 deletions
diff --git a/arch/blackfin/kernel/gptimers.c b/arch/blackfin/kernel/gptimers.c index cdbe075de1dc..8b81dc04488a 100644 --- a/arch/blackfin/kernel/gptimers.c +++ b/arch/blackfin/kernel/gptimers.c @@ -268,7 +268,7 @@ void disable_gptimers(uint16_t mask)  	_disable_gptimers(mask);  	for (i = 0; i < MAX_BLACKFIN_GPTIMERS; ++i)  		if (mask & (1 << i)) -			group_regs[BFIN_TIMER_OCTET(i)]->status |= trun_mask[i]; +			group_regs[BFIN_TIMER_OCTET(i)]->status = trun_mask[i];  	SSYNC();  }  EXPORT_SYMBOL(disable_gptimers); diff --git a/arch/blackfin/kernel/time-ts.c b/arch/blackfin/kernel/time-ts.c index 8c9a43daf80f..cdb4beb6bc8f 100644 --- a/arch/blackfin/kernel/time-ts.c +++ b/arch/blackfin/kernel/time-ts.c @@ -206,8 +206,14 @@ irqreturn_t bfin_gptmr0_interrupt(int irq, void *dev_id)  {  	struct clock_event_device *evt = dev_id;  	smp_mb(); -	evt->event_handler(evt); +	/* +	 * We want to ACK before we handle so that we can handle smaller timer +	 * intervals.  This way if the timer expires again while we're handling +	 * things, we're more likely to see that 2nd int rather than swallowing +	 * it by ACKing the int at the end of this handler. +	 */  	bfin_gptmr0_ack(); +	evt->event_handler(evt);  	return IRQ_HANDLED;  }  | 
