[PowerPC] [Book-E] Remove obsolete interrupt binding workaround
Remove an old workaround that is no longer necessary since rS343824. There used to be a problem with FMan interrupts firing on multiple CPUS at the same time. This ended up being due to multicast interrupts being unsupported in the Freescale PIC (so instead of using a selection algorithm, it would do some unspecified action, such as interrupting multiple cpus at random.) Reviewed by: jhibbits Sponsored by: Tag1 Consulting, Inc. Differential Revision: https://reviews.freebsd.org/D23829
This commit is contained in:
parent
6bc27f086a
commit
f55185bcd8
@ -794,5 +794,4 @@ t_Error XX_IpcSendMessage(t_Handle h_Session,
|
||||
|
||||
|
||||
void XX_PortalSetInfo(device_t dev);
|
||||
void XX_FmanFixIntr(int irq);
|
||||
#endif /* __XX_EXT_H */
|
||||
|
32
sys/contrib/ncsw/user/env/xx.c
vendored
32
sys/contrib/ncsw/user/env/xx.c
vendored
@ -95,7 +95,6 @@ MTX_SYSINIT(XX_MallocTrackLockInit, &XX_MallocTrackLock,
|
||||
|
||||
/* Interrupt info */
|
||||
#define XX_INTR_FLAG_PREALLOCATED (1 << 0)
|
||||
#define XX_INTR_FLAG_FMAN_FIX (1 << 1)
|
||||
|
||||
struct XX_IntrInfo {
|
||||
driver_intr_t *handler;
|
||||
@ -295,23 +294,6 @@ XX_IsPortalIntr(uintptr_t irq)
|
||||
return (0);
|
||||
}
|
||||
|
||||
void
|
||||
XX_FmanFixIntr(int irq)
|
||||
{
|
||||
|
||||
XX_IntrInfo[irq].flags |= XX_INTR_FLAG_FMAN_FIX;
|
||||
}
|
||||
|
||||
static bool
|
||||
XX_FmanNeedsIntrFix(int irq)
|
||||
{
|
||||
|
||||
if (XX_IntrInfo[irq].flags & XX_INTR_FLAG_FMAN_FIX)
|
||||
return (1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
XX_Dispatch(void *arg)
|
||||
{
|
||||
@ -398,21 +380,7 @@ XX_SetIntr(uintptr_t irq, t_Isr *f_Isr, t_Handle handle)
|
||||
|
||||
err = bus_setup_intr(dev, r, flags, NULL, f_Isr, handle,
|
||||
&XX_IntrInfo[irq].cookie);
|
||||
if (err)
|
||||
goto finish;
|
||||
|
||||
/*
|
||||
* XXX: Bind FMan IRQ to CPU0. Current interrupt subsystem directs each
|
||||
* interrupt to all CPUs. Race between an interrupt assertion and
|
||||
* masking may occur and interrupt handler may be called multiple times
|
||||
* per one interrupt. FMan doesn't support such a situation. Workaround
|
||||
* is to bind FMan interrupt to one CPU0 only.
|
||||
*/
|
||||
#ifdef SMP
|
||||
if (XX_FmanNeedsIntrFix(irq))
|
||||
err = powerpc_bind_intr(irq, 0);
|
||||
#endif
|
||||
finish:
|
||||
return (err);
|
||||
}
|
||||
|
||||
|
@ -455,13 +455,6 @@ fman_attach(device_t dev)
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX: Fix FMan interrupt. This is workaround for the issue with
|
||||
* interrupts directed to multiple CPUs by the interrupts subsystem.
|
||||
* Workaround is to bind the interrupt to only one CPU0.
|
||||
*/
|
||||
XX_FmanFixIntr(rman_get_start(sc->irq_res));
|
||||
|
||||
sc->err_irq_rid = 1;
|
||||
sc->err_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ,
|
||||
&sc->err_irq_rid, RF_ACTIVE | RF_SHAREABLE);
|
||||
|
Loading…
Reference in New Issue
Block a user