@@ -376,6 +376,48 @@ static void mlx5_devlink_set_params_init_values(struct devlink *devlink)
376376#endif
377377}
378378
379+ #define MLX5_TRAP_DROP (_id , _group_id ) \
380+ DEVLINK_TRAP_GENERIC(DROP, DROP, _id, \
381+ DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \
382+ DEVLINK_TRAP_METADATA_TYPE_F_IN_PORT)
383+
384+ static const struct devlink_trap mlx5_traps_arr [] = {
385+ MLX5_TRAP_DROP (INGRESS_VLAN_FILTER , L2_DROPS ),
386+ };
387+
388+ static const struct devlink_trap_group mlx5_trap_groups_arr [] = {
389+ DEVLINK_TRAP_GROUP_GENERIC (L2_DROPS , 0 ),
390+ };
391+
392+ static int mlx5_devlink_traps_register (struct devlink * devlink )
393+ {
394+ struct mlx5_core_dev * core_dev = devlink_priv (devlink );
395+ int err ;
396+
397+ err = devlink_trap_groups_register (devlink , mlx5_trap_groups_arr ,
398+ ARRAY_SIZE (mlx5_trap_groups_arr ));
399+ if (err )
400+ return err ;
401+
402+ err = devlink_traps_register (devlink , mlx5_traps_arr , ARRAY_SIZE (mlx5_traps_arr ),
403+ & core_dev -> priv );
404+ if (err )
405+ goto err_trap_group ;
406+ return 0 ;
407+
408+ err_trap_group :
409+ devlink_trap_groups_unregister (devlink , mlx5_trap_groups_arr ,
410+ ARRAY_SIZE (mlx5_trap_groups_arr ));
411+ return err ;
412+ }
413+
414+ static void mlx5_devlink_traps_unregister (struct devlink * devlink )
415+ {
416+ devlink_traps_unregister (devlink , mlx5_traps_arr , ARRAY_SIZE (mlx5_traps_arr ));
417+ devlink_trap_groups_unregister (devlink , mlx5_trap_groups_arr ,
418+ ARRAY_SIZE (mlx5_trap_groups_arr ));
419+ }
420+
379421int mlx5_devlink_register (struct devlink * devlink , struct device * dev )
380422{
381423 int err ;
@@ -390,15 +432,24 @@ int mlx5_devlink_register(struct devlink *devlink, struct device *dev)
390432 goto params_reg_err ;
391433 mlx5_devlink_set_params_init_values (devlink );
392434 devlink_params_publish (devlink );
435+
436+ err = mlx5_devlink_traps_register (devlink );
437+ if (err )
438+ goto traps_reg_err ;
439+
393440 return 0 ;
394441
442+ traps_reg_err :
443+ devlink_params_unregister (devlink , mlx5_devlink_params ,
444+ ARRAY_SIZE (mlx5_devlink_params ));
395445params_reg_err :
396446 devlink_unregister (devlink );
397447 return err ;
398448}
399449
400450void mlx5_devlink_unregister (struct devlink * devlink )
401451{
452+ mlx5_devlink_traps_unregister (devlink );
402453 devlink_params_unregister (devlink , mlx5_devlink_params ,
403454 ARRAY_SIZE (mlx5_devlink_params ));
404455 devlink_unregister (devlink );
0 commit comments