net: hns3: Add HW RSS hash information to RX skb
Drivers should call skb_set_hash to set the hash and its type in an skbuff. Signed-off-by: Peng Li <lipeng321@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d97b307213
commit
232fc64b6e
@ -479,6 +479,7 @@ struct hnae3_knic_private_info {
|
||||
const struct hnae3_dcb_ops *dcb_ops;
|
||||
|
||||
u16 int_rl_setting;
|
||||
enum pkt_hash_types rss_type;
|
||||
};
|
||||
|
||||
struct hnae3_roce_private_info {
|
||||
|
@ -2230,6 +2230,21 @@ static bool hns3_parse_vlan_tag(struct hns3_enet_ring *ring,
|
||||
}
|
||||
}
|
||||
|
||||
static void hns3_set_rx_skb_rss_type(struct hns3_enet_ring *ring,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct hns3_desc *desc = &ring->desc[ring->next_to_clean];
|
||||
struct hnae3_handle *handle = ring->tqp->handle;
|
||||
enum pkt_hash_types rss_type;
|
||||
|
||||
if (le32_to_cpu(desc->rx.rss_hash))
|
||||
rss_type = handle->kinfo.rss_type;
|
||||
else
|
||||
rss_type = PKT_HASH_TYPE_NONE;
|
||||
|
||||
skb_set_hash(skb, le32_to_cpu(desc->rx.rss_hash), rss_type);
|
||||
}
|
||||
|
||||
static int hns3_handle_rx_bd(struct hns3_enet_ring *ring,
|
||||
struct sk_buff **out_skb, int *out_bnum)
|
||||
{
|
||||
@ -2371,6 +2386,8 @@ static int hns3_handle_rx_bd(struct hns3_enet_ring *ring,
|
||||
ring->tqp_vector->rx_group.total_bytes += skb->len;
|
||||
|
||||
hns3_rx_checksum(ring, skb, desc);
|
||||
hns3_set_rx_skb_rss_type(ring, skb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2773,6 +2773,22 @@ static int hclge_set_rss_tc_mode(struct hclge_dev *hdev, u16 *tc_valid,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void hclge_get_rss_type(struct hclge_vport *vport)
|
||||
{
|
||||
if (vport->rss_tuple_sets.ipv4_tcp_en ||
|
||||
vport->rss_tuple_sets.ipv4_udp_en ||
|
||||
vport->rss_tuple_sets.ipv4_sctp_en ||
|
||||
vport->rss_tuple_sets.ipv6_tcp_en ||
|
||||
vport->rss_tuple_sets.ipv6_udp_en ||
|
||||
vport->rss_tuple_sets.ipv6_sctp_en)
|
||||
vport->nic.kinfo.rss_type = PKT_HASH_TYPE_L4;
|
||||
else if (vport->rss_tuple_sets.ipv4_fragment_en ||
|
||||
vport->rss_tuple_sets.ipv6_fragment_en)
|
||||
vport->nic.kinfo.rss_type = PKT_HASH_TYPE_L3;
|
||||
else
|
||||
vport->nic.kinfo.rss_type = PKT_HASH_TYPE_NONE;
|
||||
}
|
||||
|
||||
static int hclge_set_rss_input_tuple(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hclge_rss_input_tuple_cmd *req;
|
||||
@ -2792,6 +2808,7 @@ static int hclge_set_rss_input_tuple(struct hclge_dev *hdev)
|
||||
req->ipv6_udp_en = hdev->vport[0].rss_tuple_sets.ipv6_udp_en;
|
||||
req->ipv6_sctp_en = hdev->vport[0].rss_tuple_sets.ipv6_sctp_en;
|
||||
req->ipv6_fragment_en = hdev->vport[0].rss_tuple_sets.ipv6_fragment_en;
|
||||
hclge_get_rss_type(&hdev->vport[0]);
|
||||
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||
if (ret)
|
||||
dev_err(&hdev->pdev->dev,
|
||||
@ -2973,6 +2990,7 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle,
|
||||
vport->rss_tuple_sets.ipv6_udp_en = req->ipv6_udp_en;
|
||||
vport->rss_tuple_sets.ipv6_sctp_en = req->ipv6_sctp_en;
|
||||
vport->rss_tuple_sets.ipv6_fragment_en = req->ipv6_fragment_en;
|
||||
hclge_get_rss_type(vport);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user