Skip to content

Commit

Permalink
ethdev: add mbuf RSS update as an offload
Browse files Browse the repository at this point in the history
Add 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`.

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>
  • Loading branch information
PavanNikhilesh authored and Ferruh Yigit committed Nov 11, 2019
1 parent 5d4813a commit 5d30897
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 3 deletions.
4 changes: 2 additions & 2 deletions app/test-pmd/cmdline.c
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
2 changes: 2 additions & 0 deletions doc/guides/nics/features.rst
Expand Up @@ -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``.

Expand All @@ -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``.


Expand Down
7 changes: 7 additions & 0 deletions doc/guides/rel_notes/release_19_11.rst
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion doc/guides/testpmd_app_ug/testpmd_funcs.rst
Expand Up @@ -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.

Expand Down
12 changes: 12 additions & 0 deletions lib/librte_ethdev/rte_ethdev.c
Expand Up @@ -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
Expand Down Expand Up @@ -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.
*/
Expand Down
1 change: 1 addition & 0 deletions lib/librte_ethdev/rte_ethdev.h
Expand Up @@ -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 | \
Expand Down

0 comments on commit 5d30897

Please sign in to comment.