Module Name:    src
Committed By:   simonb
Date:           Wed Aug  5 04:19:11 UTC 2020

Modified Files:
        src/sys/arch/mips/cavium: octeon_intr.c

Log Message:
Target all device interrupts to cpu0.

Patch from skrll@.  Code is conditional, hopefully not needed long term.


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/mips/cavium/octeon_intr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/cavium/octeon_intr.c
diff -u src/sys/arch/mips/cavium/octeon_intr.c:1.20 src/sys/arch/mips/cavium/octeon_intr.c:1.21
--- src/sys/arch/mips/cavium/octeon_intr.c:1.20	Mon Jul 20 14:05:51 2020
+++ src/sys/arch/mips/cavium/octeon_intr.c	Wed Aug  5 04:19:11 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_intr.c,v 1.20 2020/07/20 14:05:51 jmcneill Exp $	*/
+/*	$NetBSD: octeon_intr.c,v 1.21 2020/08/05 04:19:11 simonb Exp $	*/
 /*
  * Copyright 2001, 2002 Wasabi Systems, Inc.
  * All rights reserved.
@@ -44,7 +44,7 @@
 #define __INTR_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: octeon_intr.c,v 1.20 2020/07/20 14:05:51 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: octeon_intr.c,v 1.21 2020/08/05 04:19:11 simonb Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
@@ -63,6 +63,14 @@ __KERNEL_RCSID(0, "$NetBSD: octeon_intr.
 #include <mips/cavium/octeonvar.h>
 
 /*
+ * XXX:
+ * Force all interrupts (except clock intrs and IPIs) to be routed
+ * through cpu0 until MP on MIPS is more stable.
+ */
+#define	OCTEON_CPU0_INTERRUPTS
+
+
+/*
  * This is a mask of bits to clear in the SR when we go to a
  * given hardware interrupt priority level.
  */
@@ -305,7 +313,9 @@ octeon_intr_establish(int irq, int ipl, 
 {
 	struct octeon_intrhand *ih;
 	struct cpu_softc *cpu;
+#ifndef OCTEON_CPU0_INTERRUPTS
 	int cpunum;
+#endif
 
 	if (irq >= NIRQS)
 		panic("octeon_intr_establish: bogus IRQ %d", irq);
@@ -346,6 +356,11 @@ octeon_intr_establish(int irq, int ipl, 
 		break;
 
 	case IPL_SCHED:
+#ifdef OCTEON_CPU0_INTERRUPTS
+		cpu = &octeon_cpu_softc[0];
+		cpu->cpu_ip3_enable[bank] |= irq_mask;
+		mips3_sd(cpu->cpu_ip3_en[bank], cpu->cpu_ip3_enable[bank]);
+#else	/* OCTEON_CPU0_INTERRUPTS */
 		for (cpunum = 0; cpunum < OCTEON_NCPU; cpunum++) {
 			cpu = &octeon_cpu_softc[cpunum];
 			if (cpu->cpu_ci == NULL)
@@ -353,10 +368,16 @@ octeon_intr_establish(int irq, int ipl, 
 			cpu->cpu_ip3_enable[bank] |= irq_mask;
 			mips3_sd(cpu->cpu_ip3_en[bank], cpu->cpu_ip3_enable[bank]);
 		}
+#endif	/* OCTEON_CPU0_INTERRUPTS */
 		break;
 
 	case IPL_DDB:
 	case IPL_HIGH:
+#ifdef OCTEON_CPU0_INTERRUPTS
+		cpu = &octeon_cpu_softc[0];
+		cpu->cpu_ip4_enable[bank] |= irq_mask;
+		mips3_sd(cpu->cpu_ip4_en[bank], cpu->cpu_ip4_enable[bank]);
+#else	/* OCTEON_CPU0_INTERRUPTS */
 		for (cpunum = 0; cpunum < OCTEON_NCPU; cpunum++) {
 			cpu = &octeon_cpu_softc[cpunum];
 			if (cpu->cpu_ci == NULL)
@@ -364,6 +385,7 @@ octeon_intr_establish(int irq, int ipl, 
 			cpu->cpu_ip4_enable[bank] |= irq_mask;
 			mips3_sd(cpu->cpu_ip4_en[bank], cpu->cpu_ip4_enable[bank]);
 		}
+#endif	/* OCTEON_CPU0_INTERRUPTS */
 		break;
 	}
 

Reply via email to