sfxge(4): ignore error in completion event on MCDIv2 HW

With MCDIv2, the reponse length can be to big to fit into the
CMDDONE_DATALEN field in the MCDI completion event. But rather that
the length being truncated, it can overflow into the CMDDONE_ERRNO
field (this is a longstanding firmware bug). Hence the CMDDONE_ERRNO
field may not be valid.

It isn't necessary to use the value in the CMDDONE_ERRNO field though,
so it can be ignored. The actual error code is already read from the
response header on MCDIv2 capable hardware and stored in emr_rc, so
that can be used instead.

Submitted by:   Mark Spender <mspender at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
Differential Revision:  https://reviews.freebsd.org/D18104
This commit is contained in:
Andrew Rybchenko 2018-11-23 15:59:49 +00:00
parent 641c3370f4
commit 9d89c911bb

View File

@ -798,9 +798,8 @@ efx_mcdi_ev_cpl(
emrp->emr_rc = 0;
}
}
if (errcode == 0) {
if (emrp->emr_rc == 0)
efx_mcdi_finish_response(enp, emrp);
}
emtp->emt_ev_cpl(emtp->emt_context);
}