History

netdevsim: add support for flash_update overwrite mask

The devlink interface recently gained support for a new "overwrite mask" parameter that allows specifying how various sub-sections of a flash component are modified when updating. Add support for this to netdevsim, to enable easily testing the interface. Make the allowed overwrite mask values controllable via a debugfs parameter. This enables testing a flow where the driver rejects an unsupportable overwrite mask.

Jacob Keller committed 6 years ago

Commit cbb58361 parent 5d5b4123 files · +28 −1Browse files

Unified · Split

3 files
  1. drivers/net/netdevsim/dev.c +9 −1
  2. drivers/net/netdevsim/netdevsim.h +1 −0
  3. tools/testing/selftests/drivers/net/netdevsim/devlink.sh +18 −0
drivers/net/netdevsim/dev.c+9−1
@@ -203,6 +203,8 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev) · 202 unmodified lines
203203 return PTR_ERR(nsim_dev->ports_ddir);
204204 debugfs_create_bool("fw_update_status", 0600, nsim_dev->ddir,
205205 &nsim_dev->fw_update_status);
206+ debugfs_create_u32("fw_update_overwrite_mask", 0600, nsim_dev->ddir,
207+ &nsim_dev->fw_update_overwrite_mask);
206208 debugfs_create_u32("max_macs", 0600, nsim_dev->ddir,
207209 &nsim_dev->max_macs);
208210 debugfs_create_bool("test1", 0600, nsim_dev->ddir,
@@ -749,6 +751,9 @@ static int nsim_dev_flash_update(struct devlink *devlink, · 540 unmodified lines
749751 struct nsim_dev *nsim_dev = devlink_priv(devlink);
750752 int i;
751753
754+ if ((params->overwrite_mask & ~nsim_dev->fw_update_overwrite_mask) != 0)
755+ return -EOPNOTSUPP;
756+
752757 if (nsim_dev->fw_update_status) {
753758 devlink_flash_update_begin_notify(devlink);
754759 devlink_flash_update_status_notify(devlink,
@@ -879,7 +884,8 @@ nsim_dev_devlink_trap_policer_counter_get(struct devlink *devlink, · 124 unmodified lines
879884 }
880885
881886 static const struct devlink_ops nsim_dev_devlink_ops = {
882− .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT,
887+ .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
888+ DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
883889 .reload_down = nsim_dev_reload_down,
884890 .reload_up = nsim_dev_reload_up,
885891 .info_get = nsim_dev_info_get,
@@ -994,6 +1000,7 @@ static int nsim_dev_reload_create(struct nsim_dev *nsim_dev, · 108 unmodified lines
9941000 INIT_LIST_HEAD(&nsim_dev->port_list);
9951001 mutex_init(&nsim_dev->port_list_lock);
9961002 nsim_dev->fw_update_status = true;
1003+ nsim_dev->fw_update_overwrite_mask = 0;
9971004
9981005 nsim_dev->fib_data = nsim_fib_create(devlink, extack);
9991006 if (IS_ERR(nsim_dev->fib_data))
@@ -1052,6 +1059,7 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev) · 52 unmodified lines
10521059 INIT_LIST_HEAD(&nsim_dev->port_list);
10531060 mutex_init(&nsim_dev->port_list_lock);
10541061 nsim_dev->fw_update_status = true;
1062+ nsim_dev->fw_update_overwrite_mask = 0;
10551063 nsim_dev->max_macs = NSIM_DEV_MAX_MACS_DEFAULT;
10561064 nsim_dev->test1 = NSIM_DEV_TEST1_DEFAULT;
10571065 spin_lock_init(&nsim_dev->fa_cookie_lock);
drivers/net/netdevsim/netdevsim.h+1−0
@@ -196,6 +196,7 @@ struct nsim_dev { · 195 unmodified lines
196196 struct list_head port_list;
197197 struct mutex port_list_lock; /* protects port list */
198198 bool fw_update_status;
199+ u32 fw_update_overwrite_mask;
199200 u32 max_macs;
200201 bool test1;
201202 bool dont_allow_reload;
tools/testing/selftests/drivers/net/netdevsim/devlink.sh+18−0
@@ -26,6 +26,24 @@ fw_flash_test() · 25 unmodified lines
2626 devlink dev flash $DL_HANDLE file dummy component fw.mgmt
2727 check_err $? "Failed to flash with component attribute"
2828
29+ devlink dev flash $DL_HANDLE file dummy overwrite settings
30+ check_fail $? "Flash with overwrite settings should be rejected"
31+
32+ echo "1"> $DEBUGFS_DIR/fw_update_overwrite_mask
33+ check_err $? "Failed to change allowed overwrite mask"
34+
35+ devlink dev flash $DL_HANDLE file dummy overwrite settings
36+ check_err $? "Failed to flash with settings overwrite enabled"
37+
38+ devlink dev flash $DL_HANDLE file dummy overwrite identifiers
39+ check_fail $? "Flash with overwrite settings should be identifiers"
40+
41+ echo "3"> $DEBUGFS_DIR/fw_update_overwrite_mask
42+ check_err $? "Failed to change allowed overwrite mask"
43+
44+ devlink dev flash $DL_HANDLE file dummy overwrite identifiers overwrite settings
45+ check_err $? "Failed to flash with settings and identifiers overwrite enabled"
46+
2947 echo "n"> $DEBUGFS_DIR/fw_update_status
3048 check_err $? "Failed to disable status updates"
3149