[dpdk-dev,23/53] net/sfc/base: enforce packed stream fake buffer size
Checks
Commit Message
From: Andrew Rybchenko <Andrew.Rybchenko@oktetlabs.ru>
In the case of packed stream real size of the buffer does not fit in
Rx descriptor byte count. Real size is specified on Rx queue setup.
Non-zero fake should be used to bypass hardware checks.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
drivers/net/sfc/base/ef10_rx.c | 17 +++++++++++++++++
drivers/net/sfc/base/efx.h | 6 ------
2 files changed, 17 insertions(+), 6 deletions(-)
@@ -707,6 +707,14 @@ ef10_rx_prefix_hash(
}
#endif /* EFSYS_OPT_RX_SCALE */
+#if EFSYS_OPT_RX_PACKED_STREAM
+/*
+ * Fake length for RXQ descriptors in packed stream mode
+ * to make hardware happy
+ */
+#define EFX_RXQ_PACKED_STREAM_FAKE_BUF_SIZE 32
+#endif
+
void
ef10_rx_qpost(
__in efx_rxq_t *erp,
@@ -721,6 +729,15 @@ ef10_rx_qpost(
unsigned int offset;
unsigned int id;
+#if EFSYS_OPT_RX_PACKED_STREAM
+ /*
+ * Real size of the buffer does not fit into ESF_DZ_RX_KER_BYTE_CNT
+ * and equal to 0 after applying mask. Hardware does not like it.
+ */
+ if (erp->er_ev_qstate->eers_rx_packed_stream)
+ size = EFX_RXQ_PACKED_STREAM_FAKE_BUF_SIZE;
+#endif
+
/* The client driver must not overfill the queue */
EFSYS_ASSERT3U(added - completed + n, <=,
EFX_RXQ_LIMIT(erp->er_mask + 1));
@@ -2043,12 +2043,6 @@ efx_rx_qpush(
#if EFSYS_OPT_RX_PACKED_STREAM
-/*
- * Fake length for RXQ descriptors in packed stream mode
- * to make hardware happy
- */
-#define EFX_RXQ_PACKED_STREAM_FAKE_BUF_SIZE 32
-
extern void
efx_rx_qpush_ps_credits(
__in efx_rxq_t *erp);