* [patch net-next v2 0/2] netdevsim: implement support for devlink region and snapshots
@ 2019-08-13 14:48 Jiri Pirko
2019-08-13 14:48 ` [patch net-next v2 1/2] " Jiri Pirko
2019-08-13 14:48 ` [patch net-next v2 2/2] selftests: netdevsim: add devlink regions tests Jiri Pirko
0 siblings, 2 replies; 5+ messages in thread
From: Jiri Pirko @ 2019-08-13 14:48 UTC (permalink / raw)
To: netdev; +Cc: davem, jakub.kicinski, mlxsw
From: Jiri Pirko <jiri@mellanox.com>
Implement devlink region support for netdevsim and test it.
---
Note the selftest patch depends on "[patch net-next] selftests:
netdevsim: add devlink params tests" patch sent earlier today.
Jiri Pirko (2):
netdevsim: implement support for devlink region and snapshots
selftests: netdevsim: add devlink regions tests
drivers/net/netdevsim/dev.c | 66 ++++++++++++++++++-
drivers/net/netdevsim/netdevsim.h | 1 +
.../drivers/net/netdevsim/devlink.sh | 54 ++++++++++++++-
3 files changed, 119 insertions(+), 2 deletions(-)
--
2.21.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch net-next v2 1/2] netdevsim: implement support for devlink region and snapshots
2019-08-13 14:48 [patch net-next v2 0/2] netdevsim: implement support for devlink region and snapshots Jiri Pirko
@ 2019-08-13 14:48 ` Jiri Pirko
2019-08-13 22:08 ` Jakub Kicinski
2019-08-13 14:48 ` [patch net-next v2 2/2] selftests: netdevsim: add devlink regions tests Jiri Pirko
1 sibling, 1 reply; 5+ messages in thread
From: Jiri Pirko @ 2019-08-13 14:48 UTC (permalink / raw)
To: netdev; +Cc: davem, jakub.kicinski, mlxsw
From: Jiri Pirko <jiri@mellanox.com>
Implement dummy region of size 32K and allow user to create snapshots
or random data using debugfs file trigger.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/netdevsim/dev.c | 66 ++++++++++++++++++++++++++++++-
drivers/net/netdevsim/netdevsim.h | 1 +
2 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 127aef85dc99..8485dd805f7c 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -27,6 +27,41 @@
static struct dentry *nsim_dev_ddir;
+#define NSIM_DEV_DUMMY_REGION_SIZE (1024 * 32)
+
+static ssize_t nsim_dev_take_snapshot_write(struct file *file,
+ const char __user *data,
+ size_t count, loff_t *ppos)
+{
+ struct nsim_dev *nsim_dev = file->private_data;
+ void *dummy_data;
+ u32 id;
+ int err;
+
+ dummy_data = kmalloc(NSIM_DEV_DUMMY_REGION_SIZE, GFP_KERNEL);
+ if (!dummy_data) {
+ pr_err("Failed to allocate memory for region snapshot\n");
+ goto out;
+ }
+
+ get_random_bytes(dummy_data, NSIM_DEV_DUMMY_REGION_SIZE);
+
+ id = devlink_region_shapshot_id_get(priv_to_devlink(nsim_dev));
+ err = devlink_region_snapshot_create(nsim_dev->dummy_region,
+ dummy_data, id, kfree);
+ if (err)
+ pr_err("Failed to create region snapshot\n");
+
+out:
+ return count;
+}
+
+static const struct file_operations nsim_dev_take_snapshot_fops = {
+ .open = simple_open,
+ .write = nsim_dev_take_snapshot_write,
+ .llseek = generic_file_llseek,
+};
+
static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
{
char dev_ddir_name[16];
@@ -44,6 +79,8 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
&nsim_dev->max_macs);
debugfs_create_bool("test1", 0600, nsim_dev->ddir,
&nsim_dev->test1);
+ debugfs_create_file("take_snapshot", 0200, nsim_dev->ddir, nsim_dev,
+ &nsim_dev_take_snapshot_fops);
return 0;
}
@@ -248,6 +285,26 @@ static void nsim_devlink_param_load_driverinit_values(struct devlink *devlink)
nsim_dev->test1 = saved_value.vbool;
}
+#define NSIM_DEV_DUMMY_REGION_SNAPSHOT_MAX 16
+
+static int nsim_dev_dummy_region_init(struct nsim_dev *nsim_dev,
+ struct devlink *devlink)
+{
+ nsim_dev->dummy_region =
+ devlink_region_create(devlink, "dummy",
+ NSIM_DEV_DUMMY_REGION_SNAPSHOT_MAX,
+ NSIM_DEV_DUMMY_REGION_SIZE);
+ if (IS_ERR(nsim_dev->dummy_region))
+ return PTR_ERR(nsim_dev->dummy_region);
+
+ return 0;
+}
+
+static void nsim_dev_dummy_region_exit(struct nsim_dev *nsim_dev)
+{
+ devlink_region_destroy(nsim_dev->dummy_region);
+}
+
static int nsim_dev_reload(struct devlink *devlink,
struct netlink_ext_ack *extack)
{
@@ -365,10 +422,14 @@ nsim_dev_create(struct net *net, struct nsim_bus_dev *nsim_bus_dev,
goto err_dl_unregister;
nsim_devlink_set_params_init_values(nsim_dev, devlink);
- err = nsim_dev_debugfs_init(nsim_dev);
+ err = nsim_dev_dummy_region_init(nsim_dev, devlink);
if (err)
goto err_params_unregister;
+ err = nsim_dev_debugfs_init(nsim_dev);
+ if (err)
+ goto err_dummy_region_exit;
+
err = nsim_bpf_dev_init(nsim_dev);
if (err)
goto err_debugfs_exit;
@@ -378,6 +439,8 @@ nsim_dev_create(struct net *net, struct nsim_bus_dev *nsim_bus_dev,
err_debugfs_exit:
nsim_dev_debugfs_exit(nsim_dev);
+err_dummy_region_exit:
+ nsim_dev_dummy_region_exit(nsim_dev);
err_params_unregister:
devlink_params_unregister(devlink, nsim_devlink_params,
ARRAY_SIZE(nsim_devlink_params));
@@ -398,6 +461,7 @@ static void nsim_dev_destroy(struct nsim_dev *nsim_dev)
nsim_bpf_dev_exit(nsim_dev);
nsim_dev_debugfs_exit(nsim_dev);
+ nsim_dev_dummy_region_exit(nsim_dev);
devlink_params_unregister(devlink, nsim_devlink_params,
ARRAY_SIZE(nsim_devlink_params));
devlink_unregister(devlink);
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index ef879892dd6f..521802d429a0 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -163,6 +163,7 @@ struct nsim_dev {
bool fw_update_status;
u32 max_macs;
bool test1;
+ struct devlink_region *dummy_region;
};
int nsim_dev_init(void);
--
2.21.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [patch net-next v2 2/2] selftests: netdevsim: add devlink regions tests
2019-08-13 14:48 [patch net-next v2 0/2] netdevsim: implement support for devlink region and snapshots Jiri Pirko
2019-08-13 14:48 ` [patch net-next v2 1/2] " Jiri Pirko
@ 2019-08-13 14:48 ` Jiri Pirko
1 sibling, 0 replies; 5+ messages in thread
From: Jiri Pirko @ 2019-08-13 14:48 UTC (permalink / raw)
To: netdev; +Cc: davem, jakub.kicinski, mlxsw
From: Jiri Pirko <jiri@mellanox.com>
Test netdevsim devlink region implementation.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v1->v2:
- new patch
---
.../drivers/net/netdevsim/devlink.sh | 54 ++++++++++++++++++-
1 file changed, 53 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
index 858ebdc8d8a3..b77fdd046bea 100755
--- a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
@@ -3,7 +3,7 @@
lib_dir=$(dirname $0)/../../../net/forwarding
-ALL_TESTS="fw_flash_test params_test"
+ALL_TESTS="fw_flash_test params_test regions_test"
NUM_NETIFS=0
source $lib_dir/lib.sh
@@ -90,6 +90,58 @@ params_test()
log_test "params test"
}
+check_region_size()
+{
+ local name=$1
+ local size
+
+ size=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].size')
+ check_err $? "Failed to get $name region size"
+ [ $size -eq 32768 ]
+ check_err $? "Invalid $name region size"
+}
+
+check_region_snapshot_count()
+{
+ local name=$1
+ local phase_name=$2
+ local expected_count=$3
+ local count
+
+ count=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].snapshot | length')
+ [ $count -eq $expected_count ]
+ check_err $? "Unexpected $phase_name snapshot count"
+}
+
+regions_test()
+{
+ RET=0
+
+ local count
+
+ check_region_size dummy
+ check_region_snapshot_count dummy initial 0
+
+ echo ""> $DEBUGFS_DIR/take_snapshot
+ check_err $? "Failed to take first dummy region snapshot"
+ check_region_snapshot_count dummy post-first-snapshot 1
+
+ echo ""> $DEBUGFS_DIR/take_snapshot
+ check_err $? "Failed to take second dummy region snapshot"
+ check_region_snapshot_count dummy post-second-snapshot 2
+
+ echo ""> $DEBUGFS_DIR/take_snapshot
+ check_err $? "Failed to take third dummy region snapshot"
+ check_region_snapshot_count dummy post-third-snapshot 3
+
+ devlink region del $DL_HANDLE/dummy snapshot 1
+ check_err $? "Failed to delete first dummy region snapshot"
+
+ check_region_snapshot_count dummy post-first-delete 2
+
+ log_test "regions test"
+}
+
setup_prepare()
{
modprobe netdevsim
--
2.21.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [patch net-next v2 1/2] netdevsim: implement support for devlink region and snapshots
2019-08-13 14:48 ` [patch net-next v2 1/2] " Jiri Pirko
@ 2019-08-13 22:08 ` Jakub Kicinski
2019-08-14 5:59 ` Jiri Pirko
0 siblings, 1 reply; 5+ messages in thread
From: Jakub Kicinski @ 2019-08-13 22:08 UTC (permalink / raw)
To: Jiri Pirko; +Cc: netdev, davem, mlxsw
On Tue, 13 Aug 2019 16:48:42 +0200, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@mellanox.com>
>
> Implement dummy region of size 32K and allow user to create snapshots
> or random data using debugfs file trigger.
>
> Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Hmm.. did you send the right version?
> diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
> index 127aef85dc99..8485dd805f7c 100644
> --- a/drivers/net/netdevsim/dev.c
> +++ b/drivers/net/netdevsim/dev.c
> @@ -27,6 +27,41 @@
>
> static struct dentry *nsim_dev_ddir;
>
> +#define NSIM_DEV_DUMMY_REGION_SIZE (1024 * 32)
> +
> +static ssize_t nsim_dev_take_snapshot_write(struct file *file,
> + const char __user *data,
> + size_t count, loff_t *ppos)
> +{
> + struct nsim_dev *nsim_dev = file->private_data;
> + void *dummy_data;
> + u32 id;
> + int err;
> +
> + dummy_data = kmalloc(NSIM_DEV_DUMMY_REGION_SIZE, GFP_KERNEL);
> + if (!dummy_data) {
> + pr_err("Failed to allocate memory for region snapshot\n");
not needed, without __GFP_NOWARN there will be a huge OOM splat, anyway.
> + goto out;
return -ENOMEM;
> + }
> +
> + get_random_bytes(dummy_data, NSIM_DEV_DUMMY_REGION_SIZE);
> +
> + id = devlink_region_shapshot_id_get(priv_to_devlink(nsim_dev));
> + err = devlink_region_snapshot_create(nsim_dev->dummy_region,
> + dummy_data, id, kfree);
> + if (err)
> + pr_err("Failed to create region snapshot\n");
return err;
}
> +
> +out:
> + return count;
> +}
> +
> +static const struct file_operations nsim_dev_take_snapshot_fops = {
> + .open = simple_open,
> + .write = nsim_dev_take_snapshot_write,
> + .llseek = generic_file_llseek,
> +};
> +
> static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
> {
> char dev_ddir_name[16];
> @@ -44,6 +79,8 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
> &nsim_dev->max_macs);
> debugfs_create_bool("test1", 0600, nsim_dev->ddir,
> &nsim_dev->test1);
> + debugfs_create_file("take_snapshot", 0200, nsim_dev->ddir, nsim_dev,
> + &nsim_dev_take_snapshot_fops);
> return 0;
> }
>
> @@ -248,6 +285,26 @@ static void nsim_devlink_param_load_driverinit_values(struct devlink *devlink)
> nsim_dev->test1 = saved_value.vbool;
> }
>
> +#define NSIM_DEV_DUMMY_REGION_SNAPSHOT_MAX 16
> +
> +static int nsim_dev_dummy_region_init(struct nsim_dev *nsim_dev,
> + struct devlink *devlink)
> +{
> + nsim_dev->dummy_region =
> + devlink_region_create(devlink, "dummy",
> + NSIM_DEV_DUMMY_REGION_SNAPSHOT_MAX,
> + NSIM_DEV_DUMMY_REGION_SIZE);
> + if (IS_ERR(nsim_dev->dummy_region))
> + return PTR_ERR(nsim_dev->dummy_region);
> +
> + return 0;
return PTR_ERR_OR_ZERO(nsim_dev->dummy_region);
> +}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch net-next v2 1/2] netdevsim: implement support for devlink region and snapshots
2019-08-13 22:08 ` Jakub Kicinski
@ 2019-08-14 5:59 ` Jiri Pirko
0 siblings, 0 replies; 5+ messages in thread
From: Jiri Pirko @ 2019-08-14 5:59 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: netdev, davem, mlxsw
Wed, Aug 14, 2019 at 12:08:29AM CEST, jakub.kicinski@netronome.com wrote:
>On Tue, 13 Aug 2019 16:48:42 +0200, Jiri Pirko wrote:
>> From: Jiri Pirko <jiri@mellanox.com>
>>
>> Implement dummy region of size 32K and allow user to create snapshots
>> or random data using debugfs file trigger.
>>
>> Signed-off-by: Jiri Pirko <jiri@mellanox.com>
>
>Hmm.. did you send the right version?
You are right. I apologize.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-08-14 5:59 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-13 14:48 [patch net-next v2 0/2] netdevsim: implement support for devlink region and snapshots Jiri Pirko
2019-08-13 14:48 ` [patch net-next v2 1/2] " Jiri Pirko
2019-08-13 22:08 ` Jakub Kicinski
2019-08-14 5:59 ` Jiri Pirko
2019-08-13 14:48 ` [patch net-next v2 2/2] selftests: netdevsim: add devlink regions tests Jiri Pirko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).