aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOr Gerlitz <ogerlitz@mellanox.com>2016-07-01 07:50:58 -0400
committerDavid S. Miller <davem@davemloft.net>2016-07-02 14:40:39 -0400
commitacbc2004d7129a1ecf02414c1da8808bdc06d5a2 (patch)
tree95890f06922fb5eea82e92a0bb378d915ffac1d8
parentab22be9ba30a08482b2c2effb36ac3f0ed3df465 (diff)
net/mlx5: Introduce offloads steering namespace
Add a new namespace (MLX5_FLOW_NAMESPACE_OFFLOADS) to be populated with flow steering rules that deal with rules that have have to be executed before the EN NIC steering rules are matched. The namespace is located after the bypass name-space and before the kernel name-space. Therefore, it precedes the HW processing done for rules set for the kernel NIC name-space. Under SRIOV, it would allow us to match on e-switch missed packet and forward them to the relevant VF representor TIR. Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Amir Vadai <amir@vadai.me> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/fs_core.c11
-rw-r--r--include/linux/mlx5/fs.h1
2 files changed, 11 insertions, 1 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
index e912a3d2505e..b0401104afb9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
@@ -83,6 +83,11 @@
83#define ANCHOR_NUM_LEVELS 1 83#define ANCHOR_NUM_LEVELS 1
84#define ANCHOR_NUM_PRIOS 1 84#define ANCHOR_NUM_PRIOS 1
85#define ANCHOR_MIN_LEVEL (BY_PASS_MIN_LEVEL + 1) 85#define ANCHOR_MIN_LEVEL (BY_PASS_MIN_LEVEL + 1)
86
87#define OFFLOADS_MAX_FT 1
88#define OFFLOADS_NUM_PRIOS 1
89#define OFFLOADS_MIN_LEVEL (ANCHOR_MIN_LEVEL + 1)
90
86struct node_caps { 91struct node_caps {
87 size_t arr_sz; 92 size_t arr_sz;
88 long *caps; 93 long *caps;
@@ -98,7 +103,7 @@ static struct init_tree_node {
98 int num_levels; 103 int num_levels;
99} root_fs = { 104} root_fs = {
100 .type = FS_TYPE_NAMESPACE, 105 .type = FS_TYPE_NAMESPACE,
101 .ar_size = 4, 106 .ar_size = 5,
102 .children = (struct init_tree_node[]) { 107 .children = (struct init_tree_node[]) {
103 ADD_PRIO(0, BY_PASS_MIN_LEVEL, 0, 108 ADD_PRIO(0, BY_PASS_MIN_LEVEL, 0,
104 FS_REQUIRED_CAPS(FS_CAP(flow_table_properties_nic_receive.flow_modify_en), 109 FS_REQUIRED_CAPS(FS_CAP(flow_table_properties_nic_receive.flow_modify_en),
@@ -107,6 +112,9 @@ static struct init_tree_node {
107 FS_CAP(flow_table_properties_nic_receive.flow_table_modify)), 112 FS_CAP(flow_table_properties_nic_receive.flow_table_modify)),
108 ADD_NS(ADD_MULTIPLE_PRIO(MLX5_BY_PASS_NUM_PRIOS, 113 ADD_NS(ADD_MULTIPLE_PRIO(MLX5_BY_PASS_NUM_PRIOS,
109 BY_PASS_PRIO_NUM_LEVELS))), 114 BY_PASS_PRIO_NUM_LEVELS))),
115 ADD_PRIO(0, OFFLOADS_MIN_LEVEL, 0, {},
116 ADD_NS(ADD_MULTIPLE_PRIO(OFFLOADS_NUM_PRIOS, OFFLOADS_MAX_FT))),
117
110 ADD_PRIO(0, KERNEL_MIN_LEVEL, 0, {}, 118 ADD_PRIO(0, KERNEL_MIN_LEVEL, 0, {},
111 ADD_NS(ADD_MULTIPLE_PRIO(1, 1), 119 ADD_NS(ADD_MULTIPLE_PRIO(1, 1),
112 ADD_MULTIPLE_PRIO(KERNEL_NIC_NUM_PRIOS, 120 ADD_MULTIPLE_PRIO(KERNEL_NIC_NUM_PRIOS,
@@ -1369,6 +1377,7 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
1369 1377
1370 switch (type) { 1378 switch (type) {
1371 case MLX5_FLOW_NAMESPACE_BYPASS: 1379 case MLX5_FLOW_NAMESPACE_BYPASS:
1380 case MLX5_FLOW_NAMESPACE_OFFLOADS:
1372 case MLX5_FLOW_NAMESPACE_KERNEL: 1381 case MLX5_FLOW_NAMESPACE_KERNEL:
1373 case MLX5_FLOW_NAMESPACE_LEFTOVERS: 1382 case MLX5_FLOW_NAMESPACE_LEFTOVERS:
1374 case MLX5_FLOW_NAMESPACE_ANCHOR: 1383 case MLX5_FLOW_NAMESPACE_ANCHOR:
diff --git a/include/linux/mlx5/fs.h b/include/linux/mlx5/fs.h
index 4b7a107d9c19..6ad111938709 100644
--- a/include/linux/mlx5/fs.h
+++ b/include/linux/mlx5/fs.h
@@ -54,6 +54,7 @@ static inline void build_leftovers_ft_param(int *priority,
54 54
55enum mlx5_flow_namespace_type { 55enum mlx5_flow_namespace_type {
56 MLX5_FLOW_NAMESPACE_BYPASS, 56 MLX5_FLOW_NAMESPACE_BYPASS,
57 MLX5_FLOW_NAMESPACE_OFFLOADS,
57 MLX5_FLOW_NAMESPACE_KERNEL, 58 MLX5_FLOW_NAMESPACE_KERNEL,
58 MLX5_FLOW_NAMESPACE_LEFTOVERS, 59 MLX5_FLOW_NAMESPACE_LEFTOVERS,
59 MLX5_FLOW_NAMESPACE_ANCHOR, 60 MLX5_FLOW_NAMESPACE_ANCHOR,