ethdev: extend RSS offload types
This patch reserves several bits as input set selection from the high end of the 64 bits. It is combined with exisiting ETH_RSS_* to represent RSS types. This patch also checks the simultaneous use of SRC_ONLY and DST_ONLY of the same level. Signed-off-by: Simei Su <simei.su@intel.com> Reviewed-by: Qi Zhang <qi.z.zhang@intel.com> Acked-by: Ori Kam <orika@mellanox.com> Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
This commit is contained in:
parent
fce6b66893
commit
d3ae8c44b8
@ -1288,6 +1288,9 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
|
|||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf =
|
||||||
|
rte_eth_rss_hf_refine(dev_conf->rx_adv_conf.rss_conf.rss_hf);
|
||||||
|
|
||||||
/* Check that device supports requested rss hash functions. */
|
/* Check that device supports requested rss hash functions. */
|
||||||
if ((dev_info.flow_type_rss_offloads |
|
if ((dev_info.flow_type_rss_offloads |
|
||||||
dev_conf->rx_adv_conf.rss_conf.rss_hf) !=
|
dev_conf->rx_adv_conf.rss_conf.rss_hf) !=
|
||||||
@ -3131,6 +3134,8 @@ rte_eth_dev_rss_hash_update(uint16_t port_id,
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
rss_conf->rss_hf = rte_eth_rss_hf_refine(rss_conf->rss_hf);
|
||||||
|
|
||||||
dev = &rte_eth_devices[port_id];
|
dev = &rte_eth_devices[port_id];
|
||||||
if ((dev_info.flow_type_rss_offloads | rss_conf->rss_hf) !=
|
if ((dev_info.flow_type_rss_offloads | rss_conf->rss_hf) !=
|
||||||
dev_info.flow_type_rss_offloads) {
|
dev_info.flow_type_rss_offloads) {
|
||||||
|
@ -507,6 +507,42 @@ struct rte_eth_rss_conf {
|
|||||||
#define ETH_RSS_NVGRE (1ULL << 21)
|
#define ETH_RSS_NVGRE (1ULL << 21)
|
||||||
#define ETH_RSS_GTPU (1ULL << 23)
|
#define ETH_RSS_GTPU (1ULL << 23)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We use the following macros to combine with above ETH_RSS_* for
|
||||||
|
* more specific input set selection. These bits are defined starting
|
||||||
|
* from the high end of the 64 bits.
|
||||||
|
* Note: If we use above ETH_RSS_* without SRC/DST_ONLY, it represents
|
||||||
|
* both SRC and DST are taken into account. If SRC_ONLY and DST_ONLY of
|
||||||
|
* the same level are used simultaneously, it is the same case as none of
|
||||||
|
* them are added.
|
||||||
|
*/
|
||||||
|
#define ETH_RSS_L3_SRC_ONLY (1ULL << 63)
|
||||||
|
#define ETH_RSS_L3_DST_ONLY (1ULL << 62)
|
||||||
|
#define ETH_RSS_L4_SRC_ONLY (1ULL << 61)
|
||||||
|
#define ETH_RSS_L4_DST_ONLY (1ULL << 60)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For input set change of hash filter, if SRC_ONLY and DST_ONLY of
|
||||||
|
* the same level are used simultaneously, it is the same case as
|
||||||
|
* none of them are added.
|
||||||
|
*
|
||||||
|
* @param rss_hf
|
||||||
|
* RSS types with SRC/DST_ONLY.
|
||||||
|
* @return
|
||||||
|
* RSS types.
|
||||||
|
*/
|
||||||
|
static inline uint64_t
|
||||||
|
rte_eth_rss_hf_refine(uint64_t rss_hf)
|
||||||
|
{
|
||||||
|
if ((rss_hf & ETH_RSS_L3_SRC_ONLY) && (rss_hf & ETH_RSS_L3_DST_ONLY))
|
||||||
|
rss_hf &= ~(ETH_RSS_L3_SRC_ONLY | ETH_RSS_L3_DST_ONLY);
|
||||||
|
|
||||||
|
if ((rss_hf & ETH_RSS_L4_SRC_ONLY) && (rss_hf & ETH_RSS_L4_DST_ONLY))
|
||||||
|
rss_hf &= ~(ETH_RSS_L4_SRC_ONLY | ETH_RSS_L4_DST_ONLY);
|
||||||
|
|
||||||
|
return rss_hf;
|
||||||
|
}
|
||||||
|
|
||||||
#define ETH_RSS_IP ( \
|
#define ETH_RSS_IP ( \
|
||||||
ETH_RSS_IPV4 | \
|
ETH_RSS_IPV4 | \
|
||||||
ETH_RSS_FRAG_IPV4 | \
|
ETH_RSS_FRAG_IPV4 | \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user