lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250719131315.353975-1-jiri@resnulli.us>
Date: Sat, 19 Jul 2025 15:13:15 +0200
From: Jiri Pirko <jiri@...nulli.us>
To: netdev@...r.kernel.org
Cc: davem@...emloft.net,
	edumazet@...gle.com,
	kuba@...nel.org,
	pabeni@...hat.com,
	andrew+netdev@...n.ch
Subject: [PATCH net-next] netdevsim: add couple of fw_update_flash_* debugfs knobs

From: Jiri Pirko <jiri@...dia.com>

Netdevsim emulates firmware update and it takes 5 seconds to complete.
For some usecases, this is too long and unnecessary. Allow user to
configure the time by exposing debugfs knobs to set flash size, chunk
size and chunk time.

Signed-off-by: Jiri Pirko <jiri@...dia.com>
---
 drivers/net/netdevsim/dev.c                   | 32 +++++++++++++------
 drivers/net/netdevsim/netdevsim.h             |  3 ++
 .../drivers/net/netdevsim/devlink.sh          |  4 +++
 3 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 01c7edb28d96..e0cb09193c72 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -314,6 +314,12 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
 			    &nsim_dev->fw_update_status);
 	debugfs_create_u32("fw_update_overwrite_mask", 0600, nsim_dev->ddir,
 			    &nsim_dev->fw_update_overwrite_mask);
+	debugfs_create_u32("fw_update_flash_size", 0600, nsim_dev->ddir,
+			   &nsim_dev->fw_update_flash_size);
+	debugfs_create_u32("fw_update_flash_chunk_size", 0600, nsim_dev->ddir,
+			   &nsim_dev->fw_update_flash_chunk_size);
+	debugfs_create_u32("fw_update_flash_chunk_time_ms", 0600, nsim_dev->ddir,
+			   &nsim_dev->fw_update_flash_chunk_time_ms);
 	debugfs_create_u32("max_macs", 0600, nsim_dev->ddir,
 			   &nsim_dev->max_macs);
 	debugfs_create_bool("test1", 0600, nsim_dev->ddir,
@@ -1015,15 +1021,14 @@ static int nsim_dev_info_get(struct devlink *devlink,
 						    DEVLINK_INFO_VERSION_TYPE_COMPONENT);
 }
 
-#define NSIM_DEV_FLASH_SIZE 500000
-#define NSIM_DEV_FLASH_CHUNK_SIZE 1000
-#define NSIM_DEV_FLASH_CHUNK_TIME_MS 10
-
 static int nsim_dev_flash_update(struct devlink *devlink,
 				 struct devlink_flash_update_params *params,
 				 struct netlink_ext_ack *extack)
 {
 	struct nsim_dev *nsim_dev = devlink_priv(devlink);
+	u32 flash_size = nsim_dev->fw_update_flash_size;
+	u32 flash_chunk_size = nsim_dev->fw_update_flash_chunk_size;
+	u32 flash_chunk_time_ms = nsim_dev->fw_update_flash_chunk_time_ms;
 	int i;
 
 	if ((params->overwrite_mask & ~nsim_dev->fw_update_overwrite_mask) != 0)
@@ -1035,20 +1040,20 @@ static int nsim_dev_flash_update(struct devlink *devlink,
 						   params->component, 0, 0);
 	}
 
-	for (i = 0; i < NSIM_DEV_FLASH_SIZE / NSIM_DEV_FLASH_CHUNK_SIZE; i++) {
+	for (i = 0; i < flash_size / flash_chunk_size; i++) {
 		if (nsim_dev->fw_update_status)
 			devlink_flash_update_status_notify(devlink, "Flashing",
 							   params->component,
-							   i * NSIM_DEV_FLASH_CHUNK_SIZE,
-							   NSIM_DEV_FLASH_SIZE);
-		msleep(NSIM_DEV_FLASH_CHUNK_TIME_MS);
+							   i * flash_chunk_size,
+							   flash_size);
+		msleep(flash_chunk_time_ms);
 	}
 
 	if (nsim_dev->fw_update_status) {
 		devlink_flash_update_status_notify(devlink, "Flashing",
 						   params->component,
-						   NSIM_DEV_FLASH_SIZE,
-						   NSIM_DEV_FLASH_SIZE);
+						   flash_size,
+						   flash_size);
 		devlink_flash_update_timeout_notify(devlink, "Flash select",
 						    params->component, 81);
 		devlink_flash_update_status_notify(devlink, "Flashing done",
@@ -1567,6 +1572,10 @@ static int nsim_dev_reload_create(struct nsim_dev *nsim_dev,
 	return err;
 }
 
+#define NSIM_DEV_FLASH_SIZE_DEFAULT 500000
+#define NSIM_DEV_FLASH_CHUNK_SIZE_DEFAULT 1000
+#define NSIM_DEV_FLASH_CHUNK_TIME_MS_DEFAULT 10
+
 int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
 {
 	struct nsim_dev *nsim_dev;
@@ -1585,6 +1594,9 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
 	INIT_LIST_HEAD(&nsim_dev->port_list);
 	nsim_dev->fw_update_status = true;
 	nsim_dev->fw_update_overwrite_mask = 0;
+	nsim_dev->fw_update_flash_size = NSIM_DEV_FLASH_SIZE_DEFAULT;
+	nsim_dev->fw_update_flash_chunk_size = NSIM_DEV_FLASH_CHUNK_SIZE_DEFAULT;
+	nsim_dev->fw_update_flash_chunk_time_ms = NSIM_DEV_FLASH_CHUNK_TIME_MS_DEFAULT;
 	nsim_dev->max_macs = NSIM_DEV_MAX_MACS_DEFAULT;
 	nsim_dev->test1 = NSIM_DEV_TEST1_DEFAULT;
 	spin_lock_init(&nsim_dev->fa_cookie_lock);
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index 8eeeb9256077..78a0f07e4088 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -317,6 +317,9 @@ struct nsim_dev {
 	struct list_head port_list;
 	bool fw_update_status;
 	u32 fw_update_overwrite_mask;
+	u32 fw_update_flash_size;
+	u32 fw_update_flash_chunk_size;
+	u32 fw_update_flash_chunk_time_ms;
 	u32 max_macs;
 	bool test1;
 	bool dont_allow_reload;
diff --git a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
index a102803ff74f..92cc5cbb7d83 100755
--- a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
@@ -40,6 +40,10 @@ fw_flash_test()
 		return
 	fi
 
+	echo "1024"> $DEBUGFS_DIR/fw_update_flash_size
+	echo "128"> $DEBUGFS_DIR/fw_update_flash_chunk_size
+	echo "10"> $DEBUGFS_DIR/fw_update_flash_chunk_time_ms
+
 	devlink dev flash $DL_HANDLE file $DUMMYFILE
 	check_err $? "Failed to flash with status updates on"
 
-- 
2.50.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ