ethdev: add mbuf RSS update as an offload
Add new Rx offload flag `DEV_RX_OFFLOAD_RSS_HASH` which can be used to enable/disable PMDs write to `rte_mbuf:#️⃣:rss`. PMDs notify the validity of `rte_mbuf:#️⃣rss` to the application by enabling `PKT_RX_RSS_HASH ` flag in `rte_mbuf::ol_flags`. Also update testpmd rx_offload command to include RSS_HASH Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com> Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
5d4813acda
commit
5d30897295
@ -18084,7 +18084,7 @@ cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_offload =
|
||||
offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
|
||||
"qinq_strip#outer_ipv4_cksum#macsec_strip#"
|
||||
"header_split#vlan_filter#vlan_extend#jumbo_frame#"
|
||||
"scatter#timestamp#security#keep_crc");
|
||||
"scatter#timestamp#security#keep_crc#rss_hash");
|
||||
cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_on_off =
|
||||
TOKEN_STRING_INITIALIZER
|
||||
(struct cmd_config_per_port_rx_offload_result,
|
||||
@ -18164,7 +18164,7 @@ cmdline_parse_inst_t cmd_config_per_port_rx_offload = {
|
||||
.help_str = "port config <port_id> rx_offload vlan_strip|ipv4_cksum|"
|
||||
"udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
|
||||
"macsec_strip|header_split|vlan_filter|vlan_extend|"
|
||||
"jumbo_frame|scatter|timestamp|security|keep_crc "
|
||||
"jumbo_frame|scatter|timestamp|security|keep_crc|rss_hash "
|
||||
"on|off",
|
||||
.tokens = {
|
||||
(void *)&cmd_config_per_port_rx_offload_result_port,
|
||||
|
@ -274,6 +274,7 @@ Supports RSS hashing on RX.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
|
||||
* **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``.
|
||||
* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
|
||||
* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
|
||||
|
||||
@ -286,6 +287,7 @@ Inner RSS
|
||||
Supports RX RSS hashing on Inner headers.
|
||||
|
||||
* **[uses] rte_flow_action_rss**: ``level``.
|
||||
* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
|
||||
|
||||
|
||||
|
@ -101,6 +101,13 @@ New Features
|
||||
* This scheme will allow PMDs to avoid lookup to internal ptype table on Rx
|
||||
and thereby improve Rx performance if application wishes do so.
|
||||
|
||||
* **Added Rx offload flag to enable or disable RSS update**
|
||||
|
||||
* Added new Rx offload flag `DEV_RX_OFFLOAD_RSS_HASH` which can be used to
|
||||
enable/disable PMDs write to `rte_mbuf::hash::rss`.
|
||||
* PMDs notify the validity of `rte_mbuf::hash:rss` to the application
|
||||
by enabling `PKT_RX_RSS_HASH ` flag in `rte_mbuf::ol_flags`.
|
||||
|
||||
* **Updated the enic driver.**
|
||||
|
||||
* Added support for Geneve with options offload.
|
||||
|
@ -1680,7 +1680,7 @@ Enable or disable a per port Rx offloading on all Rx queues of a port::
|
||||
vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
|
||||
qinq_strip, outer_ipv4_cksum, macsec_strip,
|
||||
header_split, vlan_filter, vlan_extend, jumbo_frame,
|
||||
scatter, timestamp, security, keep_crc
|
||||
scatter, timestamp, security, keep_crc, rss_hash
|
||||
|
||||
This command should be run when the port is stopped, or else it will fail.
|
||||
|
||||
|
@ -129,6 +129,7 @@ static const struct {
|
||||
RTE_RX_OFFLOAD_BIT2STR(KEEP_CRC),
|
||||
RTE_RX_OFFLOAD_BIT2STR(SCTP_CKSUM),
|
||||
RTE_RX_OFFLOAD_BIT2STR(OUTER_UDP_CKSUM),
|
||||
RTE_RX_OFFLOAD_BIT2STR(RSS_HASH),
|
||||
};
|
||||
|
||||
#undef RTE_RX_OFFLOAD_BIT2STR
|
||||
@ -1305,6 +1306,17 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
|
||||
goto rollback;
|
||||
}
|
||||
|
||||
/* Check if Rx RSS distribution is disabled but RSS hash is enabled. */
|
||||
if (((dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) == 0) &&
|
||||
(dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH)) {
|
||||
RTE_ETHDEV_LOG(ERR,
|
||||
"Ethdev port_id=%u config invalid Rx mq_mode without RSS but %s offload is requested",
|
||||
port_id,
|
||||
rte_eth_dev_rx_offload_name(DEV_RX_OFFLOAD_RSS_HASH));
|
||||
ret = -EINVAL;
|
||||
goto rollback;
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup new number of RX/TX queues and reconfigure device.
|
||||
*/
|
||||
|
@ -1088,6 +1088,7 @@ struct rte_eth_conf {
|
||||
#define DEV_RX_OFFLOAD_KEEP_CRC 0x00010000
|
||||
#define DEV_RX_OFFLOAD_SCTP_CKSUM 0x00020000
|
||||
#define DEV_RX_OFFLOAD_OUTER_UDP_CKSUM 0x00040000
|
||||
#define DEV_RX_OFFLOAD_RSS_HASH 0x00080000
|
||||
|
||||
#define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | \
|
||||
DEV_RX_OFFLOAD_UDP_CKSUM | \
|
||||
|
Loading…
Reference in New Issue
Block a user