History

net/mlx5: Pass flow steering objects to fs_cmd

Pass the flow steering objects instead of their attributes to fs_cmd in order to decrease number of arguments and in addition it will be used to update object fields. Pass the flow steering root namespace instead of the device so will have context to the namespace in the fs_cmd layer.

Maor Gottlieb committed 7 years ago

Commit ae288a41 parent 72c6f524 files · +128 −132Browse files

Unified · Split

4 files
  1. drivers/net/ethernet/mellanox/mlx5/core/fpga/ipsec.c +45 −41
  2. drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c +50 −49
  3. drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.h +15 −18
  4. drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +18 −24
drivers/net/ethernet/mellanox/mlx5/core/fpga/ipsec.c+45−41
@@ -989,32 +989,33 @@ static enum fs_flow_table_type egress_to_fs_ft(bool egress) · 988 unmodified lines
989989 return egress ? FS_FT_NIC_TX : FS_FT_NIC_RX;
990990 }
991991
992−static int fpga_ipsec_fs_create_flow_group(struct mlx5_core_dev *dev,
992+static int fpga_ipsec_fs_create_flow_group(struct mlx5_flow_root_namespace *ns,
993993 struct mlx5_flow_table *ft,
994994 u32 *in,
995− unsigned int *group_id,
995+ struct mlx5_flow_group *fg,
996996 bool is_egress)
997997 {
998− int (*create_flow_group)(struct mlx5_core_dev *dev,
998+ int (*create_flow_group)(struct mlx5_flow_root_namespace *ns,
999999 struct mlx5_flow_table *ft, u32 *in,
1000− unsigned int *group_id) =
1000+ struct mlx5_flow_group *fg) =
10011001 mlx5_fs_cmd_get_default(egress_to_fs_ft(is_egress))->create_flow_group;
10021002 char *misc_params_c = MLX5_ADDR_OF(create_flow_group_in, in,
10031003 match_criteria.misc_parameters);
1004+ struct mlx5_core_dev *dev = ns->dev;
10041005 u32 saved_outer_esp_spi_mask;
10051006 u8 match_criteria_enable;
10061007 int ret;
10071008
10081009 if (MLX5_CAP_FLOWTABLE(dev,
10091010 flow_table_properties_nic_receive.ft_field_support.outer_esp_spi))
1010− return create_flow_group(dev, ft, in, group_id);
1011+ return create_flow_group(ns, ft, in, fg);
10111012
10121013 match_criteria_enable =
10131014 MLX5_GET(create_flow_group_in, in, match_criteria_enable);
10141015 saved_outer_esp_spi_mask =
10151016 MLX5_GET(fte_match_set_misc, misc_params_c, outer_esp_spi);
10161017 if (!match_criteria_enable || !saved_outer_esp_spi_mask)
1017− return create_flow_group(dev, ft, in, group_id);
1018+ return create_flow_group(ns, ft, in, fg);
10181019
10191020 MLX5_SET(fte_match_set_misc, misc_params_c, outer_esp_spi, 0);
10201021
@@ -1023,7 +1024,7 @@ static int fpga_ipsec_fs_create_flow_group(struct mlx5_core_dev *dev, · 2 unmodified lines
10231024 MLX5_SET(create_flow_group_in, in, match_criteria_enable,
10241025 match_criteria_enable & ~MLX5_MATCH_MISC_PARAMETERS);
10251026
1026− ret = create_flow_group(dev, ft, in, group_id);
1027+ ret = create_flow_group(ns, ft, in, fg);
10271028
10281029 MLX5_SET(fte_match_set_misc, misc_params_c, outer_esp_spi, saved_outer_esp_spi_mask);
10291030 MLX5_SET(create_flow_group_in, in, match_criteria_enable, match_criteria_enable);
@@ -1031,17 +1032,18 @@ static int fpga_ipsec_fs_create_flow_group(struct mlx5_core_dev *dev, · 1 unmodified line
10311032 return ret;
10321033 }
10331034
1034−static int fpga_ipsec_fs_create_fte(struct mlx5_core_dev *dev,
1035+static int fpga_ipsec_fs_create_fte(struct mlx5_flow_root_namespace *ns,
10351036 struct mlx5_flow_table *ft,
10361037 struct mlx5_flow_group *fg,
10371038 struct fs_fte *fte,
10381039 bool is_egress)
10391040 {
1040− int (*create_fte)(struct mlx5_core_dev *dev,
1041+ int (*create_fte)(struct mlx5_flow_root_namespace *ns,
10411042 struct mlx5_flow_table *ft,
10421043 struct mlx5_flow_group *fg,
10431044 struct fs_fte *fte) =
10441045 mlx5_fs_cmd_get_default(egress_to_fs_ft(is_egress))->create_fte;
1046+ struct mlx5_core_dev *dev = ns->dev;
10451047 struct mlx5_fpga_device *fdev = dev->fpga;
10461048 struct mlx5_fpga_ipsec *fipsec = fdev->ipsec;
10471049 struct mlx5_fpga_ipsec_rule *rule;
@@ -1053,7 +1055,7 @@ static int fpga_ipsec_fs_create_fte(struct mlx5_core_dev *dev, · 5 unmodified lines
10531055 !(fte->action.action &
10541056 (MLX5_FLOW_CONTEXT_ACTION_ENCRYPT |
10551057 MLX5_FLOW_CONTEXT_ACTION_DECRYPT)))
1056− return create_fte(dev, ft, fg, fte);
1058+ return create_fte(ns, ft, fg, fte);
10571059
10581060 rule = kzalloc(sizeof(*rule), GFP_KERNEL);
10591061 if (!rule)
@@ -1070,7 +1072,7 @@ static int fpga_ipsec_fs_create_fte(struct mlx5_core_dev *dev, · 10 unmodified lines
10701072 WARN_ON(rule_insert(fipsec, rule));
10711073
10721074 modify_spec_mailbox(dev, fte, &mbox_mod);
1073− ret = create_fte(dev, ft, fg, fte);
1075+ ret = create_fte(ns, ft, fg, fte);
10741076 restore_spec_mailbox(fte, &mbox_mod);
10751077 if (ret) {
10761078 _rule_delete(fipsec, rule);
@@ -1081,19 +1083,20 @@ static int fpga_ipsec_fs_create_fte(struct mlx5_core_dev *dev, · 4 unmodified lines
10811083 return ret;
10821084 }
10831085
1084−static int fpga_ipsec_fs_update_fte(struct mlx5_core_dev *dev,
1086+static int fpga_ipsec_fs_update_fte(struct mlx5_flow_root_namespace *ns,
10851087 struct mlx5_flow_table *ft,
1086− unsigned int group_id,
1088+ struct mlx5_flow_group *fg,
10871089 int modify_mask,
10881090 struct fs_fte *fte,
10891091 bool is_egress)
10901092 {
1091− int (*update_fte)(struct mlx5_core_dev *dev,
1093+ int (*update_fte)(struct mlx5_flow_root_namespace *ns,
10921094 struct mlx5_flow_table *ft,
1093− unsigned int group_id,
1095+ struct mlx5_flow_group *fg,
10941096 int modify_mask,
10951097 struct fs_fte *fte) =
10961098 mlx5_fs_cmd_get_default(egress_to_fs_ft(is_egress))->update_fte;
1099+ struct mlx5_core_dev *dev = ns->dev;
10971100 bool is_esp = fte->action.esp_id;
10981101 struct mailbox_mod mbox_mod;
10991102 int ret;
@@ -1102,24 +1105,25 @@ static int fpga_ipsec_fs_update_fte(struct mlx5_core_dev *dev, · 2 unmodified lines
11021105 !(fte->action.action &
11031106 (MLX5_FLOW_CONTEXT_ACTION_ENCRYPT |
11041107 MLX5_FLOW_CONTEXT_ACTION_DECRYPT)))
1105− return update_fte(dev, ft, group_id, modify_mask, fte);
1108+ return update_fte(ns, ft, fg, modify_mask, fte);
11061109
11071110 modify_spec_mailbox(dev, fte, &mbox_mod);
1108− ret = update_fte(dev, ft, group_id, modify_mask, fte);
1111+ ret = update_fte(ns, ft, fg, modify_mask, fte);
11091112 restore_spec_mailbox(fte, &mbox_mod);
11101113
11111114 return ret;
11121115 }
11131116
1114−static int fpga_ipsec_fs_delete_fte(struct mlx5_core_dev *dev,
1117+static int fpga_ipsec_fs_delete_fte(struct mlx5_flow_root_namespace *ns,
11151118 struct mlx5_flow_table *ft,
11161119 struct fs_fte *fte,
11171120 bool is_egress)
11181121 {
1119− int (*delete_fte)(struct mlx5_core_dev *dev,
1122+ int (*delete_fte)(struct mlx5_flow_root_namespace *ns,
11201123 struct mlx5_flow_table *ft,
11211124 struct fs_fte *fte) =
11221125 mlx5_fs_cmd_get_default(egress_to_fs_ft(is_egress))->delete_fte;
1126+ struct mlx5_core_dev *dev = ns->dev;
11231127 struct mlx5_fpga_device *fdev = dev->fpga;
11241128 struct mlx5_fpga_ipsec *fipsec = fdev->ipsec;
11251129 struct mlx5_fpga_ipsec_rule *rule;
@@ -1131,7 +1135,7 @@ static int fpga_ipsec_fs_delete_fte(struct mlx5_core_dev *dev, · 5 unmodified lines
11311135 !(fte->action.action &
11321136 (MLX5_FLOW_CONTEXT_ACTION_ENCRYPT |
11331137 MLX5_FLOW_CONTEXT_ACTION_DECRYPT)))
1134− return delete_fte(dev, ft, fte);
1138+ return delete_fte(ns, ft, fte);
11351139
11361140 rule = rule_search(fipsec, fte);
11371141 if (!rule)
@@ -1141,84 +1145,84 @@ static int fpga_ipsec_fs_delete_fte(struct mlx5_core_dev *dev, · 3 unmodified lines
11411145 rule_delete(fipsec, rule);
11421146
11431147 modify_spec_mailbox(dev, fte, &mbox_mod);
1144− ret = delete_fte(dev, ft, fte);
1148+ ret = delete_fte(ns, ft, fte);
11451149 restore_spec_mailbox(fte, &mbox_mod);
11461150
11471151 return ret;
11481152 }
11491153
11501154 static int
1151−mlx5_fpga_ipsec_fs_create_flow_group_egress(struct mlx5_core_dev *dev,
1155+mlx5_fpga_ipsec_fs_create_flow_group_egress(struct mlx5_flow_root_namespace *ns,
11521156 struct mlx5_flow_table *ft,
11531157 u32 *in,
1154− unsigned int *group_id)
1158+ struct mlx5_flow_group *fg)
11551159 {
1156− return fpga_ipsec_fs_create_flow_group(dev, ft, in, group_id, true);
1160+ return fpga_ipsec_fs_create_flow_group(ns, ft, in, fg, true);
11571161 }
11581162
11591163 static int
1160−mlx5_fpga_ipsec_fs_create_fte_egress(struct mlx5_core_dev *dev,
1164+mlx5_fpga_ipsec_fs_create_fte_egress(struct mlx5_flow_root_namespace *ns,
11611165 struct mlx5_flow_table *ft,
11621166 struct mlx5_flow_group *fg,
11631167 struct fs_fte *fte)
11641168 {
1165− return fpga_ipsec_fs_create_fte(dev, ft, fg, fte, true);
1169+ return fpga_ipsec_fs_create_fte(ns, ft, fg, fte, true);
11661170 }
11671171
11681172 static int
1169−mlx5_fpga_ipsec_fs_update_fte_egress(struct mlx5_core_dev *dev,
1173+mlx5_fpga_ipsec_fs_update_fte_egress(struct mlx5_flow_root_namespace *ns,
11701174 struct mlx5_flow_table *ft,
1171− unsigned int group_id,
1175+ struct mlx5_flow_group *fg,
11721176 int modify_mask,
11731177 struct fs_fte *fte)
11741178 {
1175− return fpga_ipsec_fs_update_fte(dev, ft, group_id, modify_mask, fte,
1179+ return fpga_ipsec_fs_update_fte(ns, ft, fg, modify_mask, fte,
11761180 true);
11771181 }
11781182
11791183 static int
1180−mlx5_fpga_ipsec_fs_delete_fte_egress(struct mlx5_core_dev *dev,
1184+mlx5_fpga_ipsec_fs_delete_fte_egress(struct mlx5_flow_root_namespace *ns,
11811185 struct mlx5_flow_table *ft,
11821186 struct fs_fte *fte)
11831187 {
1184− return fpga_ipsec_fs_delete_fte(dev, ft, fte, true);
1188+ return fpga_ipsec_fs_delete_fte(ns, ft, fte, true);
11851189 }
11861190
11871191 static int
1188−mlx5_fpga_ipsec_fs_create_flow_group_ingress(struct mlx5_core_dev *dev,
1192+mlx5_fpga_ipsec_fs_create_flow_group_ingress(struct mlx5_flow_root_namespace *ns,
11891193 struct mlx5_flow_table *ft,
11901194 u32 *in,
1191− unsigned int *group_id)
1195+ struct mlx5_flow_group *fg)
11921196 {
1193− return fpga_ipsec_fs_create_flow_group(dev, ft, in, group_id, false);
1197+ return fpga_ipsec_fs_create_flow_group(ns, ft, in, fg, false);
11941198 }
11951199
11961200 static int
1197−mlx5_fpga_ipsec_fs_create_fte_ingress(struct mlx5_core_dev *dev,
1201+mlx5_fpga_ipsec_fs_create_fte_ingress(struct mlx5_flow_root_namespace *ns,
11981202 struct mlx5_flow_table *ft,
11991203 struct mlx5_flow_group *fg,
12001204 struct fs_fte *fte)
12011205 {
1202− return fpga_ipsec_fs_create_fte(dev, ft, fg, fte, false);
1206+ return fpga_ipsec_fs_create_fte(ns, ft, fg, fte, false);
12031207 }
12041208
12051209 static int
1206−mlx5_fpga_ipsec_fs_update_fte_ingress(struct mlx5_core_dev *dev,
1210+mlx5_fpga_ipsec_fs_update_fte_ingress(struct mlx5_flow_root_namespace *ns,
12071211 struct mlx5_flow_table *ft,
1208− unsigned int group_id,
1212+ struct mlx5_flow_group *fg,
12091213 int modify_mask,
12101214 struct fs_fte *fte)
12111215 {
1212− return fpga_ipsec_fs_update_fte(dev, ft, group_id, modify_mask, fte,
1216+ return fpga_ipsec_fs_update_fte(ns, ft, fg, modify_mask, fte,
12131217 false);
12141218 }
12151219
12161220 static int
1217−mlx5_fpga_ipsec_fs_delete_fte_ingress(struct mlx5_core_dev *dev,
1221+mlx5_fpga_ipsec_fs_delete_fte_ingress(struct mlx5_flow_root_namespace *ns,
12181222 struct mlx5_flow_table *ft,
12191223 struct fs_fte *fte)
12201224 {
1221− return fpga_ipsec_fs_delete_fte(dev, ft, fte, false);
1225+ return fpga_ipsec_fs_delete_fte(ns, ft, fte, false);
12221226 }
12231227
12241228 static struct mlx5_flow_cmds fpga_ipsec_ingress;
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c+50−49
@@ -39,7 +39,7 @@ · 38 unmodified lines
3939 #include "mlx5_core.h"
4040 #include "eswitch.h"
4141
42−static int mlx5_cmd_stub_update_root_ft(struct mlx5_core_dev *dev,
42+static int mlx5_cmd_stub_update_root_ft(struct mlx5_flow_root_namespace *ns,
4343 struct mlx5_flow_table *ft,
4444 u32 underlay_qpn,
4545 bool disconnect)
@@ -47,47 +47,43 @@ static int mlx5_cmd_stub_update_root_ft(struct mlx5_core_dev *dev, · 1 unmodified line
4747 return 0;
4848 }
4949
50−static int mlx5_cmd_stub_create_flow_table(struct mlx5_core_dev *dev,
51− u16 vport,
52− enum fs_flow_table_op_mod op_mod,
53− enum fs_flow_table_type type,
54− unsigned int level,
50+static int mlx5_cmd_stub_create_flow_table(struct mlx5_flow_root_namespace *ns,
51+ struct mlx5_flow_table *ft,
5552 unsigned int log_size,
56− struct mlx5_flow_table *next_ft,
57− unsigned int *table_id, u32 flags)
53+ struct mlx5_flow_table *next_ft)
5854 {
5955 return 0;
6056 }
6157
62−static int mlx5_cmd_stub_destroy_flow_table(struct mlx5_core_dev *dev,
58+static int mlx5_cmd_stub_destroy_flow_table(struct mlx5_flow_root_namespace *ns,
6359 struct mlx5_flow_table *ft)
6460 {
6561 return 0;
6662 }
6763
68−static int mlx5_cmd_stub_modify_flow_table(struct mlx5_core_dev *dev,
64+static int mlx5_cmd_stub_modify_flow_table(struct mlx5_flow_root_namespace *ns,
6965 struct mlx5_flow_table *ft,
7066 struct mlx5_flow_table *next_ft)
7167 {
7268 return 0;
7369 }
7470
75−static int mlx5_cmd_stub_create_flow_group(struct mlx5_core_dev *dev,
71+static int mlx5_cmd_stub_create_flow_group(struct mlx5_flow_root_namespace *ns,
7672 struct mlx5_flow_table *ft,
7773 u32 *in,
78− unsigned int *group_id)
74+ struct mlx5_flow_group *fg)
7975 {
8076 return 0;
8177 }
8278
83−static int mlx5_cmd_stub_destroy_flow_group(struct mlx5_core_dev *dev,
79+static int mlx5_cmd_stub_destroy_flow_group(struct mlx5_flow_root_namespace *ns,
8480 struct mlx5_flow_table *ft,
85− unsigned int group_id)
81+ struct mlx5_flow_group *fg)
8682 {
8783 return 0;
8884 }
8985
90−static int mlx5_cmd_stub_create_fte(struct mlx5_core_dev *dev,
86+static int mlx5_cmd_stub_create_fte(struct mlx5_flow_root_namespace *ns,
9187 struct mlx5_flow_table *ft,
9288 struct mlx5_flow_group *group,
9389 struct fs_fte *fte)
@@ -95,28 +91,29 @@ static int mlx5_cmd_stub_create_fte(struct mlx5_core_dev *dev, · 1 unmodified line
9591 return 0;
9692 }
9793
98−static int mlx5_cmd_stub_update_fte(struct mlx5_core_dev *dev,
94+static int mlx5_cmd_stub_update_fte(struct mlx5_flow_root_namespace *ns,
9995 struct mlx5_flow_table *ft,
100− unsigned int group_id,
96+ struct mlx5_flow_group *group,
10197 int modify_mask,
10298 struct fs_fte *fte)
10399 {
104100 return -EOPNOTSUPP;
105101 }
106102
107−static int mlx5_cmd_stub_delete_fte(struct mlx5_core_dev *dev,
103+static int mlx5_cmd_stub_delete_fte(struct mlx5_flow_root_namespace *ns,
108104 struct mlx5_flow_table *ft,
109105 struct fs_fte *fte)
110106 {
111107 return 0;
112108 }
113109
114−static int mlx5_cmd_update_root_ft(struct mlx5_core_dev *dev,
110+static int mlx5_cmd_update_root_ft(struct mlx5_flow_root_namespace *ns,
115111 struct mlx5_flow_table *ft, u32 underlay_qpn,
116112 bool disconnect)
117113 {
118114 u32 in[MLX5_ST_SZ_DW(set_flow_table_root_in)] = {0};
119115 u32 out[MLX5_ST_SZ_DW(set_flow_table_root_out)] = {0};
116+ struct mlx5_core_dev *dev = ns->dev;
120117
121118 if ((MLX5_CAP_GEN(dev, port_type) == MLX5_CAP_PORT_TYPE_IB) &&
122119 underlay_qpn == 0)
@@ -143,29 +140,26 @@ static int mlx5_cmd_update_root_ft(struct mlx5_core_dev *dev, · 20 unmodified lines
143140 return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
144141 }
145142
146−static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
147− u16 vport,
148− enum fs_flow_table_op_mod op_mod,
149− enum fs_flow_table_type type,
150− unsigned int level,
143+static int mlx5_cmd_create_flow_table(struct mlx5_flow_root_namespace *ns,
144+ struct mlx5_flow_table *ft,
151145 unsigned int log_size,
152− struct mlx5_flow_table *next_ft,
153− unsigned int *table_id, u32 flags)
146+ struct mlx5_flow_table *next_ft)
154147 {
155− int en_encap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT);
156− int en_decap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
148+ int en_encap = !!(ft->flags & MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT);
149+ int en_decap = !!(ft->flags & MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
157150 u32 out[MLX5_ST_SZ_DW(create_flow_table_out)] = {0};
158151 u32 in[MLX5_ST_SZ_DW(create_flow_table_in)] = {0};
152+ struct mlx5_core_dev *dev = ns->dev;
159153 int err;
160154
161155 MLX5_SET(create_flow_table_in, in, opcode,
162156 MLX5_CMD_OP_CREATE_FLOW_TABLE);
163157
164− MLX5_SET(create_flow_table_in, in, table_type, type);
165− MLX5_SET(create_flow_table_in, in, flow_table_context.level, level);
158+ MLX5_SET(create_flow_table_in, in, table_type, ft->type);
159+ MLX5_SET(create_flow_table_in, in, flow_table_context.level, ft->level);
166160 MLX5_SET(create_flow_table_in, in, flow_table_context.log_size, log_size);
167− if (vport) {
168− MLX5_SET(create_flow_table_in, in, vport_number, vport);
161+ if (ft->vport) {
162+ MLX5_SET(create_flow_table_in, in, vport_number, ft->vport);
169163 MLX5_SET(create_flow_table_in, in, other_vport, 1);
170164 }
171165
@@ -174,7 +168,7 @@ static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev, · 2 unmodified lines
174168 MLX5_SET(create_flow_table_in, in, flow_table_context.reformat_en,
175169 en_encap);
176170
177− switch (op_mod) {
171+ switch (ft->op_mod) {
178172 case FS_FT_OP_MOD_NORMAL:
179173 if (next_ft) {
180174 MLX5_SET(create_flow_table_in, in,
@@ -195,16 +189,17 @@ static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev, · 14 unmodified lines
195189
196190 err = mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
197191 if (!err)
198− *table_id = MLX5_GET(create_flow_table_out, out,
199− table_id);
192+ ft->id = MLX5_GET(create_flow_table_out, out,
193+ table_id);
200194 return err;
201195 }
202196
203−static int mlx5_cmd_destroy_flow_table(struct mlx5_core_dev *dev,
197+static int mlx5_cmd_destroy_flow_table(struct mlx5_flow_root_namespace *ns,
204198 struct mlx5_flow_table *ft)
205199 {
206200 u32 in[MLX5_ST_SZ_DW(destroy_flow_table_in)] = {0};
207201 u32 out[MLX5_ST_SZ_DW(destroy_flow_table_out)] = {0};
202+ struct mlx5_core_dev *dev = ns->dev;
208203
209204 MLX5_SET(destroy_flow_table_in, in, opcode,
210205 MLX5_CMD_OP_DESTROY_FLOW_TABLE);
@@ -218,12 +213,13 @@ static int mlx5_cmd_destroy_flow_table(struct mlx5_core_dev *dev, · 7 unmodified lines
218213 return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
219214 }
220215
221−static int mlx5_cmd_modify_flow_table(struct mlx5_core_dev *dev,
216+static int mlx5_cmd_modify_flow_table(struct mlx5_flow_root_namespace *ns,
222217 struct mlx5_flow_table *ft,
223218 struct mlx5_flow_table *next_ft)
224219 {
225220 u32 in[MLX5_ST_SZ_DW(modify_flow_table_in)] = {0};
226221 u32 out[MLX5_ST_SZ_DW(modify_flow_table_out)] = {0};
222+ struct mlx5_core_dev *dev = ns->dev;
227223
228224 MLX5_SET(modify_flow_table_in, in, opcode,
229225 MLX5_CMD_OP_MODIFY_FLOW_TABLE);
@@ -263,13 +259,14 @@ static int mlx5_cmd_modify_flow_table(struct mlx5_core_dev *dev, · 33 unmodified lines
263259 return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
264260 }
265261
266−static int mlx5_cmd_create_flow_group(struct mlx5_core_dev *dev,
262+static int mlx5_cmd_create_flow_group(struct mlx5_flow_root_namespace *ns,
267263 struct mlx5_flow_table *ft,
268264 u32 *in,
269− unsigned int *group_id)
265+ struct mlx5_flow_group *fg)
270266 {
271267 u32 out[MLX5_ST_SZ_DW(create_flow_group_out)] = {0};
272268 int inlen = MLX5_ST_SZ_BYTES(create_flow_group_in);
269+ struct mlx5_core_dev *dev = ns->dev;
273270 int err;
274271
275272 MLX5_SET(create_flow_group_in, in, opcode,
@@ -283,23 +280,24 @@ static int mlx5_cmd_create_flow_group(struct mlx5_core_dev *dev, · 7 unmodified lines
283280
284281 err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
285282 if (!err)
286− *group_id = MLX5_GET(create_flow_group_out, out,
287− group_id);
283+ fg->id = MLX5_GET(create_flow_group_out, out,
284+ group_id);
288285 return err;
289286 }
290287
291−static int mlx5_cmd_destroy_flow_group(struct mlx5_core_dev *dev,
288+static int mlx5_cmd_destroy_flow_group(struct mlx5_flow_root_namespace *ns,
292289 struct mlx5_flow_table *ft,
293− unsigned int group_id)
290+ struct mlx5_flow_group *fg)
294291 {
295292 u32 out[MLX5_ST_SZ_DW(destroy_flow_group_out)] = {0};
296293 u32 in[MLX5_ST_SZ_DW(destroy_flow_group_in)] = {0};
294+ struct mlx5_core_dev *dev = ns->dev;
297295
298296 MLX5_SET(destroy_flow_group_in, in, opcode,
299297 MLX5_CMD_OP_DESTROY_FLOW_GROUP);
300298 MLX5_SET(destroy_flow_group_in, in, table_type, ft->type);
301299 MLX5_SET(destroy_flow_group_in, in, table_id, ft->id);
302− MLX5_SET(destroy_flow_group_in, in, group_id, group_id);
300+ MLX5_SET(destroy_flow_group_in, in, group_id, fg->id);
303301 if (ft->vport) {
304302 MLX5_SET(destroy_flow_group_in, in, vport_number, ft->vport);
305303 MLX5_SET(destroy_flow_group_in, in, other_vport, 1);
@@ -505,23 +503,25 @@ err_out: · 199 unmodified lines
505503 return err;
506504 }
507505
508−static int mlx5_cmd_create_fte(struct mlx5_core_dev *dev,
506+static int mlx5_cmd_create_fte(struct mlx5_flow_root_namespace *ns,
509507 struct mlx5_flow_table *ft,
510508 struct mlx5_flow_group *group,
511509 struct fs_fte *fte)
512510 {
511+ struct mlx5_core_dev *dev = ns->dev;
513512 unsigned int group_id = group->id;
514513
515514 return mlx5_cmd_set_fte(dev, 0, 0, ft, group_id, fte);
516515 }
517516
518−static int mlx5_cmd_update_fte(struct mlx5_core_dev *dev,
517+static int mlx5_cmd_update_fte(struct mlx5_flow_root_namespace *ns,
519518 struct mlx5_flow_table *ft,
520− unsigned int group_id,
519+ struct mlx5_flow_group *fg,
521520 int modify_mask,
522521 struct fs_fte *fte)
523522 {
524523 int opmod;
524+ struct mlx5_core_dev *dev = ns->dev;
525525 int atomic_mod_cap = MLX5_CAP_FLOWTABLE(dev,
526526 flow_table_properties_nic_receive.
527527 flow_modify_en);
@@ -529,15 +529,16 @@ static int mlx5_cmd_update_fte(struct mlx5_core_dev *dev, · 1 unmodified line
529529 return -EOPNOTSUPP;
530530 opmod = 1;
531531
532− return mlx5_cmd_set_fte(dev, opmod, modify_mask, ft, group_id, fte);
532+ return mlx5_cmd_set_fte(dev, opmod, modify_mask, ft, fg->id, fte);
533533 }
534534
535−static int mlx5_cmd_delete_fte(struct mlx5_core_dev *dev,
535+static int mlx5_cmd_delete_fte(struct mlx5_flow_root_namespace *ns,
536536 struct mlx5_flow_table *ft,
537537 struct fs_fte *fte)
538538 {
539539 u32 out[MLX5_ST_SZ_DW(delete_fte_out)] = {0};
540540 u32 in[MLX5_ST_SZ_DW(delete_fte_in)] = {0};
541+ struct mlx5_core_dev *dev = ns->dev;
541542
542543 MLX5_SET(delete_fte_in, in, opcode, MLX5_CMD_OP_DELETE_FLOW_TABLE_ENTRY);
543544 MLX5_SET(delete_fte_in, in, table_type, ft->type);
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.h+15−18
@@ -36,45 +36,42 @@ · 35 unmodified lines
3636 #include "fs_core.h"
3737
3838 struct mlx5_flow_cmds {
39− int (*create_flow_table)(struct mlx5_core_dev *dev,
40− u16 vport,
41− enum fs_flow_table_op_mod op_mod,
42− enum fs_flow_table_type type,
43− unsigned int level, unsigned int log_size,
44− struct mlx5_flow_table *next_ft,
45− unsigned int *table_id, u32 flags);
46− int (*destroy_flow_table)(struct mlx5_core_dev *dev,
39+ int (*create_flow_table)(struct mlx5_flow_root_namespace *ns,
40+ struct mlx5_flow_table *ft,
41+ unsigned int log_size,
42+ struct mlx5_flow_table *next_ft);
43+ int (*destroy_flow_table)(struct mlx5_flow_root_namespace *ns,
4744 struct mlx5_flow_table *ft);
4845
49− int (*modify_flow_table)(struct mlx5_core_dev *dev,
46+ int (*modify_flow_table)(struct mlx5_flow_root_namespace *ns,
5047 struct mlx5_flow_table *ft,
5148 struct mlx5_flow_table *next_ft);
5249
53− int (*create_flow_group)(struct mlx5_core_dev *dev,
50+ int (*create_flow_group)(struct mlx5_flow_root_namespace *ns,
5451 struct mlx5_flow_table *ft,
5552 u32 *in,
56− unsigned int *group_id);
53+ struct mlx5_flow_group *fg);
5754
58− int (*destroy_flow_group)(struct mlx5_core_dev *dev,
55+ int (*destroy_flow_group)(struct mlx5_flow_root_namespace *ns,
5956 struct mlx5_flow_table *ft,
60− unsigned int group_id);
57+ struct mlx5_flow_group *fg);
6158
62− int (*create_fte)(struct mlx5_core_dev *dev,
59+ int (*create_fte)(struct mlx5_flow_root_namespace *ns,
6360 struct mlx5_flow_table *ft,
6461 struct mlx5_flow_group *fg,
6562 struct fs_fte *fte);
6663
67− int (*update_fte)(struct mlx5_core_dev *dev,
64+ int (*update_fte)(struct mlx5_flow_root_namespace *ns,
6865 struct mlx5_flow_table *ft,
69− unsigned int group_id,
66+ struct mlx5_flow_group *fg,
7067 int modify_mask,
7168 struct fs_fte *fte);
7269
73− int (*delete_fte)(struct mlx5_core_dev *dev,
70+ int (*delete_fte)(struct mlx5_flow_root_namespace *ns,
7471 struct mlx5_flow_table *ft,
7572 struct fs_fte *fte);
7673
77− int (*update_root_ft)(struct mlx5_core_dev *dev,
74+ int (*update_root_ft)(struct mlx5_flow_root_namespace *ns,
7875 struct mlx5_flow_table *ft,
7976 u32 underlay_qpn,
8077 bool disconnect);
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c+18−24
@@ -403,7 +403,7 @@ static void del_hw_flow_table(struct fs_node *node) · 402 unmodified lines
403403 trace_mlx5_fs_del_ft(ft);
404404
405405 if (node->active) {
406− err = root->cmds->destroy_flow_table(dev, ft);
406+ err = root->cmds->destroy_flow_table(root, ft);
407407 if (err)
408408 mlx5_core_warn(dev, "flow steering can't destroy ft\n");
409409 }
@@ -435,7 +435,7 @@ static void modify_fte(struct fs_fte *fte) · 25 unmodified lines
435435 dev = get_dev(&fte->node);
436436
437437 root = find_root(&ft->node);
438− err = root->cmds->update_fte(dev, ft, fg->id, fte->modify_mask, fte);
438+ err = root->cmds->update_fte(root, ft, fg, fte->modify_mask, fte);
439439 if (err)
440440 mlx5_core_warn(dev,
441441 "%s can't del rule fg id=%d fte_index=%d\n",
@@ -492,7 +492,7 @@ static void del_hw_fte(struct fs_node *node) · 50 unmodified lines
492492 dev = get_dev(&ft->node);
493493 root = find_root(&ft->node);
494494 if (node->active) {
495− err = root->cmds->delete_fte(dev, ft, fte);
495+ err = root->cmds->delete_fte(root, ft, fte);
496496 if (err)
497497 mlx5_core_warn(dev,
498498 "flow steering can't delete fte in index %d of flow group id %d\n",
@@ -532,7 +532,7 @@ static void del_hw_flow_group(struct fs_node *node) · 33 unmodified lines
532532 trace_mlx5_fs_del_fg(fg);
533533
534534 root = find_root(&ft->node);
535− if (fg->node.active && root->cmds->destroy_flow_group(dev, ft, fg->id))
535+ if (fg->node.active && root->cmds->destroy_flow_group(root, ft, fg))
536536 mlx5_core_warn(dev, "flow steering can't destroy fg %d of ft %d\n",
537537 fg->id, ft->id);
538538 }
@@ -783,7 +783,7 @@ static int connect_fts_in_prio(struct mlx5_core_dev *dev, · 244 unmodified lines
783783
784784 fs_for_each_ft(iter, prio) {
785785 i++;
786− err = root->cmds->modify_flow_table(dev, iter, ft);
786+ err = root->cmds->modify_flow_table(root, iter, ft);
787787 if (err) {
788788 mlx5_core_warn(dev, "Failed to modify flow table %d\n",
789789 iter->id);
@@ -831,11 +831,11 @@ static int update_root_ft_create(struct mlx5_flow_table *ft, struct fs_prio · 41 unmodified lines
831831 if (list_empty(&root->underlay_qpns)) {
832832 /* Don't set any QPN (zero) in case QPN list is empty */
833833 qpn = 0;
834− err = root->cmds->update_root_ft(root->dev, ft, qpn, false);
834+ err = root->cmds->update_root_ft(root, ft, qpn, false);
835835 } else {
836836 list_for_each_entry(uqp, &root->underlay_qpns, list) {
837837 qpn = uqp->qpn;
838− err = root->cmds->update_root_ft(root->dev, ft,
838+ err = root->cmds->update_root_ft(root, ft,
839839 qpn, false);
840840 if (err)
841841 break;
@@ -871,7 +871,7 @@ static int _mlx5_modify_rule_destination(struct mlx5_flow_rule *rule, · 29 unmodified lines
871871
872872 memcpy(&rule->dest_attr, dest, sizeof(*dest));
873873 root = find_root(&ft->node);
874− err = root->cmds->update_fte(get_dev(&ft->node), ft, fg->id,
874+ err = root->cmds->update_fte(root, ft, fg,
875875 modify_mask, fte);
876876 up_write_ref_node(&fte->node, false);
877877
@@ -1013,9 +1013,7 @@ static struct mlx5_flow_table *__mlx5_create_flow_table(struct mlx5_flow_namespa · 135 unmodified lines
10131013 tree_init_node(&ft->node, del_hw_flow_table, del_sw_flow_table);
10141014 log_table_sz = ft->max_fte ? ilog2(ft->max_fte) : 0;
10151015 next_ft = find_next_chained_ft(fs_prio);
1016− err = root->cmds->create_flow_table(root->dev, ft->vport, ft->op_mod,
1017− ft->type, ft->level, log_table_sz,
1018− next_ft, &ft->id, ft->flags);
1016+ err = root->cmds->create_flow_table(root, ft, log_table_sz, next_ft);
10191017 if (err)
10201018 goto free_ft;
10211019
@@ -1032,7 +1030,7 @@ static struct mlx5_flow_table *__mlx5_create_flow_table(struct mlx5_flow_namespa · 10 unmodified lines
10321030 trace_mlx5_fs_add_ft(ft);
10331031 return ft;
10341032 destroy_ft:
1035− root->cmds->destroy_flow_table(root->dev, ft);
1033+ root->cmds->destroy_flow_table(root, ft);
10361034 free_ft:
10371035 kfree(ft);
10381036 unlock_root:
@@ -1114,7 +1112,6 @@ struct mlx5_flow_group *mlx5_create_flow_group(struct mlx5_flow_table *ft, · 75 unmodified lines
11141112 start_flow_index);
11151113 int end_index = MLX5_GET(create_flow_group_in, fg_in,
11161114 end_flow_index);
1117− struct mlx5_core_dev *dev = get_dev(&ft->node);
11181115 struct mlx5_flow_group *fg;
11191116 int err;
11201117
@@ -1129,7 +1126,7 @@ struct mlx5_flow_group *mlx5_create_flow_group(struct mlx5_flow_table *ft, · 8 unmodified lines
11291126 if (IS_ERR(fg))
11301127 return fg;
11311128
1132− err = root->cmds->create_flow_group(dev, ft, fg_in, &fg->id);
1129+ err = root->cmds->create_flow_group(root, ft, fg_in, fg);
11331130 if (err) {
11341131 tree_put_node(&fg->node, false);
11351132 return ERR_PTR(err);
@@ -1269,11 +1266,9 @@ add_rule_fte(struct fs_fte *fte, · 133 unmodified lines
12691266 fs_get_obj(ft, fg->node.parent);
12701267 root = find_root(&fg->node);
12711268 if (!(fte->status & FS_FTE_STATUS_EXISTING))
1272− err = root->cmds->create_fte(get_dev(&ft->node),
1273− ft, fg, fte);
1269+ err = root->cmds->create_fte(root, ft, fg, fte);
12741270 else
1275− err = root->cmds->update_fte(get_dev(&ft->node), ft, fg->id,
1276− modify_mask, fte);
1271+ err = root->cmds->update_fte(root, ft, fg, modify_mask, fte);
12771272 if (err)
12781273 goto free_handle;
12791274
@@ -1339,7 +1334,6 @@ static int create_auto_flow_group(struct mlx5_flow_table *ft, · 59 unmodified lines
13391334 struct mlx5_flow_group *fg)
13401335 {
13411336 struct mlx5_flow_root_namespace *root = find_root(&ft->node);
1342− struct mlx5_core_dev *dev = get_dev(&ft->node);
13431337 int inlen = MLX5_ST_SZ_BYTES(create_flow_group_in);
13441338 void *match_criteria_addr;
13451339 u8 src_esw_owner_mask_on;
@@ -1369,7 +1363,7 @@ static int create_auto_flow_group(struct mlx5_flow_table *ft, · 23 unmodified lines
13691363 memcpy(match_criteria_addr, fg->mask.match_criteria,
13701364 sizeof(fg->mask.match_criteria));
13711365
1372− err = root->cmds->create_flow_group(dev, ft, in, &fg->id);
1366+ err = root->cmds->create_flow_group(root, ft, in, fg);
13731367 if (!err) {
13741368 fg->node.active = true;
13751369 trace_mlx5_fs_add_fg(fg);
@@ -1941,12 +1935,12 @@ static int update_root_ft_destroy(struct mlx5_flow_table *ft) · 565 unmodified lines
19411935 if (list_empty(&root->underlay_qpns)) {
19421936 /* Don't set any QPN (zero) in case QPN list is empty */
19431937 qpn = 0;
1944− err = root->cmds->update_root_ft(root->dev, new_root_ft,
1938+ err = root->cmds->update_root_ft(root, new_root_ft,
19451939 qpn, false);
19461940 } else {
19471941 list_for_each_entry(uqp, &root->underlay_qpns, list) {
19481942 qpn = uqp->qpn;
1949− err = root->cmds->update_root_ft(root->dev,
1943+ err = root->cmds->update_root_ft(root,
19501944 new_root_ft, qpn,
19511945 false);
19521946 if (err)
@@ -2762,7 +2756,7 @@ int mlx5_fs_add_rx_underlay_qpn(struct mlx5_core_dev *dev, u32 underlay_qpn) · 809 unmodified lines
27622756 goto update_ft_fail;
27632757 }
27642758
2765− err = root->cmds->update_root_ft(dev, root->root_ft, underlay_qpn,
2759+ err = root->cmds->update_root_ft(root, root->root_ft, underlay_qpn,
27662760 false);
27672761 if (err) {
27682762 mlx5_core_warn(dev, "Failed adding underlay QPN (%u) to root FT err(%d)\n",
@@ -2806,7 +2800,7 @@ int mlx5_fs_remove_rx_underlay_qpn(struct mlx5_core_dev *dev, u32 underlay_qpn) · 37 unmodified lines
28062800 goto out;
28072801 }
28082802
2809− err = root->cmds->update_root_ft(dev, root->root_ft, underlay_qpn,
2803+ err = root->cmds->update_root_ft(root, root->root_ft, underlay_qpn,
28102804 true);
28112805 if (err)
28122806 mlx5_core_warn(dev, "Failed removing underlay QPN (%u) from root FT err(%d)\n",

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t