mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
eth: bnxt: support RSS on IPv6 Flow Label
It appears that the bnxt FW API has the relevant bit for Flow Label hashing. Plumb in the support. Obey the capability bit. Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Michael Chan <michael.chan@broadcom.com> Link: https://patch.msgid.link/20250811234212.580748-4-kuba@kernel.org Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
0afbfdc0f6
commit
46c0faa463
|
|
@ -6957,6 +6957,8 @@ static int bnxt_hwrm_vnic_qcaps(struct bnxt *bp)
|
|||
bp->rss_cap |= BNXT_RSS_CAP_ESP_V4_RSS_CAP;
|
||||
if (flags & VNIC_QCAPS_RESP_FLAGS_RSS_IPSEC_ESP_SPI_IPV6_CAP)
|
||||
bp->rss_cap |= BNXT_RSS_CAP_ESP_V6_RSS_CAP;
|
||||
if (flags & VNIC_QCAPS_RESP_FLAGS_RSS_IPV6_FLOW_LABEL_CAP)
|
||||
bp->rss_cap |= BNXT_RSS_CAP_IPV6_FLOW_LABEL_RSS_CAP;
|
||||
if (flags & VNIC_QCAPS_RESP_FLAGS_RE_FLUSH_CAP)
|
||||
bp->fw_cap |= BNXT_FW_CAP_VNIC_RE_FLUSH;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2407,6 +2407,7 @@ struct bnxt {
|
|||
#define BNXT_RSS_CAP_ESP_V4_RSS_CAP BIT(6)
|
||||
#define BNXT_RSS_CAP_ESP_V6_RSS_CAP BIT(7)
|
||||
#define BNXT_RSS_CAP_MULTI_RSS_CTX BIT(8)
|
||||
#define BNXT_RSS_CAP_IPV6_FLOW_LABEL_RSS_CAP BIT(9)
|
||||
|
||||
u8 rss_hash_key[HW_HASH_KEY_SIZE];
|
||||
u8 rss_hash_key_valid:1;
|
||||
|
|
|
|||
|
|
@ -1584,6 +1584,8 @@ static u64 get_ethtool_ipv6_rss(struct bnxt *bp)
|
|||
{
|
||||
if (bp->rss_hash_cfg & VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6)
|
||||
return RXH_IP_SRC | RXH_IP_DST;
|
||||
if (bp->rss_hash_cfg & VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6_FLOW_LABEL)
|
||||
return RXH_IP_SRC | RXH_IP_DST | RXH_IP6_FL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1662,13 +1664,18 @@ static int bnxt_set_rxfh_fields(struct net_device *dev,
|
|||
|
||||
if (cmd->data == RXH_4TUPLE)
|
||||
tuple = 4;
|
||||
else if (cmd->data == RXH_2TUPLE)
|
||||
else if (cmd->data == RXH_2TUPLE ||
|
||||
cmd->data == (RXH_2TUPLE | RXH_IP6_FL))
|
||||
tuple = 2;
|
||||
else if (!cmd->data)
|
||||
tuple = 0;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
if (cmd->data & RXH_IP6_FL &&
|
||||
!(bp->rss_cap & BNXT_RSS_CAP_IPV6_FLOW_LABEL_RSS_CAP))
|
||||
return -EINVAL;
|
||||
|
||||
if (cmd->flow_type == TCP_V4_FLOW) {
|
||||
rss_hash_cfg &= ~VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV4;
|
||||
if (tuple == 4)
|
||||
|
|
@ -1732,10 +1739,15 @@ static int bnxt_set_rxfh_fields(struct net_device *dev,
|
|||
case AH_V6_FLOW:
|
||||
case ESP_V6_FLOW:
|
||||
case IPV6_FLOW:
|
||||
if (tuple == 2)
|
||||
rss_hash_cfg &= ~(VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6 |
|
||||
VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6_FLOW_LABEL);
|
||||
if (!tuple)
|
||||
break;
|
||||
if (cmd->data & RXH_IP6_FL)
|
||||
rss_hash_cfg |=
|
||||
VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6_FLOW_LABEL;
|
||||
else if (tuple == 2)
|
||||
rss_hash_cfg |= VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6;
|
||||
else if (!tuple)
|
||||
rss_hash_cfg &= ~VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user