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.

MFC after:	2 weeks
Sponsored by:	iXsystems, Inc.
This commit is contained in:
Alexander Motin 2019-05-28 18:32:04 +00:00
parent 1bae1560ee
commit 3582828053
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=348332

View file

@ -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 ||