svn commit: r304726 - in projects/powernv/powerpc: powerpc pseries
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Wed Aug 24 03:44:22 UTC 2016
Author: nwhitehorn
Date: Wed Aug 24 03:44:20 2016
New Revision: 304726
URL: https://svnweb.freebsd.org/changeset/base/304726
Log:
Fix some SMP issues:
- Use low thread priority in the wait loop for APs
- Add more head room for XICS in its interrupt range: it uses 2^24 + 1 IRQs
- OPAL doesn't like binding fictional interrupts (IPIs) to a particular CPU.
Don't do that.
Modified:
projects/powernv/powerpc/powerpc/intr_machdep.c
projects/powernv/powerpc/powerpc/mp_machdep.c
projects/powernv/powerpc/pseries/xics.c
Modified: projects/powernv/powerpc/powerpc/intr_machdep.c
==============================================================================
--- projects/powernv/powerpc/powerpc/intr_machdep.c Wed Aug 24 03:44:16 2016 (r304725)
+++ projects/powernv/powerpc/powerpc/intr_machdep.c Wed Aug 24 03:44:20 2016 (r304726)
@@ -387,7 +387,7 @@ powerpc_get_irq(uint32_t node, u_int pin
piclist[idx].irqs = 124;
piclist[idx].ipis = 4;
piclist[idx].base = nirqs;
- nirqs += (1 << 24);
+ nirqs += (1 << 25);
npics++;
KASSERT(npics < MAX_PICS,
Modified: projects/powernv/powerpc/powerpc/mp_machdep.c
==============================================================================
--- projects/powernv/powerpc/powerpc/mp_machdep.c Wed Aug 24 03:44:16 2016 (r304725)
+++ projects/powernv/powerpc/powerpc/mp_machdep.c Wed Aug 24 03:44:20 2016 (r304726)
@@ -78,7 +78,8 @@ machdep_ap_bootstrap(void)
__asm __volatile("msync; isync");
while (ap_letgo == 0)
- ;
+ __asm __volatile("or 27,27,27");
+ __asm __volatile("or 6,6,6");
/* Initialize DEC and TB, sync with the BSP values */
platform_smp_timebase_sync(ap_timebase, 1);
Modified: projects/powernv/powerpc/pseries/xics.c
==============================================================================
--- projects/powernv/powerpc/pseries/xics.c Wed Aug 24 03:44:16 2016 (r304725)
+++ projects/powernv/powerpc/pseries/xics.c Wed Aug 24 03:44:20 2016 (r304726)
@@ -250,6 +250,10 @@ xicp_bind(device_t dev, u_int irq, cpuse
cell_t status, cpu;
int ncpus, i, error;
+ /* Ignore IPIs */
+ if (irq == MAX_XICP_IRQS)
+ return;
+
/*
* This doesn't appear to actually support affinity groups, so pick a
* random CPU.
@@ -338,7 +342,6 @@ xicp_dispatch(device_t dev, struct trapf
break;
}
-//printf("Interrupt %ld\n", xirr);
KASSERT(i < sc->nintvecs, ("Unmapped XIRR"));
powerpc_dispatch_intr(sc->intvecs[i].vector, tf);
}
More information about the svn-src-projects
mailing list