Code Review
/
deb_dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
New upstream version 18.11-rc4
[deb_dpdk.git]
/
drivers
/
net
/
mlx5
/
mlx5_flow_verbs.c
diff --git
a/drivers/net/mlx5/mlx5_flow_verbs.c
b/drivers/net/mlx5/mlx5_flow_verbs.c
index
d6d95db
..
81ec59d
100644
(file)
--- a/
drivers/net/mlx5/mlx5_flow_verbs.c
+++ b/
drivers/net/mlx5/mlx5_flow_verbs.c
@@
-68,9
+68,10
@@
flow_verbs_counter_create(struct rte_eth_dev *dev,
#elif defined(HAVE_IBV_DEVICE_COUNTERS_SET_V45)
struct priv *priv = dev->data->dev_private;
struct ibv_counters_init_attr init = {0};
#elif defined(HAVE_IBV_DEVICE_COUNTERS_SET_V45)
struct priv *priv = dev->data->dev_private;
struct ibv_counters_init_attr init = {0};
- struct ibv_counter_attach_attr attach
= {0}
;
+ struct ibv_counter_attach_attr attach;
int ret;
int ret;
+ memset(&attach, 0, sizeof(attach));
counter->cs = mlx5_glue->create_counters(priv->ctx, &init);
if (!counter->cs) {
rte_errno = ENOTSUP;
counter->cs = mlx5_glue->create_counters(priv->ctx, &init);
if (!counter->cs) {
rte_errno = ENOTSUP;
@@
-1017,6
+1018,7
@@
flow_verbs_validate(struct rte_eth_dev *dev,
int ret;
uint64_t action_flags = 0;
uint64_t item_flags = 0;
int ret;
uint64_t action_flags = 0;
uint64_t item_flags = 0;
+ uint64_t last_item = 0;
uint8_t next_protocol = 0xff;
if (items == NULL)
uint8_t next_protocol = 0xff;
if (items == NULL)
@@
-1036,26
+1038,26
@@
flow_verbs_validate(struct rte_eth_dev *dev,
error);
if (ret < 0)
return ret;
error);
if (ret < 0)
return ret;
-
item_flags |
= tunnel ? MLX5_FLOW_LAYER_INNER_L2 :
-
MLX5_FLOW_LAYER_OUTER_L2;
+
last_item
= tunnel ? MLX5_FLOW_LAYER_INNER_L2 :
+ MLX5_FLOW_LAYER_OUTER_L2;
break;
case RTE_FLOW_ITEM_TYPE_VLAN:
ret = mlx5_flow_validate_item_vlan(items, item_flags,
error);
if (ret < 0)
return ret;
break;
case RTE_FLOW_ITEM_TYPE_VLAN:
ret = mlx5_flow_validate_item_vlan(items, item_flags,
error);
if (ret < 0)
return ret;
-
item_flags |
= tunnel ? (MLX5_FLOW_LAYER_INNER_L2 |
-
MLX5_FLOW_LAYER_INNER_VLAN) :
-
(MLX5_FLOW_LAYER_OUTER_L2 |
-
MLX5_FLOW_LAYER_OUTER_VLAN);
+
last_item
= tunnel ? (MLX5_FLOW_LAYER_INNER_L2 |
+ MLX5_FLOW_LAYER_INNER_VLAN) :
+ (MLX5_FLOW_LAYER_OUTER_L2 |
+ MLX5_FLOW_LAYER_OUTER_VLAN);
break;
case RTE_FLOW_ITEM_TYPE_IPV4:
ret = mlx5_flow_validate_item_ipv4(items, item_flags,
error);
if (ret < 0)
return ret;
break;
case RTE_FLOW_ITEM_TYPE_IPV4:
ret = mlx5_flow_validate_item_ipv4(items, item_flags,
error);
if (ret < 0)
return ret;
-
item_flags |
= tunnel ? MLX5_FLOW_LAYER_INNER_L3_IPV4 :
-
MLX5_FLOW_LAYER_OUTER_L3_IPV4;
+
last_item
= tunnel ? MLX5_FLOW_LAYER_INNER_L3_IPV4 :
+ MLX5_FLOW_LAYER_OUTER_L3_IPV4;
if (items->mask != NULL &&
((const struct rte_flow_item_ipv4 *)
items->mask)->hdr.next_proto_id) {
if (items->mask != NULL &&
((const struct rte_flow_item_ipv4 *)
items->mask)->hdr.next_proto_id) {
@@
-1075,8
+1077,8
@@
flow_verbs_validate(struct rte_eth_dev *dev,
error);
if (ret < 0)
return ret;
error);
if (ret < 0)
return ret;
-
item_flags |
= tunnel ? MLX5_FLOW_LAYER_INNER_L3_IPV6 :
-
MLX5_FLOW_LAYER_OUTER_L3_IPV6;
+
last_item
= tunnel ? MLX5_FLOW_LAYER_INNER_L3_IPV6 :
+ MLX5_FLOW_LAYER_OUTER_L3_IPV6;
if (items->mask != NULL &&
((const struct rte_flow_item_ipv6 *)
items->mask)->hdr.proto) {
if (items->mask != NULL &&
((const struct rte_flow_item_ipv6 *)
items->mask)->hdr.proto) {
@@
-1097,8
+1099,8
@@
flow_verbs_validate(struct rte_eth_dev *dev,
error);
if (ret < 0)
return ret;
error);
if (ret < 0)
return ret;
-
item_flags |
= tunnel ? MLX5_FLOW_LAYER_INNER_L4_UDP :
-
MLX5_FLOW_LAYER_OUTER_L4_UDP;
+
last_item
= tunnel ? MLX5_FLOW_LAYER_INNER_L4_UDP :
+ MLX5_FLOW_LAYER_OUTER_L4_UDP;
break;
case RTE_FLOW_ITEM_TYPE_TCP:
ret = mlx5_flow_validate_item_tcp
break;
case RTE_FLOW_ITEM_TYPE_TCP:
ret = mlx5_flow_validate_item_tcp
@@
-1108,15
+1110,15
@@
flow_verbs_validate(struct rte_eth_dev *dev,
error);
if (ret < 0)
return ret;
error);
if (ret < 0)
return ret;
-
item_flags |
= tunnel ? MLX5_FLOW_LAYER_INNER_L4_TCP :
-
MLX5_FLOW_LAYER_OUTER_L4_TCP;
+
last_item
= tunnel ? MLX5_FLOW_LAYER_INNER_L4_TCP :
+ MLX5_FLOW_LAYER_OUTER_L4_TCP;
break;
case RTE_FLOW_ITEM_TYPE_VXLAN:
ret = mlx5_flow_validate_item_vxlan(items, item_flags,
error);
if (ret < 0)
return ret;
break;
case RTE_FLOW_ITEM_TYPE_VXLAN:
ret = mlx5_flow_validate_item_vxlan(items, item_flags,
error);
if (ret < 0)
return ret;
-
item_flags |
= MLX5_FLOW_LAYER_VXLAN;
+
last_item
= MLX5_FLOW_LAYER_VXLAN;
break;
case RTE_FLOW_ITEM_TYPE_VXLAN_GPE:
ret = mlx5_flow_validate_item_vxlan_gpe(items,
break;
case RTE_FLOW_ITEM_TYPE_VXLAN_GPE:
ret = mlx5_flow_validate_item_vxlan_gpe(items,
@@
-1124,28
+1126,29
@@
flow_verbs_validate(struct rte_eth_dev *dev,
dev, error);
if (ret < 0)
return ret;
dev, error);
if (ret < 0)
return ret;
-
item_flags |
= MLX5_FLOW_LAYER_VXLAN_GPE;
+
last_item
= MLX5_FLOW_LAYER_VXLAN_GPE;
break;
case RTE_FLOW_ITEM_TYPE_GRE:
ret = mlx5_flow_validate_item_gre(items, item_flags,
next_protocol, error);
if (ret < 0)
return ret;
break;
case RTE_FLOW_ITEM_TYPE_GRE:
ret = mlx5_flow_validate_item_gre(items, item_flags,
next_protocol, error);
if (ret < 0)
return ret;
-
item_flags |
= MLX5_FLOW_LAYER_GRE;
+
last_item
= MLX5_FLOW_LAYER_GRE;
break;
case RTE_FLOW_ITEM_TYPE_MPLS:
break;
case RTE_FLOW_ITEM_TYPE_MPLS:
- ret = mlx5_flow_validate_item_mpls(
items, item_flag
s,
-
next_protocol
,
- error);
+ ret = mlx5_flow_validate_item_mpls(
dev, item
s,
+
item_flags
,
+
last_item,
error);
if (ret < 0)
return ret;
if (ret < 0)
return ret;
-
item_flags |
= MLX5_FLOW_LAYER_MPLS;
+
last_item
= MLX5_FLOW_LAYER_MPLS;
break;
default:
return rte_flow_error_set(error, ENOTSUP,
RTE_FLOW_ERROR_TYPE_ITEM,
NULL, "item not supported");
}
break;
default:
return rte_flow_error_set(error, ENOTSUP,
RTE_FLOW_ERROR_TYPE_ITEM,
NULL, "item not supported");
}
+ item_flags |= last_item;
}
for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
switch (actions->type) {
}
for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
switch (actions->type) {