Skip to content

Commit 823f7a5

Browse files
committed
Merge branch 'mlx5-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux
Saeed Mahameed says: ==================== mlx5-next branch 2021-12-15 Hi Dave, Jakub, Jason This pulls mlx5-next branch into net-next and rdma branches. All patches already reviewed on both rdma and netdev mailing lists. Please pull and let me know if there's any problem. 1) Add multiple FDB steering priorities [1] 2) Introduce HW bits needed to configure MAC list size of VF/SF. Required for ("net/mlx5: Memory optimizations") upcoming series [2]. [1] https://lore.kernel.org/netdev/[email protected]/ [2] https://lore.kernel.org/lkml/[email protected]/ ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents bd1d97d + 685b1af commit 823f7a5

File tree

6 files changed

+76
-28
lines changed

6 files changed

+76
-28
lines changed

drivers/infiniband/hw/mlx5/fs.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,7 +1508,7 @@ _get_flow_table(struct mlx5_ib_dev *dev,
15081508
!esw_encap)
15091509
flags |= MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT;
15101510
break;
1511-
case MLX5_FLOW_NAMESPACE_FDB:
1511+
case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
15121512
max_table_size = BIT(
15131513
MLX5_CAP_ESW_FLOWTABLE_FDB(dev->mdev, log_max_ft_size));
15141514
if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev->mdev, decap) && esw_encap)
@@ -1517,7 +1517,7 @@ _get_flow_table(struct mlx5_ib_dev *dev,
15171517
reformat_l3_tunnel_to_l2) &&
15181518
esw_encap)
15191519
flags |= MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT;
1520-
priority = FDB_BYPASS_PATH;
1520+
priority = fs_matcher->priority;
15211521
break;
15221522
case MLX5_FLOW_NAMESPACE_RDMA_RX:
15231523
max_table_size = BIT(
@@ -1546,8 +1546,8 @@ _get_flow_table(struct mlx5_ib_dev *dev,
15461546
case MLX5_FLOW_NAMESPACE_EGRESS:
15471547
prio = &dev->flow_db->egress_prios[priority];
15481548
break;
1549-
case MLX5_FLOW_NAMESPACE_FDB:
1550-
prio = &dev->flow_db->fdb;
1549+
case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
1550+
prio = &dev->flow_db->fdb[priority];
15511551
break;
15521552
case MLX5_FLOW_NAMESPACE_RDMA_RX:
15531553
prio = &dev->flow_db->rdma_rx[priority];
@@ -1937,7 +1937,7 @@ mlx5_ib_ft_type_to_namespace(enum mlx5_ib_uapi_flow_table_type table_type,
19371937
*namespace = MLX5_FLOW_NAMESPACE_EGRESS;
19381938
break;
19391939
case MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB:
1940-
*namespace = MLX5_FLOW_NAMESPACE_FDB;
1940+
*namespace = MLX5_FLOW_NAMESPACE_FDB_BYPASS;
19411941
break;
19421942
case MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX:
19431943
*namespace = MLX5_FLOW_NAMESPACE_RDMA_RX;
@@ -2029,8 +2029,8 @@ static int get_dests(struct uverbs_attr_bundle *attrs,
20292029
}
20302030

20312031
/* Allow only DEVX object, drop as dest for FDB */
2032-
if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_FDB && !(dest_devx ||
2033-
(*flags & MLX5_IB_ATTR_CREATE_FLOW_FLAGS_DROP)))
2032+
if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_FDB_BYPASS &&
2033+
!(dest_devx || (*flags & MLX5_IB_ATTR_CREATE_FLOW_FLAGS_DROP)))
20342034
return -EINVAL;
20352035

20362036
/* Allow only DEVX object or QP as dest when inserting to RDMA_RX */
@@ -2050,7 +2050,7 @@ static int get_dests(struct uverbs_attr_bundle *attrs,
20502050
if (!is_flow_dest(devx_obj, dest_id, dest_type))
20512051
return -EINVAL;
20522052
/* Allow only flow table as dest when inserting to FDB or RDMA_RX */
2053-
if ((fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_FDB ||
2053+
if ((fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_FDB_BYPASS ||
20542054
fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_RDMA_RX) &&
20552055
*dest_type != MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE)
20562056
return -EINVAL;
@@ -2320,7 +2320,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_MATCHER_CREATE)(
23202320
if (err)
23212321
goto end;
23222322

2323-
if (obj->ns_type == MLX5_FLOW_NAMESPACE_FDB &&
2323+
if (obj->ns_type == MLX5_FLOW_NAMESPACE_FDB_BYPASS &&
23242324
mlx5_eswitch_mode(dev->mdev) != MLX5_ESWITCH_OFFLOADS) {
23252325
err = -EINVAL;
23262326
goto end;

drivers/infiniband/hw/mlx5/mlx5_ib.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ enum {
232232
#define MLX5_IB_NUM_FLOW_FT (MLX5_IB_FLOW_LEFTOVERS_PRIO + 1)
233233
#define MLX5_IB_NUM_SNIFFER_FTS 2
234234
#define MLX5_IB_NUM_EGRESS_FTS 1
235+
#define MLX5_IB_NUM_FDB_FTS MLX5_BY_PASS_NUM_REGULAR_PRIOS
235236
struct mlx5_ib_flow_prio {
236237
struct mlx5_flow_table *flow_table;
237238
unsigned int refcount;
@@ -276,7 +277,7 @@ struct mlx5_ib_flow_db {
276277
struct mlx5_ib_flow_prio egress_prios[MLX5_IB_NUM_FLOW_FT];
277278
struct mlx5_ib_flow_prio sniffer[MLX5_IB_NUM_SNIFFER_FTS];
278279
struct mlx5_ib_flow_prio egress[MLX5_IB_NUM_EGRESS_FTS];
279-
struct mlx5_ib_flow_prio fdb;
280+
struct mlx5_ib_flow_prio fdb[MLX5_IB_NUM_FDB_FTS];
280281
struct mlx5_ib_flow_prio rdma_rx[MLX5_IB_NUM_FLOW_FT];
281282
struct mlx5_ib_flow_prio rdma_tx[MLX5_IB_NUM_FLOW_FT];
282283
struct mlx5_ib_flow_prio opfcs[MLX5_IB_OPCOUNTER_MAX];

drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,8 @@ static int mlx5_cmd_packet_reformat_alloc(struct mlx5_flow_root_namespace *ns,
788788
int err;
789789
u32 *in;
790790

791-
if (namespace == MLX5_FLOW_NAMESPACE_FDB)
791+
if (namespace == MLX5_FLOW_NAMESPACE_FDB ||
792+
namespace == MLX5_FLOW_NAMESPACE_FDB_BYPASS)
792793
max_encap_size = MLX5_CAP_ESW(dev, max_encap_header_size);
793794
else
794795
max_encap_size = MLX5_CAP_FLOWTABLE(dev, max_encap_header_size);
@@ -860,6 +861,7 @@ static int mlx5_cmd_modify_header_alloc(struct mlx5_flow_root_namespace *ns,
860861

861862
switch (namespace) {
862863
case MLX5_FLOW_NAMESPACE_FDB:
864+
case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
863865
max_actions = MLX5_CAP_ESW_FLOWTABLE_FDB(dev, max_modify_header_actions);
864866
table_type = FS_FT_FDB;
865867
break;

drivers/net/ethernet/mellanox/mlx5/core/fs_core.c

Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2206,6 +2206,22 @@ struct mlx5_flow_namespace *mlx5_get_fdb_sub_ns(struct mlx5_core_dev *dev,
22062206
}
22072207
EXPORT_SYMBOL(mlx5_get_fdb_sub_ns);
22082208

2209+
static bool is_nic_rx_ns(enum mlx5_flow_namespace_type type)
2210+
{
2211+
switch (type) {
2212+
case MLX5_FLOW_NAMESPACE_BYPASS:
2213+
case MLX5_FLOW_NAMESPACE_LAG:
2214+
case MLX5_FLOW_NAMESPACE_OFFLOADS:
2215+
case MLX5_FLOW_NAMESPACE_ETHTOOL:
2216+
case MLX5_FLOW_NAMESPACE_KERNEL:
2217+
case MLX5_FLOW_NAMESPACE_LEFTOVERS:
2218+
case MLX5_FLOW_NAMESPACE_ANCHOR:
2219+
return true;
2220+
default:
2221+
return false;
2222+
}
2223+
}
2224+
22092225
struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
22102226
enum mlx5_flow_namespace_type type)
22112227
{
@@ -2235,31 +2251,39 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
22352251
if (steering->sniffer_tx_root_ns)
22362252
return &steering->sniffer_tx_root_ns->ns;
22372253
return NULL;
2238-
default:
2254+
case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
2255+
root_ns = steering->fdb_root_ns;
2256+
prio = FDB_BYPASS_PATH;
22392257
break;
2240-
}
2241-
2242-
if (type == MLX5_FLOW_NAMESPACE_EGRESS ||
2243-
type == MLX5_FLOW_NAMESPACE_EGRESS_KERNEL) {
2258+
case MLX5_FLOW_NAMESPACE_EGRESS:
2259+
case MLX5_FLOW_NAMESPACE_EGRESS_KERNEL:
22442260
root_ns = steering->egress_root_ns;
22452261
prio = type - MLX5_FLOW_NAMESPACE_EGRESS;
2246-
} else if (type == MLX5_FLOW_NAMESPACE_RDMA_RX) {
2262+
break;
2263+
case MLX5_FLOW_NAMESPACE_RDMA_RX:
22472264
root_ns = steering->rdma_rx_root_ns;
22482265
prio = RDMA_RX_BYPASS_PRIO;
2249-
} else if (type == MLX5_FLOW_NAMESPACE_RDMA_RX_KERNEL) {
2266+
break;
2267+
case MLX5_FLOW_NAMESPACE_RDMA_RX_KERNEL:
22502268
root_ns = steering->rdma_rx_root_ns;
22512269
prio = RDMA_RX_KERNEL_PRIO;
2252-
} else if (type == MLX5_FLOW_NAMESPACE_RDMA_TX) {
2270+
break;
2271+
case MLX5_FLOW_NAMESPACE_RDMA_TX:
22532272
root_ns = steering->rdma_tx_root_ns;
2254-
} else if (type == MLX5_FLOW_NAMESPACE_RDMA_RX_COUNTERS) {
2273+
break;
2274+
case MLX5_FLOW_NAMESPACE_RDMA_RX_COUNTERS:
22552275
root_ns = steering->rdma_rx_root_ns;
22562276
prio = RDMA_RX_COUNTERS_PRIO;
2257-
} else if (type == MLX5_FLOW_NAMESPACE_RDMA_TX_COUNTERS) {
2277+
break;
2278+
case MLX5_FLOW_NAMESPACE_RDMA_TX_COUNTERS:
22582279
root_ns = steering->rdma_tx_root_ns;
22592280
prio = RDMA_TX_COUNTERS_PRIO;
2260-
} else { /* Must be NIC RX */
2281+
break;
2282+
default: /* Must be NIC RX */
2283+
WARN_ON(!is_nic_rx_ns(type));
22612284
root_ns = steering->root_ns;
22622285
prio = type;
2286+
break;
22632287
}
22642288

22652289
if (!root_ns)
@@ -2822,6 +2846,28 @@ static int create_fdb_fast_path(struct mlx5_flow_steering *steering)
28222846
return 0;
28232847
}
28242848

2849+
static int create_fdb_bypass(struct mlx5_flow_steering *steering)
2850+
{
2851+
struct mlx5_flow_namespace *ns;
2852+
struct fs_prio *prio;
2853+
int i;
2854+
2855+
prio = fs_create_prio(&steering->fdb_root_ns->ns, FDB_BYPASS_PATH, 0);
2856+
if (IS_ERR(prio))
2857+
return PTR_ERR(prio);
2858+
2859+
ns = fs_create_namespace(prio, MLX5_FLOW_TABLE_MISS_ACTION_DEF);
2860+
if (IS_ERR(ns))
2861+
return PTR_ERR(ns);
2862+
2863+
for (i = 0; i < MLX5_BY_PASS_NUM_REGULAR_PRIOS; i++) {
2864+
prio = fs_create_prio(ns, i, 1);
2865+
if (IS_ERR(prio))
2866+
return PTR_ERR(prio);
2867+
}
2868+
return 0;
2869+
}
2870+
28252871
static int init_fdb_root_ns(struct mlx5_flow_steering *steering)
28262872
{
28272873
struct fs_prio *maj_prio;
@@ -2831,12 +2877,10 @@ static int init_fdb_root_ns(struct mlx5_flow_steering *steering)
28312877
if (!steering->fdb_root_ns)
28322878
return -ENOMEM;
28332879

2834-
maj_prio = fs_create_prio(&steering->fdb_root_ns->ns, FDB_BYPASS_PATH,
2835-
1);
2836-
if (IS_ERR(maj_prio)) {
2837-
err = PTR_ERR(maj_prio);
2880+
err = create_fdb_bypass(steering);
2881+
if (err)
28382882
goto out_err;
2839-
}
2883+
28402884
err = create_fdb_fast_path(steering);
28412885
if (err)
28422886
goto out_err;

include/linux/mlx5/fs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ enum mlx5_flow_namespace_type {
7373
MLX5_FLOW_NAMESPACE_KERNEL,
7474
MLX5_FLOW_NAMESPACE_LEFTOVERS,
7575
MLX5_FLOW_NAMESPACE_ANCHOR,
76+
MLX5_FLOW_NAMESPACE_FDB_BYPASS,
7677
MLX5_FLOW_NAMESPACE_FDB,
7778
MLX5_FLOW_NAMESPACE_ESW_EGRESS,
7879
MLX5_FLOW_NAMESPACE_ESW_INGRESS,

include/linux/mlx5/mlx5_ifc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1621,7 +1621,7 @@ struct mlx5_ifc_cmd_hca_cap_bits {
16211621

16221622
u8 ext_stride_num_range[0x1];
16231623
u8 roce_rw_supported[0x1];
1624-
u8 reserved_at_3a2[0x1];
1624+
u8 log_max_current_uc_list_wr_supported[0x1];
16251625
u8 log_max_stride_sz_rq[0x5];
16261626
u8 reserved_at_3a8[0x3];
16271627
u8 log_min_stride_sz_rq[0x5];

0 commit comments

Comments
 (0)