summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorVisa Hankala <visa@cvs.openbsd.org>2019-09-05 05:06:34 +0000
committerVisa Hankala <visa@cvs.openbsd.org>2019-09-05 05:06:34 +0000
commit3b6ad0ff73e79a075e7b058bc11d904693203c69 (patch)
treee20e8a3055f1879d09cd47b5ccac8e016d9216e5 /sys/arch
parent77336dbb54ee773ff22d13648989ebe5cd05fd88 (diff)
Adjust interrupt priority levels on mips64 so that priorities
of soft interrupts are lower than priorities of hard interrupts. This allows the delivery of hard interrupts while soft interrupts are masked.
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/loongson/include/intr.h45
-rw-r--r--sys/arch/mips64/mips64/interrupt.c4
-rw-r--r--sys/arch/mips64/mips64/softintr.c5
-rw-r--r--sys/arch/octeon/include/intr.h43
-rw-r--r--sys/arch/sgi/include/intr.h43
5 files changed, 64 insertions, 76 deletions
diff --git a/sys/arch/loongson/include/intr.h b/sys/arch/loongson/include/intr.h
index 05e8f3c1c2b..c510a2b68cb 100644
--- a/sys/arch/loongson/include/intr.h
+++ b/sys/arch/loongson/include/intr.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: intr.h,v 1.16 2018/08/20 15:02:07 visa Exp $ */
+/* $OpenBSD: intr.h,v 1.17 2019/09/05 05:06:33 visa Exp $ */
/*
* Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -48,17 +48,21 @@
/* Interrupt priority `levels'; not mutually exclusive. */
#define IPL_NONE 0 /* nothing */
#define IPL_SOFTINT 1 /* soft interrupts */
-#define IPL_BIO 2 /* block I/O */
-#define IPL_AUDIO IPL_BIO
-#define IPL_NET 3 /* network */
-#define IPL_TTY 4 /* terminal */
-#define IPL_VM 5 /* memory allocation */
-#define IPL_CLOCK 6 /* clock */
+#define IPL_SOFTCLOCK 1 /* soft clock interrupts */
+#define IPL_SOFTNET 2 /* soft network interrupts */
+#define IPL_SOFTTTY 3 /* soft terminal interrupts */
+#define IPL_SOFTHIGH IPL_SOFTTTY /* highest level of soft interrupts */
+#define IPL_BIO 4 /* block I/O */
+#define IPL_AUDIO IPL_BIO
+#define IPL_NET 5 /* network */
+#define IPL_TTY 6 /* terminal */
+#define IPL_VM 7 /* memory allocation */
+#define IPL_CLOCK 8 /* clock */
#define IPL_STATCLOCK IPL_CLOCK
-#define IPL_SCHED 7 /* everything */
-#define IPL_HIGH 7 /* everything */
-#define IPL_IPI 8 /* interprocessor interrupt */
-#define NIPLS 9 /* Number of levels */
+#define IPL_SCHED 9 /* everything */
+#define IPL_HIGH 9 /* everything */
+#define IPL_IPI 10 /* interprocessor interrupt */
+#define NIPLS 11 /* number of levels */
#define IPL_MPFLOOR IPL_TTY
@@ -76,17 +80,11 @@
/* Soft interrupt masks. */
-#define IPL_SOFT 0
-#define IPL_SOFTCLOCK 1
-#define IPL_SOFTNET 2
-#define IPL_SOFTTTY 3
+#define SI_SOFTCLOCK 0 /* for IPL_SOFTCLOCK */
+#define SI_SOFTNET 1 /* for IPL_SOFTNET */
+#define SI_SOFTTTY 2 /* for IPL_SOFTTTY */
-#define SI_SOFT 0 /* for IPL_SOFT */
-#define SI_SOFTCLOCK 1 /* for IPL_SOFTCLOCK */
-#define SI_SOFTNET 2 /* for IPL_SOFTNET */
-#define SI_SOFTTTY 3 /* for IPL_SOFTTTY */
-
-#define SI_NQUEUES 4
+#define SI_NQUEUES 3
#ifndef _LOCORE
@@ -113,7 +111,6 @@ void *softintr_establish(int, void (*)(void *), void *);
void softintr_init(void);
void softintr_schedule(void *);
-#define splsoft() splraise(IPL_SOFTINT)
#define splbio() splraise(IPL_BIO)
#define splnet() splraise(IPL_NET)
#define spltty() splraise(IPL_TTY)
@@ -122,8 +119,8 @@ void softintr_schedule(void *);
#define splvm() splraise(IPL_VM)
#define splhigh() splraise(IPL_HIGH)
-#define splsoftclock() splsoft()
-#define splsoftnet() splsoft()
+#define splsoftclock() splraise(IPL_SOFTCLOCK)
+#define splsoftnet() splraise(IPL_SOFTNET)
#define splstatclock() splhigh()
#define splsched() splhigh()
diff --git a/sys/arch/mips64/mips64/interrupt.c b/sys/arch/mips64/mips64/interrupt.c
index e1e7aa3c5df..54e6bb1874a 100644
--- a/sys/arch/mips64/mips64/interrupt.c
+++ b/sys/arch/mips64/mips64/interrupt.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: interrupt.c,v 1.71 2019/03/17 05:06:36 visa Exp $ */
+/* $OpenBSD: interrupt.c,v 1.72 2019/09/05 05:06:33 visa Exp $ */
/*
* Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -139,7 +139,7 @@ interrupt(struct trapframe *trapframe)
* Dispatch soft interrupts if current ipl allows them.
*/
if (ci->ci_ipl < IPL_SOFTINT && ci->ci_softpending != 0) {
- s = splsoft();
+ s = splraise(IPL_SOFTHIGH);
dosoftint();
ci->ci_ipl = s; /* no-overhead splx */
}
diff --git a/sys/arch/mips64/mips64/softintr.c b/sys/arch/mips64/mips64/softintr.c
index c85339603e6..9b6b57a0905 100644
--- a/sys/arch/mips64/mips64/softintr.c
+++ b/sys/arch/mips64/mips64/softintr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: softintr.c,v 1.20 2017/09/01 13:07:28 visa Exp $ */
+/* $OpenBSD: softintr.c,v 1.21 2019/09/05 05:06:33 visa Exp $ */
/* $NetBSD: softintr.c,v 1.2 2003/07/15 00:24:39 lukem Exp $ */
/*
@@ -107,9 +107,6 @@ softintr_establish(int ipl, void (*func)(void *), void *arg)
int si;
switch (ipl) {
- case IPL_SOFT:
- si = SI_SOFT;
- break;
case IPL_SOFTCLOCK:
si = SI_SOFTCLOCK;
break;
diff --git a/sys/arch/octeon/include/intr.h b/sys/arch/octeon/include/intr.h
index fea18d5f86b..04e0ee26923 100644
--- a/sys/arch/octeon/include/intr.h
+++ b/sys/arch/octeon/include/intr.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: intr.h,v 1.20 2019/03/21 16:51:21 visa Exp $ */
+/* $OpenBSD: intr.h,v 1.21 2019/09/05 05:06:33 visa Exp $ */
/*
* Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -48,16 +48,20 @@
/* Interrupt priority `levels'; not mutually exclusive. */
#define IPL_NONE 0 /* nothing */
#define IPL_SOFTINT 1 /* soft interrupts */
-#define IPL_BIO 2 /* block I/O */
-#define IPL_AUDIO IPL_BIO
-#define IPL_NET 3 /* network */
-#define IPL_TTY 4 /* terminal */
-#define IPL_VM 5 /* memory allocation */
-#define IPL_CLOCK 6 /* clock */
+#define IPL_SOFTCLOCK 1 /* soft clock interrupts */
+#define IPL_SOFTNET 2 /* soft network interrupts */
+#define IPL_SOFTTTY 3 /* soft terminal interrupts */
+#define IPL_SOFTHIGH IPL_SOFTTTY /* highest level of soft interrupts */
+#define IPL_BIO 4 /* block I/O */
+#define IPL_AUDIO IPL_BIO
+#define IPL_NET 5 /* network */
+#define IPL_TTY 6 /* terminal */
+#define IPL_VM 7 /* memory allocation */
+#define IPL_CLOCK 8 /* clock */
#define IPL_SCHED IPL_CLOCK
-#define IPL_HIGH 7 /* everything */
-#define IPL_IPI 8 /* interprocessor interrupt */
-#define NIPLS 9 /* Number of levels */
+#define IPL_HIGH 9 /* everything */
+#define IPL_IPI 10 /* interprocessor interrupt */
+#define NIPLS 11 /* number of levels */
#define IPL_MPFLOOR IPL_TTY
@@ -75,17 +79,11 @@
/* Soft interrupt masks. */
-#define IPL_SOFT 0
-#define IPL_SOFTCLOCK 1
-#define IPL_SOFTNET 2
-#define IPL_SOFTTTY 3
+#define SI_SOFTCLOCK 0 /* for IPL_SOFTCLOCK */
+#define SI_SOFTNET 1 /* for IPL_SOFTNET */
+#define SI_SOFTTTY 2 /* for IPL_SOFTTTY */
-#define SI_SOFT 0 /* for IPL_SOFT */
-#define SI_SOFTCLOCK 1 /* for IPL_SOFTCLOCK */
-#define SI_SOFTNET 2 /* for IPL_SOFTNET */
-#define SI_SOFTTTY 3 /* for IPL_SOFTTTY */
-
-#define SI_NQUEUES 4
+#define SI_NQUEUES 3
#ifndef _LOCORE
@@ -112,7 +110,6 @@ void *softintr_establish(int, void (*)(void *), void *);
void softintr_init(void);
void softintr_schedule(void *);
-#define splsoft() splraise(IPL_SOFTINT)
#define splbio() splraise(IPL_BIO)
#define splnet() splraise(IPL_NET)
#define spltty() splraise(IPL_TTY)
@@ -122,8 +119,8 @@ void softintr_schedule(void *);
#define splsched() splraise(IPL_SCHED)
#define splhigh() splraise(IPL_HIGH)
-#define splsoftclock() splsoft()
-#define splsoftnet() splsoft()
+#define splsoftclock() splraise(IPL_SOFTCLOCK)
+#define splsoftnet() splraise(IPL_SOFTNET)
#define splstatclock() splhigh()
#define spl0() spllower(0)
diff --git a/sys/arch/sgi/include/intr.h b/sys/arch/sgi/include/intr.h
index 6cd75e7c97e..67246316b15 100644
--- a/sys/arch/sgi/include/intr.h
+++ b/sys/arch/sgi/include/intr.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: intr.h,v 1.51 2018/08/20 15:02:07 visa Exp $ */
+/* $OpenBSD: intr.h,v 1.52 2019/09/05 05:06:33 visa Exp $ */
/*
* Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -48,16 +48,20 @@
/* Interrupt priority `levels'; not mutually exclusive. */
#define IPL_NONE 0 /* nothing */
#define IPL_SOFTINT 1 /* soft interrupts */
-#define IPL_BIO 2 /* block I/O */
-#define IPL_AUDIO IPL_BIO
-#define IPL_NET 3 /* network */
-#define IPL_TTY 4 /* terminal */
-#define IPL_VM 5 /* memory allocation */
-#define IPL_CLOCK 6 /* clock */
+#define IPL_SOFTCLOCK 1 /* soft clock interrupts */
+#define IPL_SOFTNET 2 /* soft network interrupts */
+#define IPL_SOFTTTY 3 /* soft terminal interrupts */
+#define IPL_SOFTHIGH IPL_SOFTTTY /* highest level of soft interrupts */
+#define IPL_BIO 4 /* block I/O */
+#define IPL_AUDIO IPL_BIO
+#define IPL_NET 5 /* network */
+#define IPL_TTY 6 /* terminal */
+#define IPL_VM 7 /* memory allocation */
+#define IPL_CLOCK 8 /* clock */
#define IPL_SCHED IPL_CLOCK
-#define IPL_HIGH 7 /* everything */
-#define IPL_IPI 8 /* interprocessor interrupt */
-#define NIPLS 9 /* Number of levels */
+#define IPL_HIGH 9 /* everything */
+#define IPL_IPI 10 /* interprocessor interrupt */
+#define NIPLS 11 /* number of levels */
#define IPL_MPFLOOR IPL_TTY
@@ -75,17 +79,11 @@
/* Soft interrupt masks. */
-#define IPL_SOFT 0
-#define IPL_SOFTCLOCK 1
-#define IPL_SOFTNET 2
-#define IPL_SOFTTTY 3
+#define SI_SOFTCLOCK 0 /* for IPL_SOFTCLOCK */
+#define SI_SOFTNET 1 /* for IPL_SOFTNET */
+#define SI_SOFTTTY 2 /* for IPL_SOFTTTY */
-#define SI_SOFT 0 /* for IPL_SOFT */
-#define SI_SOFTCLOCK 1 /* for IPL_SOFTCLOCK */
-#define SI_SOFTNET 2 /* for IPL_SOFTNET */
-#define SI_SOFTTTY 3 /* for IPL_SOFTTTY */
-
-#define SI_NQUEUES 4
+#define SI_NQUEUES 3
#ifndef _LOCORE
@@ -112,7 +110,6 @@ void *softintr_establish(int, void (*)(void *), void *);
void softintr_init(void);
void softintr_schedule(void *);
-#define splsoft() splraise(IPL_SOFTINT)
#define splbio() splraise(IPL_BIO)
#define splnet() splraise(IPL_NET)
#define spltty() splraise(IPL_TTY)
@@ -122,8 +119,8 @@ void softintr_schedule(void *);
#define splsched() splraise(IPL_SCHED)
#define splhigh() splraise(IPL_HIGH)
-#define splsoftclock() splsoft()
-#define splsoftnet() splsoft()
+#define splsoftclock() splraise(IPL_SOFTCLOCK)
+#define splsoftnet() splraise(IPL_SOFTNET)
#define splstatclock() splhigh()
#define spl0() spllower(0)