sfxge(4): always be ready to receive batched events

When the low-latency firmware variant is running, it is reported as not
being capable of batching RX events, but it can still do so if the
FORCE_EV_MERGING flag is set on an RXQ.  Therefore we need to handle
batched RX events even if the capability isn't set.

If this bug is fixed in the firmware such that the capability is set
even when running the low-latency firmware variant, it will almost
always be reported so I don't think we lose much by removing the check.

Submitted by:   Mark Spender <mspender at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D6705
This commit is contained in:
Andrew Rybchenko 2016-06-04 09:20:46 +00:00
parent b839ed60bd
commit 095bde9316
2 changed files with 6 additions and 4 deletions

View File

@ -1003,8 +1003,11 @@ ef10_get_datapath_caps(
encp->enc_rx_batching_enabled =
CAP_FLAG(flags, RX_BATCHING) ? B_TRUE : B_FALSE;
if (encp->enc_rx_batching_enabled)
encp->enc_rx_batch_max = 16;
/*
* Even if batching isn't reported as supported, we may still get
* batched events.
*/
encp->enc_rx_batch_max = 16;
/* Check if the firmware supports disabling scatter on RXQs */
encp->enc_rx_disable_scatter_supported =

View File

@ -128,8 +128,7 @@ sfxge_ev_rx(void *arg, uint32_t label, uint32_t id, uint32_t size,
rxq->pending += delta;
if (delta != 1) {
if ((!efx_nic_cfg_get(sc->enp)->enc_rx_batching_enabled) ||
(delta <= 0) ||
if ((delta <= 0) ||
(delta > efx_nic_cfg_get(sc->enp)->enc_rx_batch_max)) {
evq->exception = B_TRUE;