Message ID | 20210207084412.252259-6-parav@nvidia.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | netdevsim port add, delete support | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | success | CCed 3 of 3 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 52 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
Hi Parav, Thank you for the patch! Yet something to improve: [auto build test ERROR on net-next/master] url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56 config: arm-randconfig-r004-20210207 (attached as .config) compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/0day-ci/linux/commit/25b30524cf47ad832c961d885836cc7e98c1f2bd git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501 git checkout 25b30524cf47ad832c961d885836cc7e98c1f2bd # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All error/warnings (new ones prefixed by >>): In file included from drivers/net/netdevsim/netdev.c:27: drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility] const struct devlink_port_new_attrs *attrs, ^ >> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility] enum devlink_port_fn_state *state, ^ >> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility] enum devlink_port_fn_opstate *opstate, ^ 3 warnings generated. -- In file included from drivers/net/netdevsim/dev.c:36: drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility] const struct devlink_port_new_attrs *attrs, ^ >> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility] enum devlink_port_fn_state *state, ^ >> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility] enum devlink_port_fn_opstate *opstate, ^ drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops' .port_new = nsim_dev_devlink_port_new, ^ drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops' .port_del = nsim_dev_devlink_port_del, ^ >> drivers/net/netdevsim/dev.c:912:3: error: field designator 'port_fn_state_get' does not refer to any field in type 'const struct devlink_ops' .port_fn_state_get = nsim_dev_port_fn_state_get, ^ 3 warnings and 3 errors generated. -- In file included from drivers/net/netdevsim/port_function.c:7: drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility] const struct devlink_port_new_attrs *attrs, ^ >> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility] enum devlink_port_fn_state *state, ^ >> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility] enum devlink_port_fn_opstate *opstate, ^ drivers/net/netdevsim/port_function.c:56:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility] const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:76:23: error: incomplete definition of type 'struct devlink_port_new_attrs' port->flavour = attrs->flavour; ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:78:11: error: incomplete definition of type 'struct devlink_port_new_attrs' if (attrs->port_index_valid) ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:80:16: error: incomplete definition of type 'struct devlink_port_new_attrs' attrs->port_index, ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:81:16: error: incomplete definition of type 'struct devlink_port_new_attrs' attrs->port_index, GFP_KERNEL); ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:93:16: error: incomplete definition of type 'struct devlink_port_new_attrs' attrs->pfnum, attrs->pfnum, ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:93:30: error: incomplete definition of type 'struct devlink_port_new_attrs' attrs->pfnum, attrs->pfnum, ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:99:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF' case DEVLINK_PORT_FLAVOUR_PCI_SF: ^ drivers/net/netdevsim/port_function.c:100:12: error: incomplete definition of type 'struct devlink_port_new_attrs' if (attrs->sfnum_valid) ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:101:63: error: incomplete definition of type 'struct devlink_port_new_attrs' ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum, ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:102:17: error: incomplete definition of type 'struct devlink_port_new_attrs' attrs->sfnum, GFP_KERNEL); ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:108:22: error: incomplete definition of type 'struct devlink_port_new_attrs' port->pfnum = attrs->pfnum; ~~~~~^ drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:133:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF' case DEVLINK_PORT_FLAVOUR_PCI_SF: ^ drivers/net/netdevsim/port_function.c:153:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility] const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:158:12: error: incomplete definition of type 'struct devlink_port_new_attrs' if (attrs->port_index_valid && ~~~~~^ drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:159:31: error: incomplete definition of type 'struct devlink_port_new_attrs' tmp->port_index == attrs->port_index) ~~~~~^ drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:161:12: error: incomplete definition of type 'struct devlink_port_new_attrs' if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF && ~~~~~^ drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:163:26: error: incomplete definition of type 'struct devlink_port_new_attrs' tmp->pfnum == attrs->pfnum) ~~~~~^ drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs' const struct devlink_port_new_attrs *attrs) ^ drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs' if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF && vim +912 drivers/net/netdevsim/dev.c 894 895 static const struct devlink_ops nsim_dev_devlink_ops = { 896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT | 897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK, 898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT), 899 .reload_down = nsim_dev_reload_down, 900 .reload_up = nsim_dev_reload_up, 901 .info_get = nsim_dev_info_get, 902 .flash_update = nsim_dev_flash_update, 903 .trap_init = nsim_dev_devlink_trap_init, 904 .trap_action_set = nsim_dev_devlink_trap_action_set, 905 .trap_group_set = nsim_dev_devlink_trap_group_set, 906 .trap_policer_set = nsim_dev_devlink_trap_policer_set, 907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get, 908 .port_new = nsim_dev_devlink_port_new, 909 .port_del = nsim_dev_devlink_port_del, 910 .port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get, 911 .port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set, > 912 .port_fn_state_get = nsim_dev_port_fn_state_get, 913 }; 914 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index ab15b5f7e955..9f2164ea89cd 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -909,6 +909,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = { .port_del = nsim_dev_devlink_port_del, .port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get, .port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set, + .port_fn_state_get = nsim_dev_port_fn_state_get, }; #define NSIM_DEV_MAX_MACS_DEFAULT 32 diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h index aafe2027a112..c0544d93e1e8 100644 --- a/drivers/net/netdevsim/netdevsim.h +++ b/drivers/net/netdevsim/netdevsim.h @@ -328,3 +328,8 @@ int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink, struct devlink_port *port, const u8 *hw_addr, int hw_addr_len, struct netlink_ext_ack *extack); +int nsim_dev_port_fn_state_get(struct devlink *devlink, + struct devlink_port *port, + enum devlink_port_fn_state *state, + enum devlink_port_fn_opstate *opstate, + struct netlink_ext_ack *extack); diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c index 5d6c5a732546..a25c449e4559 100644 --- a/drivers/net/netdevsim/port_function.c +++ b/drivers/net/netdevsim/port_function.c @@ -17,6 +17,7 @@ struct nsim_port_fn { u32 sfnum; u16 pfnum; u8 hw_addr[ETH_ALEN]; + u8 state; /* enum devlink_port_fn_state */ }; static struct devlink_port * @@ -248,6 +249,7 @@ static int nsim_devlink_port_fn_add(struct devlink *devlink, goto pf_err; } + port->state = DEVLINK_PORT_FN_STATE_INACTIVE; err = devlink_port_register(devlink, &port->dl_port, port->port_index); if (err) goto reg_err; @@ -482,3 +484,23 @@ int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink, memcpy(port->hw_addr, hw_addr, ETH_ALEN); return 0; } + +int nsim_dev_port_fn_state_get(struct devlink *devlink, + struct devlink_port *dl_port, + enum devlink_port_fn_state *state, + enum devlink_port_fn_opstate *opstate, + struct netlink_ext_ack *extack) +{ + struct nsim_dev *nsim_dev = devlink_priv(devlink); + struct nsim_port_fn *port; + + port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack); + if (IS_ERR(port)) + return PTR_ERR(port); + *state = port->state; + if (port->state == DEVLINK_PORT_FN_STATE_INACTIVE) + *opstate = DEVLINK_PORT_FN_OPSTATE_DETACHED; + else + *opstate = DEVLINK_PORT_FN_OPSTATE_ATTACHED; + return 0; +}
Simulate port function state of a PCI port. This enables users to get the state of the PCI port function. Example of a PCI SF port which supports a port function hw_addr set: Create a device with ID=10 and one physical port. $ echo "10 1" > /sys/bus/netdevsim/new_device Add PCI PF port: $ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2 netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false function: hw_addr 00:00:00:00:00:00 $ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2 netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false function: hw_addr 00:00:00:00:00:00 Show devlink port: $ devlink port show netdevsim/netdevsim10/2 netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false function: hw_addr 00:00:00:00:00:00 state inactive opstate detached Show the port and function attributes in JSON format: $ devlink port show netdevsim/netdevsim10/2 -jp { "port": { "netdevsim/netdevsim10/2": { "type": "eth", "netdev": "eth2", "flavour": "pcisf", "controller": 0, "pfnum": 2, "sfnum": 0, "splittable": false, "function": { "hw_addr": "00:00:00:00:00:00", "state": "inactive", "opstate": "detached" } } } } Signed-off-by: Parav Pandit <parav@nvidia.com> --- drivers/net/netdevsim/dev.c | 1 + drivers/net/netdevsim/netdevsim.h | 5 +++++ drivers/net/netdevsim/port_function.c | 22 ++++++++++++++++++++++ 3 files changed, 28 insertions(+)