svn commit: r308337 - stable/11/sys/arm/nvidia
Michal Meloun
mmel at FreeBSD.org
Sat Nov 5 11:01:58 UTC 2016
Author: mmel
Date: Sat Nov 5 11:01:56 2016
New Revision: 308337
URL: https://svnweb.freebsd.org/changeset/base/308337
Log:
MFC r306897,r306898:
r306897:
Fix MSI allocation for NVidia Tegra
r306898:
Fix release MSI method for NVidia Tegra PCI controller
Modified:
stable/11/sys/arm/nvidia/tegra_pcie.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/arm/nvidia/tegra_pcie.c
==============================================================================
--- stable/11/sys/arm/nvidia/tegra_pcie.c Sat Nov 5 11:00:19 2016 (r308336)
+++ stable/11/sys/arm/nvidia/tegra_pcie.c Sat Nov 5 11:01:56 2016 (r308337)
@@ -710,7 +710,7 @@ tegra_pcib_msi_alloc_msi(device_t dev, d
mtx_lock(&sc->mtx);
found = false;
- for (irq = 0; irq < TEGRA_PCIB_MAX_MSI && !found; irq++) {
+ for (irq = 0; (irq + count - 1) < TEGRA_PCIB_MAX_MSI; irq++) {
/* Start on an aligned interrupt */
if ((irq & (maxcount - 1)) != 0)
continue;
@@ -719,20 +719,17 @@ tegra_pcib_msi_alloc_msi(device_t dev, d
found = true;
/* Check this range is valid */
- for (end_irq = irq; end_irq != irq + count - 1; end_irq++) {
- /* No free interrupts */
- if (end_irq == (TEGRA_PCIB_MAX_MSI - 1)) {
- found = false;
- break;
- }
-
+ for (end_irq = irq; end_irq < irq + count; end_irq++) {
/* This is already used */
- if ((sc->isrcs[irq].flags & TEGRA_FLAG_MSI_USED) ==
+ if ((sc->isrcs[end_irq].flags & TEGRA_FLAG_MSI_USED) ==
TEGRA_FLAG_MSI_USED) {
found = false;
break;
}
}
+
+ if (found)
+ break;
}
/* Not enough interrupts were found */
@@ -765,15 +762,15 @@ tegra_pcib_msi_release_msi(device_t dev,
sc = device_get_softc(dev);
mtx_lock(&sc->mtx);
for (i = 0; i < count; i++) {
- ti = (struct tegra_pcib_irqsrc *)isrc;
+ ti = (struct tegra_pcib_irqsrc *)isrc[i];
KASSERT((ti->flags & TEGRA_FLAG_MSI_USED) == TEGRA_FLAG_MSI_USED,
("%s: Trying to release an unused MSI-X interrupt",
__func__));
ti->flags &= ~TEGRA_FLAG_MSI_USED;
- mtx_unlock(&sc->mtx);
}
+ mtx_unlock(&sc->mtx);
return (0);
}
More information about the svn-src-stable
mailing list