ppc64: allow iSeries to use IRQSTACKS again
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
This commit is contained in:
parent
b709c08328
commit
5a7b3ff467
|
@ -103,6 +103,9 @@ static void intReceived(struct XmPciLpEvent *eventParm,
|
|||
struct pt_regs *regsParm)
|
||||
{
|
||||
int irq;
|
||||
#ifdef CONFIG_IRQSTACKS
|
||||
struct thread_info *curtp, *irqtp;
|
||||
#endif
|
||||
|
||||
++Pci_Interrupt_Count;
|
||||
|
||||
|
@ -110,7 +113,20 @@ static void intReceived(struct XmPciLpEvent *eventParm,
|
|||
case XmPciLpEvent_SlotInterrupt:
|
||||
irq = eventParm->hvLpEvent.xCorrelationToken;
|
||||
/* Dispatch the interrupt handlers for this irq */
|
||||
ppc_irq_dispatch_handler(regsParm, irq);
|
||||
#ifdef CONFIG_IRQSTACKS
|
||||
/* Switch to the irq stack to handle this */
|
||||
curtp = current_thread_info();
|
||||
irqtp = hardirq_ctx[smp_processor_id()];
|
||||
if (curtp != irqtp) {
|
||||
irqtp->task = curtp->task;
|
||||
irqtp->flags = 0;
|
||||
call_ppc_irq_dispatch_handler(regsParm, irq, irqtp);
|
||||
irqtp->task = NULL;
|
||||
if (irqtp->flags)
|
||||
set_bits(irqtp->flags, &curtp->flags);
|
||||
} else
|
||||
#endif
|
||||
ppc_irq_dispatch_handler(regsParm, irq);
|
||||
HvCallPci_eoi(eventParm->eventData.slotInterrupt.busNumber,
|
||||
eventParm->eventData.slotInterrupt.subBusNumber,
|
||||
eventParm->eventData.slotInterrupt.deviceId);
|
||||
|
|
Loading…
Reference in New Issue