Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 717503b9 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

net: sched: convert cls_flower->egress_dev users to tc_setup_cb_egdev infra



The only user of cls_flower->egress_dev is mlx5. So do the conversion
there alongside with the code originating the call in cls_flower
function fl_hw_replace_filter to the newly introduced egress device
callback infrastucture.

Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b3f55bdd
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1081,6 +1081,9 @@ int mlx5e_ethtool_get_ts_info(struct mlx5e_priv *priv,
int mlx5e_ethtool_flash_device(struct mlx5e_priv *priv,
			       struct ethtool_flash *flash);

int mlx5e_setup_tc(struct net_device *dev, enum tc_setup_type type,
		   void *type_data);

/* mlx5e generic netdev management API */
struct net_device*
mlx5e_create_netdev(struct mlx5_core_dev *mdev, const struct mlx5e_profile *profile,
+2 −2
Original line number Diff line number Diff line
@@ -3108,7 +3108,7 @@ static int mlx5e_setup_tc_cls_flower(struct net_device *dev,
}
#endif

static int mlx5e_setup_tc(struct net_device *dev, enum tc_setup_type type,
int mlx5e_setup_tc(struct net_device *dev, enum tc_setup_type type,
		   void *type_data)
{
	switch (type) {
+21 −10
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
#include <linux/mlx5/fs.h>
#include <net/switchdev.h>
#include <net/pkt_cls.h>
#include <net/act_api.h>
#include <net/netevent.h>
#include <net/arp.h>

@@ -667,14 +668,6 @@ mlx5e_rep_setup_tc_cls_flower(struct net_device *dev,
	    cls_flower->common.chain_index)
		return -EOPNOTSUPP;

	if (cls_flower->egress_dev) {
		struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;

		dev = mlx5_eswitch_get_uplink_netdev(esw);
		return dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER,
						     cls_flower);
	}

	switch (cls_flower->command) {
	case TC_CLSFLOWER_REPLACE:
		return mlx5e_configure_flower(priv, cls_flower);
@@ -698,6 +691,14 @@ static int mlx5e_rep_setup_tc(struct net_device *dev, enum tc_setup_type type,
	}
}

static int mlx5e_rep_setup_tc_cb(enum tc_setup_type type, void *type_data,
				 void *cb_priv)
{
	struct net_device *dev = cb_priv;

	return mlx5e_setup_tc(dev, type, type_data);
}

bool mlx5e_is_uplink_rep(struct mlx5e_priv *priv)
{
	struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
@@ -1017,15 +1018,24 @@ mlx5e_vport_rep_load(struct mlx5_eswitch *esw, struct mlx5_eswitch_rep *rep)
		goto err_detach_netdev;
	}

	err = tc_setup_cb_egdev_register(netdev, mlx5e_rep_setup_tc_cb,
					 mlx5_eswitch_get_uplink_netdev(esw));
	if (err)
		goto err_neigh_cleanup;

	err = register_netdev(netdev);
	if (err) {
		pr_warn("Failed to register representor netdev for vport %d\n",
			rep->vport);
		goto err_neigh_cleanup;
		goto err_egdev_cleanup;
	}

	return 0;

err_egdev_cleanup:
	tc_setup_cb_egdev_unregister(netdev, mlx5e_rep_setup_tc_cb,
				     mlx5_eswitch_get_uplink_netdev(esw));

err_neigh_cleanup:
	mlx5e_rep_neigh_cleanup(rpriv);

@@ -1047,7 +1057,8 @@ mlx5e_vport_rep_unload(struct mlx5_eswitch *esw, struct mlx5_eswitch_rep *rep)
	void *ppriv = priv->ppriv;

	unregister_netdev(rep->netdev);

	tc_setup_cb_egdev_unregister(netdev, mlx5e_rep_setup_tc_cb,
				     mlx5_eswitch_get_uplink_netdev(esw));
	mlx5e_rep_neigh_cleanup(rpriv);
	mlx5e_detach_netdev(priv);
	mlx5e_destroy_netdev(priv);
+3 −2
Original line number Diff line number Diff line
@@ -206,8 +206,6 @@ int tcf_exts_dump(struct sk_buff *skb, struct tcf_exts *exts);
int tcf_exts_dump_stats(struct sk_buff *skb, struct tcf_exts *exts);
int tcf_exts_get_dev(struct net_device *dev, struct tcf_exts *exts,
		     struct net_device **hw_dev);
int tcf_exts_egdev_cb_call(struct tcf_exts *exts, enum tc_setup_type type,
			   void *type_data, bool err_stop);

/**
 * struct tcf_pkt_info - packet information
@@ -407,6 +405,9 @@ tcf_match_indev(struct sk_buff *skb, int ifindex)
}
#endif /* CONFIG_NET_CLS_IND */

int tc_setup_cb_call(struct tcf_exts *exts, enum tc_setup_type type,
		     void *type_data, bool err_stop);

struct tc_cls_common_offload {
	u32 chain_index;
	__be16 protocol;
+10 −3
Original line number Diff line number Diff line
@@ -1026,7 +1026,8 @@ int tcf_exts_get_dev(struct net_device *dev, struct tcf_exts *exts,
}
EXPORT_SYMBOL(tcf_exts_get_dev);

int tcf_exts_egdev_cb_call(struct tcf_exts *exts, enum tc_setup_type type,
static int tc_exts_setup_cb_egdev_call(struct tcf_exts *exts,
				       enum tc_setup_type type,
				       void *type_data, bool err_stop)
{
	int ok_count = 0;
@@ -1054,7 +1055,13 @@ int tcf_exts_egdev_cb_call(struct tcf_exts *exts, enum tc_setup_type type,
#endif
	return ok_count;
}
EXPORT_SYMBOL(tcf_exts_egdev_cb_call);

int tc_setup_cb_call(struct tcf_exts *exts, enum tc_setup_type type,
		     void *type_data, bool err_stop)
{
	return tc_exts_setup_cb_egdev_call(exts, type, type_data, err_stop);
}
EXPORT_SYMBOL(tc_setup_cb_call);

static int __init tc_filter_init(void)
{
Loading