powerpc: cell: Use the core flow handler
The core handler is a full equivalent replacement. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
0521c8fbb3
commit
f9ba4475f9
@ -9,6 +9,7 @@ config PPC_CELL_COMMON
|
|||||||
select PPC_INDIRECT_IO
|
select PPC_INDIRECT_IO
|
||||||
select PPC_NATIVE
|
select PPC_NATIVE
|
||||||
select PPC_RTAS
|
select PPC_RTAS
|
||||||
|
select IRQ_EDGE_EOI_HANDLER
|
||||||
|
|
||||||
config PPC_CELL_NATIVE
|
config PPC_CELL_NATIVE
|
||||||
bool
|
bool
|
||||||
|
@ -235,54 +235,6 @@ static int iic_host_match(struct irq_host *h, struct device_node *node)
|
|||||||
"IBM,CBEA-Internal-Interrupt-Controller");
|
"IBM,CBEA-Internal-Interrupt-Controller");
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int noirqdebug;
|
|
||||||
|
|
||||||
static void handle_iic_irq(unsigned int irq, struct irq_desc *desc)
|
|
||||||
{
|
|
||||||
struct irq_chip *chip = get_irq_desc_chip(desc);
|
|
||||||
|
|
||||||
raw_spin_lock(&desc->lock);
|
|
||||||
|
|
||||||
desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If we're currently running this IRQ, or its disabled,
|
|
||||||
* we shouldn't process the IRQ. Mark it pending, handle
|
|
||||||
* the necessary masking and go out
|
|
||||||
*/
|
|
||||||
if (unlikely((desc->status & (IRQ_INPROGRESS | IRQ_DISABLED)) ||
|
|
||||||
!desc->action)) {
|
|
||||||
desc->status |= IRQ_PENDING;
|
|
||||||
goto out_eoi;
|
|
||||||
}
|
|
||||||
|
|
||||||
kstat_incr_irqs_this_cpu(irq, desc);
|
|
||||||
|
|
||||||
/* Mark the IRQ currently in progress.*/
|
|
||||||
desc->status |= IRQ_INPROGRESS;
|
|
||||||
|
|
||||||
do {
|
|
||||||
struct irqaction *action = desc->action;
|
|
||||||
irqreturn_t action_ret;
|
|
||||||
|
|
||||||
if (unlikely(!action))
|
|
||||||
goto out_eoi;
|
|
||||||
|
|
||||||
desc->status &= ~IRQ_PENDING;
|
|
||||||
raw_spin_unlock(&desc->lock);
|
|
||||||
action_ret = handle_IRQ_event(irq, action);
|
|
||||||
if (!noirqdebug)
|
|
||||||
note_interrupt(irq, desc, action_ret);
|
|
||||||
raw_spin_lock(&desc->lock);
|
|
||||||
|
|
||||||
} while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING);
|
|
||||||
|
|
||||||
desc->status &= ~IRQ_INPROGRESS;
|
|
||||||
out_eoi:
|
|
||||||
chip->irq_eoi(&desc->irq_data);
|
|
||||||
raw_spin_unlock(&desc->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int iic_host_map(struct irq_host *h, unsigned int virq,
|
static int iic_host_map(struct irq_host *h, unsigned int virq,
|
||||||
irq_hw_number_t hw)
|
irq_hw_number_t hw)
|
||||||
{
|
{
|
||||||
@ -295,7 +247,7 @@ static int iic_host_map(struct irq_host *h, unsigned int virq,
|
|||||||
handle_iic_irq);
|
handle_iic_irq);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
set_irq_chip_and_handler(virq, &iic_chip, handle_iic_irq);
|
set_irq_chip_and_handler(virq, &iic_chip, handle_edge_eoi_irq);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user