net: hns3: split function hclge_get_fd_rule_info()
Currently the function hclge_get_fd_rule_info() is a bit long. Split it to several small functions, to improve readability. Signed-off-by: Jian Shen <shenjian15@huawei.com> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b60f9d2ec4
commit
a41fb3961d
@ -7172,6 +7172,37 @@ static void hclge_fd_get_ext_info(struct ethtool_rx_flow_spec *fs,
|
||||
}
|
||||
}
|
||||
|
||||
static struct hclge_fd_rule *hclge_get_fd_rule(struct hclge_dev *hdev,
|
||||
u16 location)
|
||||
{
|
||||
struct hclge_fd_rule *rule = NULL;
|
||||
struct hlist_node *node2;
|
||||
|
||||
hlist_for_each_entry_safe(rule, node2, &hdev->fd_rule_list, rule_node) {
|
||||
if (rule->location == location)
|
||||
return rule;
|
||||
else if (rule->location > location)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void hclge_fd_get_ring_cookie(struct ethtool_rx_flow_spec *fs,
|
||||
struct hclge_fd_rule *rule)
|
||||
{
|
||||
if (rule->action == HCLGE_FD_ACTION_DROP_PACKET) {
|
||||
fs->ring_cookie = RX_CLS_FLOW_DISC;
|
||||
} else {
|
||||
u64 vf_id;
|
||||
|
||||
fs->ring_cookie = rule->queue_id;
|
||||
vf_id = rule->vf_id;
|
||||
vf_id <<= ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
|
||||
fs->ring_cookie |= vf_id;
|
||||
}
|
||||
}
|
||||
|
||||
static int hclge_get_fd_rule_info(struct hnae3_handle *handle,
|
||||
struct ethtool_rxnfc *cmd)
|
||||
{
|
||||
@ -7179,7 +7210,6 @@ static int hclge_get_fd_rule_info(struct hnae3_handle *handle,
|
||||
struct hclge_fd_rule *rule = NULL;
|
||||
struct hclge_dev *hdev = vport->back;
|
||||
struct ethtool_rx_flow_spec *fs;
|
||||
struct hlist_node *node2;
|
||||
|
||||
if (!hnae3_dev_fd_supported(hdev))
|
||||
return -EOPNOTSUPP;
|
||||
@ -7188,14 +7218,9 @@ static int hclge_get_fd_rule_info(struct hnae3_handle *handle,
|
||||
|
||||
spin_lock_bh(&hdev->fd_rule_lock);
|
||||
|
||||
hlist_for_each_entry_safe(rule, node2, &hdev->fd_rule_list, rule_node) {
|
||||
if (rule->location >= fs->location)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!rule || fs->location != rule->location) {
|
||||
rule = hclge_get_fd_rule(hdev, fs->location);
|
||||
if (!rule) {
|
||||
spin_unlock_bh(&hdev->fd_rule_lock);
|
||||
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
@ -7233,16 +7258,7 @@ static int hclge_get_fd_rule_info(struct hnae3_handle *handle,
|
||||
|
||||
hclge_fd_get_ext_info(fs, rule);
|
||||
|
||||
if (rule->action == HCLGE_FD_ACTION_DROP_PACKET) {
|
||||
fs->ring_cookie = RX_CLS_FLOW_DISC;
|
||||
} else {
|
||||
u64 vf_id;
|
||||
|
||||
fs->ring_cookie = rule->queue_id;
|
||||
vf_id = rule->vf_id;
|
||||
vf_id <<= ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
|
||||
fs->ring_cookie |= vf_id;
|
||||
}
|
||||
hclge_fd_get_ring_cookie(fs, rule);
|
||||
|
||||
spin_unlock_bh(&hdev->fd_rule_lock);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user