On Tue, 13 Aug 2019 16:48:42 +0200, Jiri Pirko wrote: > From: Jiri Pirko <j...@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 <j...@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); > +}