svn commit: r317428 - head/sys/arm/arm
Olivier Houchard
cognet at FreeBSD.org
Tue Apr 25 23:46:54 UTC 2017
Author: cognet
Date: Tue Apr 25 23:46:53 2017
New Revision: 317428
URL: https://svnweb.freebsd.org/changeset/base/317428
Log:
In arm_gicv2m_alloc_msi(), if we found a suitable irq range, leave the loop
before we increase irq again, or we'd end up choosing an irq, and then
really using the next one, even if it's not available.
Also in the inner loop, correct the end check so that we check every irq,
even the last one.
This makes the msk(4) adapter able to use MSI on Softiron Overdrive 1000.
Modified:
head/sys/arm/arm/gic.c
Modified: head/sys/arm/arm/gic.c
==============================================================================
--- head/sys/arm/arm/gic.c Tue Apr 25 23:43:37 2017 (r317427)
+++ head/sys/arm/arm/gic.c Tue Apr 25 23:46:53 2017 (r317428)
@@ -1429,7 +1429,7 @@ arm_gicv2m_alloc_msi(device_t dev, devic
mtx_lock(&sc->sc_mutex);
found = false;
- for (irq = sc->sc_spi_start; irq < sc->sc_spi_end && !found; irq++) {
+ for (irq = sc->sc_spi_start; irq < sc->sc_spi_end; irq++) {
/* Start on an aligned interrupt */
if ((irq & (maxcount - 1)) != 0)
continue;
@@ -1438,7 +1438,7 @@ arm_gicv2m_alloc_msi(device_t dev, devic
found = true;
/* Check this range is valid */
- for (end_irq = irq; end_irq != irq + count - 1; end_irq++) {
+ for (end_irq = irq; end_irq != irq + count; end_irq++) {
/* No free interrupts */
if (end_irq == sc->sc_spi_end) {
found = false;
@@ -1455,6 +1455,8 @@ arm_gicv2m_alloc_msi(device_t dev, devic
break;
}
}
+ if (found)
+ break;
}
/* Not enough interrupts were found */
More information about the svn-src-all
mailing list