You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
4.2 KiB
95 lines
4.2 KiB
From e6aa12d9737f02f82238814ede2bd3e3865ae78b Mon Sep 17 00:00:00 2001
|
|
From: Alaa Hleihel <ahleihel@redhat.com>
|
|
Date: Tue, 19 May 2020 07:49:16 -0400
|
|
Subject: [PATCH 254/312] [netdrv] net/mlx5: E-Switch: Fix using fwd and modify
|
|
when firmware doesn't support it
|
|
|
|
Message-id: <20200519074934.6303-46-ahleihel@redhat.com>
|
|
Patchwork-id: 310543
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.3 BZ 1663246 45/63] net/mlx5: E-Switch: Fix using fwd and modify when firmware doesn't support it
|
|
Bugzilla: 1663246
|
|
RH-Acked-by: Marcelo Leitner <mleitner@redhat.com>
|
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
|
RH-Acked-by: John Linville <linville@redhat.com>
|
|
RH-Acked-by: Ivan Vecera <ivecera@redhat.com>
|
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
|
RH-Acked-by: Kamal Heib <kheib@redhat.com>
|
|
|
|
Bugzilla: http://bugzilla.redhat.com/1663246
|
|
Upstream: v5.7-rc1
|
|
|
|
commit 0b3a8b6b53406f2d890cda369aa9d61e30bc4162
|
|
Author: Paul Blakey <paulb@mellanox.com>
|
|
Date: Sun Mar 1 16:12:00 2020 +0200
|
|
|
|
net/mlx5: E-Switch: Fix using fwd and modify when firmware doesn't support it
|
|
|
|
Currently, if firmware doesn't support fwd and modify, driver fails
|
|
initializing eswitch chains while entering switchdev mode.
|
|
|
|
Instead, on such cases, disable the chains and prio feature (as we can't
|
|
restore the chain on miss) and the usage of fwd and modify.
|
|
|
|
Fixes: 8f1e0b97cc70 ("net/mlx5: E-Switch, Mark miss packets with new chain id mapping")
|
|
Signed-off-by: Paul Blakey <paulb@mellanox.com>
|
|
Reviewed-by: Oz Shlomo <ozsh@mellanox.com>
|
|
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
|
|
|
|
Signed-off-by: Alaa Hleihel <ahleihel@redhat.com>
|
|
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
|
|
---
|
|
.../ethernet/mellanox/mlx5/core/eswitch_offloads_chains.c | 15 +++++++++++++--
|
|
1 file changed, 13 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_chains.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_chains.c
|
|
index 0f9c9aae11bf..a7d88ab35bbf 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_chains.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_chains.c
|
|
@@ -23,6 +23,8 @@
|
|
#define tc_end_fdb(esw) (esw_chains_priv(esw)->tc_end_fdb)
|
|
#define fdb_ignore_flow_level_supported(esw) \
|
|
(MLX5_CAP_ESW_FLOWTABLE_FDB((esw)->dev, ignore_flow_level))
|
|
+#define fdb_modify_header_fwd_to_table_supported(esw) \
|
|
+ (MLX5_CAP_ESW_FLOWTABLE((esw)->dev, fdb_modify_header_fwd_to_table))
|
|
|
|
/* Firmware currently has 4 pool of 4 sizes that it supports (ESW_POOLS),
|
|
* and a virtual memory region of 16M (ESW_SIZE), this region is duplicated
|
|
@@ -106,7 +108,8 @@ bool mlx5_esw_chains_prios_supported(struct mlx5_eswitch *esw)
|
|
|
|
bool mlx5_esw_chains_backwards_supported(struct mlx5_eswitch *esw)
|
|
{
|
|
- return fdb_ignore_flow_level_supported(esw);
|
|
+ return mlx5_esw_chains_prios_supported(esw) &&
|
|
+ fdb_ignore_flow_level_supported(esw);
|
|
}
|
|
|
|
u32 mlx5_esw_chains_get_chain_range(struct mlx5_eswitch *esw)
|
|
@@ -417,7 +420,8 @@ mlx5_esw_chains_add_miss_rule(struct fdb_chain *fdb_chain,
|
|
dest.type = MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE;
|
|
dest.ft = next_fdb;
|
|
|
|
- if (fdb_chain->chain != mlx5_esw_chains_get_ft_chain(esw)) {
|
|
+ if (fdb_chain->chain != mlx5_esw_chains_get_ft_chain(esw) &&
|
|
+ fdb_modify_header_fwd_to_table_supported(esw)) {
|
|
act.modify_hdr = fdb_chain->miss_modify_hdr;
|
|
act.action |= MLX5_FLOW_CONTEXT_ACTION_MOD_HDR;
|
|
}
|
|
@@ -777,6 +781,13 @@ mlx5_esw_chains_init(struct mlx5_eswitch *esw)
|
|
esw->offloads.encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE) {
|
|
esw->fdb_table.flags &= ~ESW_FDB_CHAINS_AND_PRIOS_SUPPORTED;
|
|
esw_warn(dev, "Tc chains and priorities offload aren't supported, update firmware if needed\n");
|
|
+ } else if (!fdb_modify_header_fwd_to_table_supported(esw)) {
|
|
+ /* Disabled when ttl workaround is needed, e.g
|
|
+ * when ESWITCH_IPV4_TTL_MODIFY_ENABLE = true in mlxconfig
|
|
+ */
|
|
+ esw_warn(dev,
|
|
+ "Tc chains and priorities offload aren't supported, check firmware version, or mlxconfig settings\n");
|
|
+ esw->fdb_table.flags &= ~ESW_FDB_CHAINS_AND_PRIOS_SUPPORTED;
|
|
} else {
|
|
esw->fdb_table.flags |= ESW_FDB_CHAINS_AND_PRIOS_SUPPORTED;
|
|
esw_info(dev, "Supported tc offload range - chains: %u, prios: %u\n",
|
|
--
|
|
2.13.6
|
|
|