sfxge(4): enforce packed stream fake buffer size
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. Sponsored by: Solarflare Communications, Inc. Differential Revision: https://reviews.freebsd.org/D18100
This commit is contained in:
parent
deb23a8d7b
commit
474d3169a1
@ -710,6 +710,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,
|
||||
@ -724,6 +732,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));
|
||||
|
@ -2050,12 +2050,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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user