diff mbox series

[net-next,v2,3/7] drivers: net: netdevsim: add devlink trap_drop_counter_get implementation

Message ID 20210614130118.20395-4-oleksandr.mazur@plvision.eu (mailing list archive)
State Accepted
Commit a7b3527a43feb017f48c699d859aef787c8af031
Delegated to: Netdev Maintainers
Headers show
Series Marvell Prestera driver implementation of devlink functionality. | expand

Checks

Context Check Description
netdev/cover_letter success Link
netdev/fixes_present success Link
netdev/patch_count success Link
netdev/tree_selection success Clearly marked for net-next
netdev/subject_prefix success Link
netdev/cc_maintainers success CCed 3 of 3 maintainers
netdev/source_inline success Was 0 now: 0
netdev/verify_signedoff success Link
netdev/module_param success Was 0 now: 0
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/verify_fixes success Link
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 53 lines checked
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/header_inline success Link

Commit Message

Oleksandr Mazur June 14, 2021, 1:01 p.m. UTC
Whenever query statistics is issued for trap with DROP action,
devlink subsystem would also fill-in statistics 'dropped' field.
In case if device driver did't register callback for hard drop
statistics querying, 'dropped' field will be omitted and not filled.
Add trap_drop_counter_get callback implementation to the netdevsim.
Add new test cases for netdevsim, to test both the callback
functionality, as well as drop statistics alteration check.

Signed-off-by: Oleksandr Mazur <oleksandr.mazur@plvision.eu>
---
 drivers/net/netdevsim/dev.c       | 22 ++++++++++++++++++++++
 drivers/net/netdevsim/netdevsim.h |  1 +
 2 files changed, 23 insertions(+)

Comments

Ido Schimmel June 16, 2021, 3:37 p.m. UTC | #1
On Mon, Jun 14, 2021 at 04:01:14PM +0300, Oleksandr Mazur wrote:
> +	debugfs_create_bool("fail_trap_counter_get", 0600,

The test is doing:

echo "y"> $DEBUGFS_DIR/fail_trap_drop_counter_get

And fails with:

./devlink_trap.sh: line 169: /sys/kernel/debug/netdevsim/netdevsim1337//fail_trap_drop_counter_get: Permission denied

Please fix netdevsim to instantiate the correct file and avoid
submitting new tests without running them first.


> +			    nsim_dev->ddir,
> +			    &nsim_dev->fail_trap_counter_get);
>  	nsim_udp_tunnels_debugfs_create(nsim_dev);
>  	return 0;
Oleksandr Mazur June 16, 2021, 4:07 p.m. UTC | #2
Subject: Re: [PATCH net-next v2 3/7] drivers: net: netdevsim: add devlink trap_drop_counter_get implementation 
 
> On Mon, Jun 14, 2021 at 04:01:14PM +0300, Oleksandr Mazur wrote:
 > +     debugfs_create_bool("fail_trap_counter_get", 0600,

> The test is doing:

> echo "y"> $DEBUGFS_DIR/fail_trap_drop_counter_get

> And fails with:

> ./devlink_trap.sh: line 169: /sys/kernel/debug/netdevsim/netdevsim1337//fail_trap_drop_counter_get: Permission denied

> Please fix netdevsim to instantiate the correct file and avoid submitting new tests without running them first.

Sorry for that. I've actually run the test, but the problem is during patch preparation the naming convention for the counter itself changed (and i've missed the debugfs file name to get changed as well), and i've run the test before it was changed.
I will send the fix, thank you.
diff mbox series

Patch

diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 6f4bc70049d2..d85521989753 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -269,6 +269,9 @@  static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
 		err = PTR_ERR(nsim_dev->nodes_ddir);
 		goto err_out;
 	}
+	debugfs_create_bool("fail_trap_counter_get", 0600,
+			    nsim_dev->ddir,
+			    &nsim_dev->fail_trap_counter_get);
 	nsim_udp_tunnels_debugfs_create(nsim_dev);
 	return 0;
 
@@ -563,6 +566,7 @@  struct nsim_trap_data {
 	struct delayed_work trap_report_dw;
 	struct nsim_trap_item *trap_items_arr;
 	u64 *trap_policers_cnt_arr;
+	u64 trap_pkt_cnt;
 	struct nsim_dev *nsim_dev;
 	spinlock_t trap_lock;	/* Protects trap_items_arr */
 };
@@ -1203,6 +1207,23 @@  static int nsim_rate_node_parent_set(struct devlink_rate *child,
 	return 0;
 }
 
+static int
+nsim_dev_devlink_trap_hw_counter_get(struct devlink *devlink,
+				     const struct devlink_trap *trap,
+				     u64 *p_drops)
+{
+	struct nsim_dev *nsim_dev = devlink_priv(devlink);
+	u64 *cnt;
+
+	if (nsim_dev->fail_trap_counter_get)
+		return -EINVAL;
+
+	cnt = &nsim_dev->trap_data->trap_pkt_cnt;
+	*p_drops = (*cnt)++;
+
+	return 0;
+}
+
 static const struct devlink_ops nsim_dev_devlink_ops = {
 	.eswitch_mode_set = nsim_devlink_eswitch_mode_set,
 	.eswitch_mode_get = nsim_devlink_eswitch_mode_get,
@@ -1226,6 +1247,7 @@  static const struct devlink_ops nsim_dev_devlink_ops = {
 	.rate_node_del = nsim_rate_node_del,
 	.rate_leaf_parent_set = nsim_rate_leaf_parent_set,
 	.rate_node_parent_set = nsim_rate_node_parent_set,
+	.trap_drop_counter_get = nsim_dev_devlink_trap_hw_counter_get,
 };
 
 #define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index cdfdf2a99578..f2304e61919a 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -249,6 +249,7 @@  struct nsim_dev {
 	bool fail_trap_group_set;
 	bool fail_trap_policer_set;
 	bool fail_trap_policer_counter_get;
+	bool fail_trap_counter_get;
 	struct {
 		struct udp_tunnel_nic_shared utn_shared;
 		u32 __ports[2][NSIM_UDP_TUNNEL_N_PORTS];