Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jacob Keller and committed by
David S. Miller
cbb58368 5d5b4128

+28 -1
+9 -1
drivers/net/netdevsim/dev.c
··· 203 203 return PTR_ERR(nsim_dev->ports_ddir); 204 204 debugfs_create_bool("fw_update_status", 0600, nsim_dev->ddir, 205 205 &nsim_dev->fw_update_status); 206 + debugfs_create_u32("fw_update_overwrite_mask", 0600, nsim_dev->ddir, 207 + &nsim_dev->fw_update_overwrite_mask); 206 208 debugfs_create_u32("max_macs", 0600, nsim_dev->ddir, 207 209 &nsim_dev->max_macs); 208 210 debugfs_create_bool("test1", 0600, nsim_dev->ddir, ··· 751 749 struct nsim_dev *nsim_dev = devlink_priv(devlink); 752 750 int i; 753 751 752 + if ((params->overwrite_mask & ~nsim_dev->fw_update_overwrite_mask) != 0) 753 + return -EOPNOTSUPP; 754 + 754 755 if (nsim_dev->fw_update_status) { 755 756 devlink_flash_update_begin_notify(devlink); 756 757 devlink_flash_update_status_notify(devlink, ··· 884 879 } 885 880 886 881 static const struct devlink_ops nsim_dev_devlink_ops = { 887 - .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT, 882 + .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT | 883 + DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK, 888 884 .reload_down = nsim_dev_reload_down, 889 885 .reload_up = nsim_dev_reload_up, 890 886 .info_get = nsim_dev_info_get, ··· 1000 994 INIT_LIST_HEAD(&nsim_dev->port_list); 1001 995 mutex_init(&nsim_dev->port_list_lock); 1002 996 nsim_dev->fw_update_status = true; 997 + nsim_dev->fw_update_overwrite_mask = 0; 1003 998 1004 999 nsim_dev->fib_data = nsim_fib_create(devlink, extack); 1005 1000 if (IS_ERR(nsim_dev->fib_data)) ··· 1059 1052 INIT_LIST_HEAD(&nsim_dev->port_list); 1060 1053 mutex_init(&nsim_dev->port_list_lock); 1061 1054 nsim_dev->fw_update_status = true; 1055 + nsim_dev->fw_update_overwrite_mask = 0; 1062 1056 nsim_dev->max_macs = NSIM_DEV_MAX_MACS_DEFAULT; 1063 1057 nsim_dev->test1 = NSIM_DEV_TEST1_DEFAULT; 1064 1058 spin_lock_init(&nsim_dev->fa_cookie_lock);
+1
drivers/net/netdevsim/netdevsim.h
··· 196 196 struct list_head port_list; 197 197 struct mutex port_list_lock; /* protects port list */ 198 198 bool fw_update_status; 199 + u32 fw_update_overwrite_mask; 199 200 u32 max_macs; 200 201 bool test1; 201 202 bool dont_allow_reload;
+18
tools/testing/selftests/drivers/net/netdevsim/devlink.sh
··· 26 26 devlink dev flash $DL_HANDLE file dummy component fw.mgmt 27 27 check_err $? "Failed to flash with component attribute" 28 28 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 + 29 47 echo "n"> $DEBUGFS_DIR/fw_update_status 30 48 check_err $? "Failed to disable status updates" 31 49