Skip to content

Commit

Permalink
net/iavf: count continuous DD bits for Arm
Browse files Browse the repository at this point in the history
[ upstream commit 3d88d5e ]

On Arm platforms, reading of descriptors may be re-ordered causing the
status of DD bits to be discontinuous. Add logic to only process
continuous descriptors by checking DD bits.

Fixes: 1060591 ("net/avf: enable bulk allocate Rx")

Signed-off-by: Kathleen Capella <kathleen.capella@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Qi Zhang <qi.z.zhang@intel.com>
  • Loading branch information
kathleencapella-arm authored and kevintraynor committed Feb 21, 2022
1 parent f746bb7 commit 6852202
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions drivers/net/iavf/iavf_rxtx.c
Expand Up @@ -1898,7 +1898,7 @@ iavf_rx_scan_hw_ring(struct iavf_rx_queue *rxq)
uint16_t pkt_len;
uint64_t qword1;
uint32_t rx_status;
int32_t s[IAVF_LOOK_AHEAD], nb_dd;
int32_t s[IAVF_LOOK_AHEAD], var, nb_dd;
int32_t i, j, nb_rx = 0;
uint64_t pkt_flags;
const uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;
Expand Down Expand Up @@ -1929,9 +1929,27 @@ iavf_rx_scan_hw_ring(struct iavf_rx_queue *rxq)

rte_smp_rmb();

/* Compute how many status bits were set */
for (j = 0, nb_dd = 0; j < IAVF_LOOK_AHEAD; j++)
nb_dd += s[j] & (1 << IAVF_RX_DESC_STATUS_DD_SHIFT);
/* Compute how many contiguous DD bits were set */
for (j = 0, nb_dd = 0; j < IAVF_LOOK_AHEAD; j++) {
var = s[j] & (1 << IAVF_RX_DESC_STATUS_DD_SHIFT);
#ifdef RTE_ARCH_ARM
/* For Arm platforms, count only contiguous descriptors
* whose DD bit is set to 1. On Arm platforms, reads of
* descriptors can be reordered. Since the CPU may
* be reading the descriptors as the NIC updates them
* in memory, it is possbile that the DD bit for a
* descriptor earlier in the queue is read as not set
* while the DD bit for a descriptor later in the queue
* is read as set.
*/
if (var)
nb_dd += 1;
else
break;
#else
nb_dd += var;
#endif
}

nb_rx += nb_dd;

Expand Down

0 comments on commit 6852202

Please sign in to comment.