Skip to content

Commit

Permalink
net/ena: indicate Rx RSS hash presence
Browse files Browse the repository at this point in the history
[ upstream commit b418f0d ]

To make it possible to the app to determine if the hash was calculated
for the packet or not, the PKT_RX_RSS_HASH should be set in the mbuf's
ol_flags.

As the PMD wasn't setting that, the application couldn't check if there
is a hash in a proper way.

The hash is valid only if it's UDP or TCP and the IP packet wasn't
fragmented.

Fixes: e5df9f3 ("net/ena: fix passing RSS hash to mbuf")

Signed-off-by: Michal Krawczyk <mk@semihalf.com>
Reviewed-by: Igor Chauskin <igorch@amazon.com>
Reviewed-by: Amit Bernstein <amitbern@amazon.com>
  • Loading branch information
Gerwand authored and steevenlee committed Jun 8, 2021
1 parent 96883ce commit e5c01fb
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions drivers/net/ena/ena_ethdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@

#define ENA_MIN_RING_DESC 128

#define ENA_PTYPE_HAS_HASH (RTE_PTYPE_L4_TCP | RTE_PTYPE_L4_UDP)

enum ethtool_stringset {
ETH_SS_TEST = 0,
ETH_SS_STATS,
Expand Down Expand Up @@ -314,6 +316,11 @@ static inline void ena_rx_mbuf_prepare(struct rte_mbuf *mbuf,
else
ol_flags |= PKT_RX_L4_CKSUM_GOOD;

if (likely((packet_type & ENA_PTYPE_HAS_HASH) && !ena_rx_ctx->frag)) {
ol_flags |= PKT_RX_RSS_HASH;
mbuf->hash.rss = ena_rx_ctx->hash;
}

mbuf->ol_flags = ol_flags;
mbuf->packet_type = packet_type;
}
Expand Down Expand Up @@ -1954,6 +1961,9 @@ static int ena_dev_configure(struct rte_eth_dev *dev)

adapter->state = ENA_ADAPTER_STATE_CONFIG;

if (dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG)
dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;

adapter->tx_selected_offloads = dev->data->dev_conf.txmode.offloads;
adapter->rx_selected_offloads = dev->data->dev_conf.rxmode.offloads;
return 0;
Expand Down Expand Up @@ -2030,6 +2040,7 @@ static int ena_infos_get(struct rte_eth_dev *dev,

/* Inform framework about available features */
dev_info->rx_offload_capa = rx_feat;
dev_info->rx_offload_capa |= DEV_RX_OFFLOAD_RSS_HASH;
dev_info->rx_queue_offload_capa = rx_feat;
dev_info->tx_offload_capa = tx_feat;
dev_info->tx_queue_offload_capa = tx_feat;
Expand Down Expand Up @@ -2242,8 +2253,6 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
++rx_ring->rx_stats.bad_csum;
}

mbuf->hash.rss = ena_rx_ctx.hash;

rx_pkts[completed] = mbuf;
rx_ring->rx_stats.bytes += mbuf->pkt_len;
}
Expand Down

0 comments on commit e5c01fb

Please sign in to comment.