diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-03-28 10:23:12 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2011-03-28 10:55:11 -0400 |
commit | f9ba4475f95b135e6f68e74d59bba92fd35ca835 (patch) | |
tree | c7bb41e453391ae750fca2d021e47c113097c961 | |
parent | 0521c8fbb3da45c2a58cd551ca6e9644983f6028 (diff) |
powerpc: cell: Use the core flow handler
The core handler is a full equivalent replacement.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/powerpc/platforms/cell/Kconfig | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/cell/interrupt.c | 50 |
2 files changed, 2 insertions, 49 deletions
diff --git a/arch/powerpc/platforms/cell/Kconfig b/arch/powerpc/platforms/cell/Kconfig index 48cd7d2e1b75..81239ebed83f 100644 --- a/arch/powerpc/platforms/cell/Kconfig +++ b/arch/powerpc/platforms/cell/Kconfig | |||
@@ -9,6 +9,7 @@ config PPC_CELL_COMMON | |||
9 | select PPC_INDIRECT_IO | 9 | select PPC_INDIRECT_IO |
10 | select PPC_NATIVE | 10 | select PPC_NATIVE |
11 | select PPC_RTAS | 11 | select PPC_RTAS |
12 | select IRQ_EDGE_EOI_HANDLER | ||
12 | 13 | ||
13 | config PPC_CELL_NATIVE | 14 | config PPC_CELL_NATIVE |
14 | bool | 15 | bool |
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c index 624d26e72f1d..ec9fc7d82068 100644 --- a/arch/powerpc/platforms/cell/interrupt.c +++ b/arch/powerpc/platforms/cell/interrupt.c | |||
@@ -235,54 +235,6 @@ static int iic_host_match(struct irq_host *h, struct device_node *node) | |||
235 | "IBM,CBEA-Internal-Interrupt-Controller"); | 235 | "IBM,CBEA-Internal-Interrupt-Controller"); |
236 | } | 236 | } |
237 | 237 | ||
238 | extern int noirqdebug; | ||
239 | |||
240 | static void handle_iic_irq(unsigned int irq, struct irq_desc *desc) | ||
241 | { | ||
242 | struct irq_chip *chip = get_irq_desc_chip(desc); | ||
243 | |||
244 | raw_spin_lock(&desc->lock); | ||
245 | |||
246 | desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); | ||
247 | |||
248 | /* | ||
249 | * If we're currently running this IRQ, or its disabled, | ||
250 | * we shouldn't process the IRQ. Mark it pending, handle | ||
251 | * the necessary masking and go out | ||
252 | */ | ||
253 | if (unlikely((desc->status & (IRQ_INPROGRESS | IRQ_DISABLED)) || | ||
254 | !desc->action)) { | ||
255 | desc->status |= IRQ_PENDING; | ||
256 | goto out_eoi; | ||
257 | } | ||
258 | |||
259 | kstat_incr_irqs_this_cpu(irq, desc); | ||
260 | |||
261 | /* Mark the IRQ currently in progress.*/ | ||
262 | desc->status |= IRQ_INPROGRESS; | ||
263 | |||
264 | do { | ||
265 | struct irqaction *action = desc->action; | ||
266 | irqreturn_t action_ret; | ||
267 | |||
268 | if (unlikely(!action)) | ||
269 | goto out_eoi; | ||
270 | |||
271 | desc->status &= ~IRQ_PENDING; | ||
272 | raw_spin_unlock(&desc->lock); | ||
273 | action_ret = handle_IRQ_event(irq, action); | ||
274 | if (!noirqdebug) | ||
275 | note_interrupt(irq, desc, action_ret); | ||
276 | raw_spin_lock(&desc->lock); | ||
277 | |||
278 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); | ||
279 | |||
280 | desc->status &= ~IRQ_INPROGRESS; | ||
281 | out_eoi: | ||
282 | chip->irq_eoi(&desc->irq_data); | ||
283 | raw_spin_unlock(&desc->lock); | ||
284 | } | ||
285 | |||
286 | static int iic_host_map(struct irq_host *h, unsigned int virq, | 238 | static int iic_host_map(struct irq_host *h, unsigned int virq, |
287 | irq_hw_number_t hw) | 239 | irq_hw_number_t hw) |
288 | { | 240 | { |
@@ -295,7 +247,7 @@ static int iic_host_map(struct irq_host *h, unsigned int virq, | |||
295 | handle_iic_irq); | 247 | handle_iic_irq); |
296 | break; | 248 | break; |
297 | default: | 249 | default: |
298 | set_irq_chip_and_handler(virq, &iic_chip, handle_iic_irq); | 250 | set_irq_chip_and_handler(virq, &iic_chip, handle_edge_eoi_irq); |
299 | } | 251 | } |
300 | return 0; | 252 | return 0; |
301 | } | 253 | } |