Commit 3a3da78d authored by Gal Pressman's avatar Gal Pressman Committed by Saeed Mahameed

net/mlx5e: Add flow steering debugfs directory

Add a debugfs directory for flow steering related information.
The directory is currently empty, and will hold the 'tc' subdirectory in
a downstream patch.
Signed-off-by: default avatarGal Pressman <gal@nvidia.com>
Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent 1a803472
...@@ -145,7 +145,8 @@ void mlx5e_destroy_flow_steering(struct mlx5e_flow_steering *fs, bool ntuple, ...@@ -145,7 +145,8 @@ void mlx5e_destroy_flow_steering(struct mlx5e_flow_steering *fs, bool ntuple,
struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile, struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile,
struct mlx5_core_dev *mdev, struct mlx5_core_dev *mdev,
bool state_destroy); bool state_destroy,
struct dentry *dfs_root);
void mlx5e_fs_cleanup(struct mlx5e_flow_steering *fs); void mlx5e_fs_cleanup(struct mlx5e_flow_steering *fs);
struct mlx5e_vlan_table *mlx5e_fs_get_vlan(struct mlx5e_flow_steering *fs); struct mlx5e_vlan_table *mlx5e_fs_get_vlan(struct mlx5e_flow_steering *fs);
void mlx5e_fs_set_tc(struct mlx5e_flow_steering *fs, struct mlx5e_tc_table *tc); void mlx5e_fs_set_tc(struct mlx5e_flow_steering *fs, struct mlx5e_tc_table *tc);
...@@ -189,6 +190,8 @@ int mlx5e_fs_vlan_rx_kill_vid(struct mlx5e_flow_steering *fs, ...@@ -189,6 +190,8 @@ int mlx5e_fs_vlan_rx_kill_vid(struct mlx5e_flow_steering *fs,
__be16 proto, u16 vid); __be16 proto, u16 vid);
void mlx5e_fs_init_l2_addr(struct mlx5e_flow_steering *fs, struct net_device *netdev); void mlx5e_fs_init_l2_addr(struct mlx5e_flow_steering *fs, struct net_device *netdev);
struct dentry *mlx5e_fs_get_debugfs_root(struct mlx5e_flow_steering *fs);
#define fs_err(fs, fmt, ...) \ #define fs_err(fs, fmt, ...) \
mlx5_core_err(mlx5e_fs_get_mdev(fs), fmt, ##__VA_ARGS__) mlx5_core_err(mlx5e_fs_get_mdev(fs), fmt, ##__VA_ARGS__)
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
* SOFTWARE. * SOFTWARE.
*/ */
#include <linux/debugfs.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/ip.h> #include <linux/ip.h>
#include <linux/ipv6.h> #include <linux/ipv6.h>
...@@ -67,6 +68,7 @@ struct mlx5e_flow_steering { ...@@ -67,6 +68,7 @@ struct mlx5e_flow_steering {
struct mlx5e_fs_udp *udp; struct mlx5e_fs_udp *udp;
struct mlx5e_fs_any *any; struct mlx5e_fs_any *any;
struct mlx5e_ptp_fs *ptp_fs; struct mlx5e_ptp_fs *ptp_fs;
struct dentry *dfs_root;
}; };
static int mlx5e_add_l2_flow_rule(struct mlx5e_flow_steering *fs, static int mlx5e_add_l2_flow_rule(struct mlx5e_flow_steering *fs,
...@@ -104,6 +106,11 @@ static inline int mlx5e_hash_l2(const u8 *addr) ...@@ -104,6 +106,11 @@ static inline int mlx5e_hash_l2(const u8 *addr)
return addr[5]; return addr[5];
} }
struct dentry *mlx5e_fs_get_debugfs_root(struct mlx5e_flow_steering *fs)
{
return fs->dfs_root;
}
static void mlx5e_add_l2_to_hash(struct hlist_head *hash, const u8 *addr) static void mlx5e_add_l2_to_hash(struct hlist_head *hash, const u8 *addr)
{ {
struct mlx5e_l2_hash_node *hn; struct mlx5e_l2_hash_node *hn;
...@@ -1429,9 +1436,19 @@ static int mlx5e_fs_ethtool_alloc(struct mlx5e_flow_steering *fs) ...@@ -1429,9 +1436,19 @@ static int mlx5e_fs_ethtool_alloc(struct mlx5e_flow_steering *fs)
static void mlx5e_fs_ethtool_free(struct mlx5e_flow_steering *fs) { } static void mlx5e_fs_ethtool_free(struct mlx5e_flow_steering *fs) { }
#endif #endif
static void mlx5e_fs_debugfs_init(struct mlx5e_flow_steering *fs,
struct dentry *dfs_root)
{
if (IS_ERR_OR_NULL(dfs_root))
return;
fs->dfs_root = debugfs_create_dir("fs", dfs_root);
}
struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile, struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile,
struct mlx5_core_dev *mdev, struct mlx5_core_dev *mdev,
bool state_destroy) bool state_destroy,
struct dentry *dfs_root)
{ {
struct mlx5e_flow_steering *fs; struct mlx5e_flow_steering *fs;
int err; int err;
...@@ -1458,6 +1475,8 @@ struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile, ...@@ -1458,6 +1475,8 @@ struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile,
if (err) if (err)
goto err_free_tc; goto err_free_tc;
mlx5e_fs_debugfs_init(fs, dfs_root);
return fs; return fs;
err_free_tc: err_free_tc:
mlx5e_fs_tc_free(fs); mlx5e_fs_tc_free(fs);
...@@ -1471,6 +1490,7 @@ struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile, ...@@ -1471,6 +1490,7 @@ struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile,
void mlx5e_fs_cleanup(struct mlx5e_flow_steering *fs) void mlx5e_fs_cleanup(struct mlx5e_flow_steering *fs)
{ {
debugfs_remove_recursive(fs->dfs_root);
mlx5e_fs_ethtool_free(fs); mlx5e_fs_ethtool_free(fs);
mlx5e_fs_tc_free(fs); mlx5e_fs_tc_free(fs);
mlx5e_fs_vlan_free(fs); mlx5e_fs_vlan_free(fs);
......
...@@ -5231,7 +5231,8 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev, ...@@ -5231,7 +5231,8 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,
mlx5e_timestamp_init(priv); mlx5e_timestamp_init(priv);
fs = mlx5e_fs_init(priv->profile, mdev, fs = mlx5e_fs_init(priv->profile, mdev,
!test_bit(MLX5E_STATE_DESTROYING, &priv->state)); !test_bit(MLX5E_STATE_DESTROYING, &priv->state),
priv->dfs_root);
if (!fs) { if (!fs) {
err = -ENOMEM; err = -ENOMEM;
mlx5_core_err(mdev, "FS initialization failed, %d\n", err); mlx5_core_err(mdev, "FS initialization failed, %d\n", err);
......
...@@ -788,8 +788,10 @@ static int mlx5e_init_rep(struct mlx5_core_dev *mdev, ...@@ -788,8 +788,10 @@ static int mlx5e_init_rep(struct mlx5_core_dev *mdev,
{ {
struct mlx5e_priv *priv = netdev_priv(netdev); struct mlx5e_priv *priv = netdev_priv(netdev);
priv->fs = mlx5e_fs_init(priv->profile, mdev, priv->fs =
!test_bit(MLX5E_STATE_DESTROYING, &priv->state)); mlx5e_fs_init(priv->profile, mdev,
!test_bit(MLX5E_STATE_DESTROYING, &priv->state),
priv->dfs_root);
if (!priv->fs) { if (!priv->fs) {
netdev_err(priv->netdev, "FS allocation failed\n"); netdev_err(priv->netdev, "FS allocation failed\n");
return -ENOMEM; return -ENOMEM;
...@@ -807,7 +809,8 @@ static int mlx5e_init_ul_rep(struct mlx5_core_dev *mdev, ...@@ -807,7 +809,8 @@ static int mlx5e_init_ul_rep(struct mlx5_core_dev *mdev,
struct mlx5e_priv *priv = netdev_priv(netdev); struct mlx5e_priv *priv = netdev_priv(netdev);
priv->fs = mlx5e_fs_init(priv->profile, mdev, priv->fs = mlx5e_fs_init(priv->profile, mdev,
!test_bit(MLX5E_STATE_DESTROYING, &priv->state)); !test_bit(MLX5E_STATE_DESTROYING, &priv->state),
priv->dfs_root);
if (!priv->fs) { if (!priv->fs) {
netdev_err(priv->netdev, "FS allocation failed\n"); netdev_err(priv->netdev, "FS allocation failed\n");
return -ENOMEM; return -ENOMEM;
......
...@@ -374,7 +374,8 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv) ...@@ -374,7 +374,8 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
int err; int err;
priv->fs = mlx5e_fs_init(priv->profile, mdev, priv->fs = mlx5e_fs_init(priv->profile, mdev,
!test_bit(MLX5E_STATE_DESTROYING, &priv->state)); !test_bit(MLX5E_STATE_DESTROYING, &priv->state),
priv->dfs_root);
if (!priv->fs) { if (!priv->fs) {
netdev_err(priv->netdev, "FS allocation failed\n"); netdev_err(priv->netdev, "FS allocation failed\n");
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment