svn commit: r348888 - stable/12/sys/dev/oce
Alexander Motin
mav at FreeBSD.org
Tue Jun 11 01:09:55 UTC 2019
Author: mav
Date: Tue Jun 11 01:09:54 2019
New Revision: 348888
URL: https://svnweb.freebsd.org/changeset/base/348888
Log:
MFC r348332: Fix array out of bound panic introduced in r306219.
As I see, different NICs in different configurations may have different
numbers of TX and RX queues. The code was assuming 1:1 mapping between
event queues (interrupts) and TX/RX queues. Since number of interrupts
is set to maximum of TX and RX queues, when those two are different, the
system is doomed.
I have no documentation or deep knowledge about this hardware, so this
change is based on general observations and code reading. If some of my
guesses are wrong, please do better. I just confirmed HP NC550SFP NICs
are working now.
Modified:
stable/12/sys/dev/oce/oce_if.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/dev/oce/oce_if.c
==============================================================================
--- stable/12/sys/dev/oce/oce_if.c Tue Jun 11 00:59:46 2019 (r348887)
+++ stable/12/sys/dev/oce/oce_if.c Tue Jun 11 01:09:54 2019 (r348888)
@@ -2394,10 +2394,20 @@ oce_eqd_set_periodic(POCE_SOFTC sc)
goto modify_eqd;
}
- rq = sc->rq[i];
- rxpkts = rq->rx_stats.rx_pkts;
- wq = sc->wq[i];
- tx_reqs = wq->tx_stats.tx_reqs;
+ if (i == 0) {
+ rq = sc->rq[0];
+ rxpkts = rq->rx_stats.rx_pkts;
+ } else
+ rxpkts = 0;
+ if (i + 1 < sc->nrqs) {
+ rq = sc->rq[i + 1];
+ rxpkts += rq->rx_stats.rx_pkts;
+ }
+ if (i < sc->nwqs) {
+ wq = sc->wq[i];
+ tx_reqs = wq->tx_stats.tx_reqs;
+ } else
+ tx_reqs = 0;
now = ticks;
if (!aic->ticks || now < aic->ticks ||
More information about the svn-src-all
mailing list