svn commit: r318525 - head/sys/arm/mv
Wojciech Macek
wma at FreeBSD.org
Fri May 19 08:25:41 UTC 2017
Author: wma
Date: Fri May 19 08:25:40 2017
New Revision: 318525
URL: https://svnweb.freebsd.org/changeset/base/318525
Log:
Fix MPIC mask/unmask
Before the fix for single interrupt, both percpu and non-percpu routes
were enabled/disable at the same time.
Submitted by: Marcin Wojtas <mw at semihalf.com
Obtained from: Semihalf
Sponsored by: Stormshield, Netgate
Reviewed by: loos
Differential revision: https://reviews.freebsd.org/D10716
Modified:
head/sys/arm/mv/mpic.c
Modified: head/sys/arm/mv/mpic.c
==============================================================================
--- head/sys/arm/mv/mpic.c Fri May 19 08:24:23 2017 (r318524)
+++ head/sys/arm/mv/mpic.c Fri May 19 08:25:40 2017 (r318525)
@@ -148,6 +148,7 @@ static void mpic_unmask_irq(uintptr_t nb
static void mpic_mask_irq(uintptr_t nb);
static void mpic_mask_irq_err(uintptr_t nb);
static void mpic_unmask_irq_err(uintptr_t nb);
+static boolean_t mpic_irq_is_percpu(uintptr_t);
#ifdef INTRNG
static int mpic_intr(void *arg);
#endif
@@ -474,14 +475,24 @@ mpic_mask_irq_err(uintptr_t nb)
MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ERR_MASK, mask);
}
+static boolean_t
+mpic_irq_is_percpu(uintptr_t nb)
+{
+ if (nb < MPIC_PPI)
+ return TRUE;
+
+ return FALSE;
+}
+
static void
mpic_unmask_irq(uintptr_t nb)
{
- if (nb < ERR_IRQ) {
- MPIC_WRITE(mv_mpic_sc, MPIC_ISE, nb);
+ if (mpic_irq_is_percpu(nb))
MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ICM, nb);
- } else if (nb < MSI_IRQ)
+ else if (nb < ERR_IRQ)
+ MPIC_WRITE(mv_mpic_sc, MPIC_ISE, nb);
+ else if (nb < MSI_IRQ)
mpic_unmask_irq_err(nb);
if (nb == 0)
@@ -492,10 +503,11 @@ static void
mpic_mask_irq(uintptr_t nb)
{
- if (nb < ERR_IRQ) {
- MPIC_WRITE(mv_mpic_sc, MPIC_ICE, nb);
+ if (mpic_irq_is_percpu(nb))
MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ISM, nb);
- } else if (nb < MSI_IRQ)
+ else if (nb < ERR_IRQ)
+ MPIC_WRITE(mv_mpic_sc, MPIC_ICE, nb);
+ else if (nb < MSI_IRQ)
mpic_mask_irq_err(nb);
}
More information about the svn-src-head
mailing list