svn commit: r339215 - head/sys/powerpc/pseries

Justin Hibbits jhibbits at FreeBSD.org
Sat Oct 6 18:51:50 UTC 2018


Author: jhibbits
Date: Sat Oct  6 18:51:49 2018
New Revision: 339215
URL: https://svnweb.freebsd.org/changeset/base/339215

Log:
  powerpc/pseries: EOI interrupts in XICS by setting lowest priority
  
  Discussing with Benjamin Herrenschmidt, OPAL_INT_GET_XIRR masks the
  returned priority, so must be resumed before more interrupts can be
  handled at this priority.  Since there are only two priorities used in
  FreeBSD, we know that the previous priority in an EOI will always be
  0xff (lowest priority).
  
  Reviewed by:	nwhitehorn
  Approved by:	re(rgrimes)
  Differential Revision: https://reviews.freebsd.org/D17361

Modified:
  head/sys/powerpc/pseries/xics.c

Modified: head/sys/powerpc/pseries/xics.c
==============================================================================
--- head/sys/powerpc/pseries/xics.c	Sat Oct  6 17:40:14 2018	(r339214)
+++ head/sys/powerpc/pseries/xics.c	Sat Oct  6 18:51:49 2018	(r339215)
@@ -381,17 +381,9 @@ xicp_dispatch(device_t dev, struct trapframe *tf)
 		}
 		xirr &= 0x00ffffff;
 
-		if (xirr == 0) { /* No more pending interrupts? */
-			if (regs)
-				bus_write_1(regs, 4, 0xff);
-#ifdef POWERNV
-			else if (sc->xics_emu)
-				opal_call(OPAL_INT_SET_CPPR, 0xff);
-#endif
-			else
-				phyp_hcall(H_CPPR, (uint64_t)0xff);
+		if (xirr == 0) /* No more pending interrupts? */
 			break;
-		}
+
 		if (xirr == XICP_IPI) {		/* Magic number for IPIs */
 			xirr = MAX_XICP_IRQS;	/* Map to FreeBSD magic */
 
@@ -471,7 +463,7 @@ xicp_eoi(device_t dev, u_int irq)
 
 	if (irq == MAX_XICP_IRQS) /* Remap IPI interrupt to internal value */
 		irq = XICP_IPI;
-	xirr = irq | (XICP_PRIORITY << 24);
+	xirr = irq | (0xff << 24);
 
 #ifdef POWERNV
 	if (mfmsr() & PSL_HV) {


More information about the svn-src-head mailing list