Prechádzať zdrojové kódy

avr32: allow system timer to share interrupt to make OProfile work

The following patch allows the avr32_comparator interrupt to be shared.
This is necessary as the avr32 oprofile driver shares the irq group 0
with the timer.

To make OProfile actually work on AVR32, a small patch for oprofiled is
also needed (posted to the oprofile mailing list).

Signed-off-by: Nikolaus Voss <n.voss@weinmann.de>
[haavard.skinnemoen@atmel.com: set IRQF_SHARED unconditionally]
Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
Voss, Nikolaus 17 rokov pred
rodič
commit
56d3eef2b4
1 zmenil súbory, kde vykonal 5 pridanie a 1 odobranie
  1. 5 1
      arch/avr32/kernel/time.c

+ 5 - 1
arch/avr32/kernel/time.c

@@ -43,6 +43,9 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
 {
 {
 	struct clock_event_device *evdev = dev_id;
 	struct clock_event_device *evdev = dev_id;
 
 
+	if (unlikely(!(intc_get_pending(0) & 1)))
+		return IRQ_NONE;
+
 	/*
 	/*
 	 * Disable the interrupt until the clockevent subsystem
 	 * Disable the interrupt until the clockevent subsystem
 	 * reprograms it.
 	 * reprograms it.
@@ -55,7 +58,8 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
 
 
 static struct irqaction timer_irqaction = {
 static struct irqaction timer_irqaction = {
 	.handler	= timer_interrupt,
 	.handler	= timer_interrupt,
-	.flags		= IRQF_TIMER | IRQF_DISABLED,
+	/* Oprofile uses the same irq as the timer, so allow it to be shared */
+	.flags		= IRQF_TIMER | IRQF_DISABLED | IRQF_SHARED,
 	.name		= "avr32_comparator",
 	.name		= "avr32_comparator",
 };
 };