@@ -561,7 +561,27 @@ mlx5e_rep_indr_offload(struct net_device *netdev,
561
561
struct tc_cls_flower_offload * flower ,
562
562
struct mlx5e_rep_indr_block_priv * indr_priv )
563
563
{
564
- return - EOPNOTSUPP ;
564
+ int err = 0 ;
565
+ struct mlx5e_priv * priv = netdev_priv (indr_priv -> rpriv -> netdev );
566
+
567
+ switch (flower -> command ) {
568
+ case TC_CLSFLOWER_REPLACE :
569
+ err = mlx5e_configure_flower (netdev , priv ,
570
+ flower , MLX5E_TC_EGRESS );
571
+ break ;
572
+ case TC_CLSFLOWER_DESTROY :
573
+ err = mlx5e_delete_flower (netdev , priv ,
574
+ flower , MLX5E_TC_EGRESS );
575
+ break ;
576
+ case TC_CLSFLOWER_STATS :
577
+ err = mlx5e_stats_flower (netdev , priv ,
578
+ flower , MLX5E_TC_EGRESS );
579
+ break ;
580
+ default :
581
+ err = - EOPNOTSUPP ;
582
+ }
583
+
584
+ return err ;
565
585
}
566
586
567
587
static int mlx5e_rep_indr_setup_block_cb (enum tc_setup_type type ,
@@ -1020,19 +1040,6 @@ mlx5e_rep_setup_tc_cls_flower(struct mlx5e_priv *priv,
1020
1040
}
1021
1041
}
1022
1042
1023
- static int mlx5e_rep_setup_tc_cb_egdev (enum tc_setup_type type , void * type_data ,
1024
- void * cb_priv )
1025
- {
1026
- struct mlx5e_priv * priv = cb_priv ;
1027
-
1028
- switch (type ) {
1029
- case TC_SETUP_CLSFLOWER :
1030
- return mlx5e_rep_setup_tc_cls_flower (priv , type_data , MLX5E_TC_EGRESS );
1031
- default :
1032
- return - EOPNOTSUPP ;
1033
- }
1034
- }
1035
-
1036
1043
static int mlx5e_rep_setup_tc_cb (enum tc_setup_type type , void * type_data ,
1037
1044
void * cb_priv )
1038
1045
{
@@ -1516,24 +1523,16 @@ mlx5e_vport_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
1516
1523
1517
1524
uplink_rpriv = mlx5_eswitch_get_uplink_priv (dev -> priv .eswitch , REP_ETH );
1518
1525
upriv = netdev_priv (uplink_rpriv -> netdev );
1519
- err = tc_setup_cb_egdev_register (netdev , mlx5e_rep_setup_tc_cb_egdev ,
1520
- upriv );
1521
- if (err )
1522
- goto err_neigh_cleanup ;
1523
1526
1524
1527
err = register_netdev (netdev );
1525
1528
if (err ) {
1526
1529
pr_warn ("Failed to register representor netdev for vport %d\n" ,
1527
1530
rep -> vport );
1528
- goto err_egdev_cleanup ;
1531
+ goto err_neigh_cleanup ;
1529
1532
}
1530
1533
1531
1534
return 0 ;
1532
1535
1533
- err_egdev_cleanup :
1534
- tc_setup_cb_egdev_unregister (netdev , mlx5e_rep_setup_tc_cb_egdev ,
1535
- upriv );
1536
-
1537
1536
err_neigh_cleanup :
1538
1537
mlx5e_rep_neigh_cleanup (rpriv );
1539
1538
@@ -1560,8 +1559,6 @@ mlx5e_vport_rep_unload(struct mlx5_eswitch_rep *rep)
1560
1559
uplink_rpriv = mlx5_eswitch_get_uplink_priv (priv -> mdev -> priv .eswitch ,
1561
1560
REP_ETH );
1562
1561
upriv = netdev_priv (uplink_rpriv -> netdev );
1563
- tc_setup_cb_egdev_unregister (netdev , mlx5e_rep_setup_tc_cb_egdev ,
1564
- upriv );
1565
1562
mlx5e_rep_neigh_cleanup (rpriv );
1566
1563
mlx5e_detach_netdev (priv );
1567
1564
mlx5e_destroy_netdev (priv );
0 commit comments