Orabug:
23497496
This commit fixes two separate regressions in handling the old fw:
1) Teardown of the dne_qp happens only with older FWs because the newer
firmwares implements the dne_qp handling in fw, so
driver does not invoke the teardown code. This teardown code
uses generic calls that has been implicitly amended
to by the WA for Bug #4074, which also assumed that all QPs
subject to that call has a valid send queue. The DNE QPs don't
and this causes a null pointer exception, which is triggered
both during driver unload and as a side effect of lid changes.
2) EPSC support for SL to TSL mapping was introduced in EPSC API v.0.56
but was broken - this causes the driver to set wrong values
which leads to modify_qp errors. The fix is just to avoid putting
the map to use unless epsc version is >= 0.57.
Signed-off-by: Knut Omang <knut.omang@oracle.com>
for (qosl = QOSL_HIGH_BANDWIDTH; qosl <= QOSL_LOW_LATENCY; ++qosl)
sdev->sl2tsl[sl][port][qosl] = port ? TSL_DATA_1 : TSL_DATA;
- if (eps_fw_version_lt(&sdev->es[sdev->mbox_epsc], 0, 56)) {
+ if (eps_fw_version_lt(&sdev->es[sdev->mbox_epsc], 0, 57)) {
sif_log(sdev, SIF_INFO, "Setting up TSL per port (0.50 <= fw <= 0.56)");
return;
}
u16 head;
int len;
+ if (qp->flags & SIF_QPF_NO_EVICT)
+ return 0; /* do-not-evict QPs don't have any SQs */
+
len = outstanding_wqes(sdev, qp, &head);
if (len <= 0)
return -1;