* Re: [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes @ 2021-04-21 22:27 kernel test robot 0 siblings, 0 replies; 7+ messages in thread From: kernel test robot @ 2021-04-21 22:27 UTC (permalink / raw) To: kbuild [-- Attachment #1: Type: text/plain, Size: 4266 bytes --] CC: kbuild-all(a)lists.01.org In-Reply-To: <1619020385-20220-13-git-send-email-dlinkin@nvidia.com> References: <1619020385-20220-13-git-send-email-dlinkin@nvidia.com> TO: dlinkin(a)nvidia.com Hi, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on net-next/master] url: https://github.com/0day-ci/linux/commits/dlinkin-nvidia-com/devlink-rate-objects-API/20210421-235552 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git a926c025d56bb1acd8a192fca0e307331ee91b30 :::::: branch date: 7 hours ago :::::: commit date: 7 hours ago config: x86_64-randconfig-m001-20210421 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> New smatch warnings: net/core/devlink.c:1591 devlink_nl_rate_set() error: uninitialized symbol 'err'. Old smatch warnings: net/core/devlink.c:1604 devlink_nl_rate_set() error: uninitialized symbol 'err'. net/core/devlink.c:6364 devlink_fmsg_prepare_skb() error: uninitialized symbol 'err'. vim +/err +1591 net/core/devlink.c cd76dcd68d96aa Parav Pandit 2020-12-11 1574 709d06045321cd Dmytro Linkin 2021-04-21 1575 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, 709d06045321cd Dmytro Linkin 2021-04-21 1576 const struct devlink_ops *ops, 709d06045321cd Dmytro Linkin 2021-04-21 1577 struct genl_info *info) 709d06045321cd Dmytro Linkin 2021-04-21 1578 { 709d06045321cd Dmytro Linkin 2021-04-21 1579 struct nlattr **attrs = info->attrs; 709d06045321cd Dmytro Linkin 2021-04-21 1580 u64 rate; 709d06045321cd Dmytro Linkin 2021-04-21 1581 int err; 709d06045321cd Dmytro Linkin 2021-04-21 1582 709d06045321cd Dmytro Linkin 2021-04-21 1583 if (attrs[DEVLINK_ATTR_RATE_TX_SHARE]) { 709d06045321cd Dmytro Linkin 2021-04-21 1584 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_SHARE]); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1585 if (devlink_rate_is_leaf(devlink_rate)) 709d06045321cd Dmytro Linkin 2021-04-21 1586 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, 709d06045321cd Dmytro Linkin 2021-04-21 1587 rate, info->extack); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1588 else if (devlink_rate_is_node(devlink_rate)) ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1589 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1590 rate, info->extack); 709d06045321cd Dmytro Linkin 2021-04-21 @1591 if (err) 709d06045321cd Dmytro Linkin 2021-04-21 1592 return err; 709d06045321cd Dmytro Linkin 2021-04-21 1593 devlink_rate->tx_share = rate; 709d06045321cd Dmytro Linkin 2021-04-21 1594 } 709d06045321cd Dmytro Linkin 2021-04-21 1595 709d06045321cd Dmytro Linkin 2021-04-21 1596 if (attrs[DEVLINK_ATTR_RATE_TX_MAX]) { 709d06045321cd Dmytro Linkin 2021-04-21 1597 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_MAX]); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1598 if (devlink_rate_is_leaf(devlink_rate)) 709d06045321cd Dmytro Linkin 2021-04-21 1599 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, 709d06045321cd Dmytro Linkin 2021-04-21 1600 rate, info->extack); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1601 else if (devlink_rate_is_node(devlink_rate)) ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1602 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1603 rate, info->extack); 709d06045321cd Dmytro Linkin 2021-04-21 1604 if (err) 709d06045321cd Dmytro Linkin 2021-04-21 1605 return err; 709d06045321cd Dmytro Linkin 2021-04-21 1606 devlink_rate->tx_max = rate; 709d06045321cd Dmytro Linkin 2021-04-21 1607 } 709d06045321cd Dmytro Linkin 2021-04-21 1608 709d06045321cd Dmytro Linkin 2021-04-21 1609 return 0; 709d06045321cd Dmytro Linkin 2021-04-21 1610 } 709d06045321cd Dmytro Linkin 2021-04-21 1611 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 33141 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RESEND-2 RFC net-next 00/18] devlink: rate objects API @ 2021-04-21 15:52 dlinkin 2021-04-21 15:52 ` [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes dlinkin 0 siblings, 1 reply; 7+ messages in thread From: dlinkin @ 2021-04-21 15:52 UTC (permalink / raw) To: netdev; +Cc: davem, kuba, jiri, stephen, dsahern, vladbu, Dmytro Linkin From: Dmytro Linkin <dlinkin@nvidia.com> Sorry for annoying. Please, ignore previous RESEND. Resending, due to the issue with smtp server. Currently kernel provides a way to change TX rate of single VF in switchdev mode via tc-police action. When lots of VFs are configured management of theirs rates becomes non-trivial task and some grouping mechanism is required. Implementing such grouping in tc-police will bring flow related limitations and unwanted complications, like: - flows requires net device to be placed on, which wouldn't exist for "groups" instances - effect of limiting depends on the position of tc-police action in the pipeline, while the goal is to have steady behaviour similar to legacy ip-link transmit bandwidth control According to that devlink is the most appropriate place. This series introduces devlink API for managing TX rate of single devlink port or of a group by invoking callbacks (see below) of corresponding driver. Also devlink port or a group can be added to the parent group, where driver responsible to handle rates of a group elements. To achieve all of that new rate object is added. It can be one of the two types: - leaf - represents a single devlink port; created/destroyed by the driver and bound to the devlink port. As example, some driver may create leaf rate object for every devlink port associated with VF. Since leaf have 1to1 mapping to it's devlink port, in user space it is referred as pci/<bus_addr>/<port_index>; - node - represents a group of rate objects; created/deleted by request from the userspace; initially empty (no rate objects added). In userspace it is referred as pci/<bus_addr>/<node_name>, where node name can be any, except decimal number, to avoid collisions with leafs. devlink_ops extended with following callbacks: - rate_{leaf|node}_tx_{share|max}_set - rate_node_{new|del} - rate_{leaf|node}_parent_set KAPI provides: - creation/destruction of the leaf rate object associated with devlink port - storing/retrieving driver specific data in rate object UAPI provides: - dumping all or single rate objects - setting tx_{share|max} of rate object of any type - creating/deleting node rate object - setting/unsetting parent of any rate object Add devlink rate object support for netdevsim driver. To support devlink rate objects implement VF ports and eswitch mode selector for netdevsim driver. Issues/open questions: - Does user need DEVLINK_CMD_RATE_DEL_ALL_CHILD command to clean all children of particular parent node? For example: $ devlink port func rate flush netdevsim/netdevsim10/group Dmytro Linkin (18): netdevsim: Add max_vfs to bus_dev netdevsim: Disable VFs on nsim_dev_reload_destroy() call netdevsim: Implement port types and indexing netdevsim: Implement VFs netdevsim: Implement legacy/switchdev mode for VFs devlink: Introduce rate object netdevsim: Register devlink rate leaf objects per VF selftest: netdevsim: Add devlink rate test devlink: Allow setting tx rate for devlink rate leaf objects netdevsim: Implement devlink rate leafs tx rate support selftest: netdevsim: Add devlink port shared/max tx rate test devlink: Introduce rate nodes netdevsim: Implement support for devlink rate nodes selftest: netdevsim: Add devlink rate nodes test devlink: Allow setting parent node of rate objects netdevsim: Allow setting parent node of rate objects selftest: netdevsim: Add devlink rate grouping test Documentation: devlink rate objects Documentation/networking/devlink/devlink-port.rst | 35 ++ Documentation/networking/devlink/netdevsim.rst | 26 + drivers/net/netdevsim/bus.c | 131 ++++- drivers/net/netdevsim/dev.c | 393 ++++++++++++- drivers/net/netdevsim/netdev.c | 95 +++- drivers/net/netdevsim/netdevsim.h | 48 ++ include/net/devlink.h | 47 ++ include/uapi/linux/devlink.h | 17 + net/core/devlink.c | 613 ++++++++++++++++++++- .../selftests/drivers/net/netdevsim/devlink.sh | 167 +++++- 10 files changed, 1514 insertions(+), 58 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes 2021-04-21 15:52 [PATCH RESEND-2 RFC net-next 00/18] devlink: rate objects API dlinkin @ 2021-04-21 15:52 ` dlinkin 2021-04-21 21:31 ` kernel test robot ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: dlinkin @ 2021-04-21 15:52 UTC (permalink / raw) To: netdev; +Cc: davem, kuba, jiri, stephen, dsahern, vladbu, Dmytro Linkin From: Dmytro Linkin <dlinkin@nvidia.com> Implement support for DEVLINK_CMD_RATE_{NEW|DEL} commands that are used to create and delete devlink rate nodes. Add new attribute DEVLINK_ATTR_RATE_NODE_NAME that specify node name string. The node name is an alphanumeric identifier. No valid node name can be a devlink port index, eg. decimal number. Extend devlink ops with new callbacks rate_node_{new|del}() and rate_node_tx_{share|max}_set() to allow supporting drivers to implement ports rate grouping and setting tx rate of rate nodes through devlink. Disallow moving device from switchdev to legacy mode if any node exist on that device. Example: $ devlink port func rate add netdevsim/netdevsim10/group1 $ devlink port func rate set netdevsim/netdevsim10/group1 \ tx_share 10mbit tx_max 100mbit Add + set command can be combined: $ devlink port func rate add netdevsim/netdevsim10/group1 \ tx_share 10mbit tx_max 100mbit $ devlink port func rate show netdevsim/netdevsim10/group1 netdevsim/netdevsim10/group1: type node tx_share 10mbit tx_max 100mbit $ devlink port func rate del netdevsim/netdevsim10/group1 Co-developed-by: Vlad Buslov <vladbu@nvidia.com> Signed-off-by: Vlad Buslov <vladbu@nvidia.com> Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> --- include/net/devlink.h | 13 ++- include/uapi/linux/devlink.h | 3 + net/core/devlink.c | 209 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 218 insertions(+), 7 deletions(-) diff --git a/include/net/devlink.h b/include/net/devlink.h index cbfa456..ac0b5eb 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -140,7 +140,10 @@ struct devlink_rate { u64 tx_share; u64 tx_max; - struct devlink_port *devlink_port; + union { + struct devlink_port *devlink_port; + char *name; + }; }; struct devlink_port { @@ -1473,6 +1476,14 @@ struct devlink_ops { u64 tx_share, struct netlink_ext_ack *extack); int (*rate_leaf_tx_max_set)(struct devlink_rate *devlink_rate, void *priv, u64 tx_max, struct netlink_ext_ack *extack); + int (*rate_node_tx_share_set)(struct devlink_rate *devlink_rate, void *priv, + u64 tx_share, struct netlink_ext_ack *extack); + int (*rate_node_tx_max_set)(struct devlink_rate *devlink_rate, void *priv, + u64 tx_max, struct netlink_ext_ack *extack); + int (*rate_node_new)(struct devlink_rate *rate_node, void **priv, + struct netlink_ext_ack *extack); + int (*rate_node_del)(struct devlink_rate *rate_node, void *priv, + struct netlink_ext_ack *extack); }; static inline void *devlink_priv(struct devlink *devlink) diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index ae94cd2..7e15853 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -213,6 +213,7 @@ enum devlink_port_flavour { enum devlink_rate_type { DEVLINK_RATE_TYPE_LEAF, + DEVLINK_RATE_TYPE_NODE, }; enum devlink_param_cmode { @@ -547,6 +548,8 @@ enum devlink_attr { DEVLINK_ATTR_RATE_TYPE, /* u16 */ DEVLINK_ATTR_RATE_TX_SHARE, /* u64 */ DEVLINK_ATTR_RATE_TX_MAX, /* u64 */ + DEVLINK_ATTR_RATE_NODE_NAME, /* string */ + /* add new attributes above here, update the policy in devlink.c */ __DEVLINK_ATTR_MAX, diff --git a/net/core/devlink.c b/net/core/devlink.c index 4f0412e..eca3f28 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -196,6 +196,12 @@ static struct devlink_port *devlink_port_get_from_info(struct devlink *devlink, return devlink_rate->type == DEVLINK_RATE_TYPE_LEAF; } +static inline bool +devlink_rate_is_node(struct devlink_rate *devlink_rate) +{ + return devlink_rate->type == DEVLINK_RATE_TYPE_NODE; +} + static struct devlink_rate * devlink_rate_leaf_get_from_info(struct devlink *devlink, struct genl_info *info) { @@ -209,6 +215,55 @@ static struct devlink_port *devlink_port_get_from_info(struct devlink *devlink, return devlink_rate ?: ERR_PTR(-ENODEV); } +static struct devlink_rate * +devlink_rate_node_get_by_name(struct devlink *devlink, const char *node_name) +{ + static struct devlink_rate *devlink_rate; + + list_for_each_entry(devlink_rate, &devlink->rate_list, list) { + if (devlink_rate_is_node(devlink_rate) && + !strcmp(node_name, devlink_rate->name)) + return devlink_rate; + } + return ERR_PTR(-ENODEV); +} + +static struct devlink_rate * +devlink_rate_node_get_from_attrs(struct devlink *devlink, struct nlattr **attrs) +{ + const char *rate_node_name; + size_t len; + + if (!attrs[DEVLINK_ATTR_RATE_NODE_NAME]) + return ERR_PTR(-EINVAL); + rate_node_name = nla_data(attrs[DEVLINK_ATTR_RATE_NODE_NAME]); + len = strlen(rate_node_name); + /* Name cannot be empty or decimal number */ + if (!len || strspn(rate_node_name, "0123456789") == len) + return ERR_PTR(-EINVAL); + + return devlink_rate_node_get_by_name(devlink, rate_node_name); +} + +static struct devlink_rate * +devlink_rate_node_get_from_info(struct devlink *devlink, struct genl_info *info) +{ + return devlink_rate_node_get_from_attrs(devlink, info->attrs); +} + +static struct devlink_rate * +devlink_rate_get_from_info(struct devlink *devlink, struct genl_info *info) +{ + struct nlattr **attrs = info->attrs; + + if (attrs[DEVLINK_ATTR_PORT_INDEX]) + return devlink_rate_leaf_get_from_info(devlink, info); + else if (attrs[DEVLINK_ATTR_RATE_NODE_NAME]) + return devlink_rate_node_get_from_info(devlink, info); + else + return ERR_PTR(-EINVAL); +} + struct devlink_sb { struct list_head list; unsigned int index; @@ -428,12 +483,13 @@ struct devlink_snapshot { #define DEVLINK_NL_FLAG_NEED_PORT BIT(0) #define DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT BIT(1) #define DEVLINK_NL_FLAG_NEED_RATE BIT(2) +#define DEVLINK_NL_FLAG_NEED_RATE_NODE BIT(3) /* The per devlink instance lock is taken by default in the pre-doit * operation, yet several commands do not require this. The global * devlink lock is taken and protects from disruption by user-calls. */ -#define DEVLINK_NL_FLAG_NO_LOCK BIT(3) +#define DEVLINK_NL_FLAG_NO_LOCK BIT(4) static int devlink_nl_pre_doit(const struct genl_ops *ops, struct sk_buff *skb, struct genl_info *info) @@ -465,12 +521,21 @@ static int devlink_nl_pre_doit(const struct genl_ops *ops, } else if (ops->internal_flags & DEVLINK_NL_FLAG_NEED_RATE) { struct devlink_rate *devlink_rate; - devlink_rate = devlink_rate_leaf_get_from_info(devlink, info); + devlink_rate = devlink_rate_get_from_info(devlink, info); if (IS_ERR(devlink_rate)) { err = PTR_ERR(devlink_rate); goto unlock; } info->user_ptr[1] = devlink_rate; + } else if (ops->internal_flags & DEVLINK_NL_FLAG_NEED_RATE_NODE) { + struct devlink_rate *rate_node; + + rate_node = devlink_rate_node_get_from_info(devlink, info); + if (IS_ERR(rate_node)) { + err = PTR_ERR(rate_node); + goto unlock; + } + info->user_ptr[1] = rate_node; } return 0; @@ -801,6 +866,10 @@ static int devlink_nl_rate_fill(struct sk_buff *msg, if (nla_put_u32(msg, DEVLINK_ATTR_PORT_INDEX, devlink_rate->devlink_port->index)) goto nla_put_failure; + } else if (devlink_rate_is_node(devlink_rate)) { + if (nla_put_string(msg, DEVLINK_ATTR_RATE_NODE_NAME, + devlink_rate->name)) + goto nla_put_failure; } if (nla_put_u64_64bit(msg, DEVLINK_ATTR_RATE_TX_SHARE, @@ -1513,8 +1582,12 @@ static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, if (attrs[DEVLINK_ATTR_RATE_TX_SHARE]) { rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_SHARE]); - err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, - rate, info->extack); + if (devlink_rate_is_leaf(devlink_rate)) + err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, + rate, info->extack); + else if (devlink_rate_is_node(devlink_rate)) + err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, + rate, info->extack); if (err) return err; devlink_rate->tx_share = rate; @@ -1522,8 +1595,12 @@ static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, if (attrs[DEVLINK_ATTR_RATE_TX_MAX]) { rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_MAX]); - err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, - rate, info->extack); + if (devlink_rate_is_leaf(devlink_rate)) + err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, + rate, info->extack); + else if (devlink_rate_is_node(devlink_rate)) + err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, + rate, info->extack); if (err) return err; devlink_rate->tx_max = rate; @@ -1547,6 +1624,15 @@ static bool devlink_rate_set_ops_supported(const struct devlink_ops *ops, NL_SET_ERR_MSG_MOD(info->extack, "TX max set isn't supported for the leafs"); return false; } + } else if (type == DEVLINK_RATE_TYPE_NODE) { + if (attrs[DEVLINK_ATTR_RATE_TX_SHARE] && !ops->rate_node_tx_share_set) { + NL_SET_ERR_MSG_MOD(info->extack, "TX share set isn't supported for the nodes"); + return false; + } + if (attrs[DEVLINK_ATTR_RATE_TX_MAX] && !ops->rate_node_tx_max_set) { + NL_SET_ERR_MSG_MOD(info->extack, "TX max set isn't supported for the nodes"); + return false; + } } else { WARN_ON("Unknown type of rate object"); return false; @@ -1573,6 +1659,78 @@ static int devlink_nl_cmd_rate_set_doit(struct sk_buff *skb, return err; } +static int devlink_nl_cmd_rate_new_doit(struct sk_buff *skb, + struct genl_info *info) +{ + struct devlink *devlink = info->user_ptr[0]; + struct devlink_rate *rate_node; + const struct devlink_ops *ops; + int err; + + ops = devlink->ops; + if (!ops || !ops->rate_node_new || !ops->rate_node_del) { + NL_SET_ERR_MSG_MOD(info->extack, "Rate nodes aren't supported"); + return -EOPNOTSUPP; + } + + if (!devlink_rate_set_ops_supported(ops, info, DEVLINK_RATE_TYPE_NODE)) + return -EOPNOTSUPP; + + rate_node = devlink_rate_node_get_from_attrs(devlink, info->attrs); + if (!IS_ERR(rate_node)) + return -EEXIST; + else if (rate_node == ERR_PTR(-EINVAL)) + return -EINVAL; + + rate_node = kzalloc(sizeof(*rate_node), GFP_KERNEL); + if (!rate_node) + return -ENOMEM; + + rate_node->devlink = devlink; + rate_node->type = DEVLINK_RATE_TYPE_NODE; + rate_node->name = nla_strdup(info->attrs[DEVLINK_ATTR_RATE_NODE_NAME], GFP_KERNEL); + if (!rate_node->name) { + err = -ENOMEM; + goto err_strdup; + } + + err = ops->rate_node_new(rate_node, &rate_node->priv, info->extack); + if (err) + goto err_node_new; + + err = devlink_nl_rate_set(rate_node, ops, info); + if (err) + goto err_rate_set; + + list_add(&rate_node->list, &devlink->rate_list); + devlink_rate_notify(rate_node, DEVLINK_CMD_RATE_NEW); + return 0; + +err_rate_set: + ops->rate_node_del(rate_node, rate_node->priv, info->extack); +err_node_new: + kfree(rate_node->name); +err_strdup: + kfree(rate_node); + return err; +} + +static int devlink_nl_cmd_rate_del_doit(struct sk_buff *skb, + struct genl_info *info) +{ + struct devlink_rate *rate_node = info->user_ptr[1]; + struct devlink *devlink = rate_node->devlink; + const struct devlink_ops *ops = devlink->ops; + int err; + + devlink_rate_notify(rate_node, DEVLINK_CMD_RATE_DEL); + err = ops->rate_node_del(rate_node, rate_node->priv, info->extack); + list_del(&rate_node->list); + kfree(rate_node->name); + kfree(rate_node); + return err; +} + static int devlink_nl_sb_fill(struct sk_buff *msg, struct devlink *devlink, struct devlink_sb *devlink_sb, enum devlink_command cmd, u32 portid, @@ -2441,6 +2599,30 @@ static int devlink_nl_cmd_eswitch_get_doit(struct sk_buff *skb, return genlmsg_reply(msg, info); } +static int devlink_rate_nodes_check(struct devlink *devlink, u16 mode, + struct netlink_ext_ack *extack) +{ + struct devlink_rate *devlink_rate; + u16 old_mode; + int err; + + if (!devlink->ops->eswitch_mode_get) + return -EOPNOTSUPP; + err = devlink->ops->eswitch_mode_get(devlink, &old_mode); + if (err) + return err; + + if (old_mode == mode) + return 0; + + list_for_each_entry(devlink_rate, &devlink->rate_list, list) + if (devlink_rate_is_node(devlink_rate)) { + NL_SET_ERR_MSG_MOD(extack, "Rate node(s) exists."); + return -EBUSY; + } + return 0; +} + static int devlink_nl_cmd_eswitch_set_doit(struct sk_buff *skb, struct genl_info *info) { @@ -2455,6 +2637,9 @@ static int devlink_nl_cmd_eswitch_set_doit(struct sk_buff *skb, if (!ops->eswitch_mode_set) return -EOPNOTSUPP; mode = nla_get_u16(info->attrs[DEVLINK_ATTR_ESWITCH_MODE]); + err = devlink_rate_nodes_check(devlink, mode, info->extack); + if (err) + return err; err = ops->eswitch_mode_set(devlink, mode, info->extack); if (err) return err; @@ -8038,6 +8223,7 @@ static int devlink_nl_cmd_trap_policer_set_doit(struct sk_buff *skb, [DEVLINK_ATTR_RATE_TYPE] = { .type = NLA_U16 }, [DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64 }, [DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64 }, + [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING }, }; static const struct genl_small_ops devlink_nl_ops[] = { @@ -8077,6 +8263,17 @@ static int devlink_nl_cmd_trap_policer_set_doit(struct sk_buff *skb, .internal_flags = DEVLINK_NL_FLAG_NEED_RATE, }, { + .cmd = DEVLINK_CMD_RATE_NEW, + .doit = devlink_nl_cmd_rate_new_doit, + .flags = GENL_ADMIN_PERM, + }, + { + .cmd = DEVLINK_CMD_RATE_DEL, + .doit = devlink_nl_cmd_rate_del_doit, + .flags = GENL_ADMIN_PERM, + .internal_flags = DEVLINK_NL_FLAG_NEED_RATE_NODE, + }, + { .cmd = DEVLINK_CMD_PORT_SPLIT, .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .doit = devlink_nl_cmd_port_split_doit, -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes 2021-04-21 15:52 ` [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes dlinkin @ 2021-04-21 21:31 ` kernel test robot 2021-04-21 21:32 ` kernel test robot 2021-04-23 9:37 ` Dan Carpenter 2 siblings, 0 replies; 7+ messages in thread From: kernel test robot @ 2021-04-21 21:31 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 3782 bytes --] Hi, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on net-next/master] url: https://github.com/0day-ci/linux/commits/dlinkin-nvidia-com/devlink-rate-objects-API/20210421-235552 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git a926c025d56bb1acd8a192fca0e307331ee91b30 config: arm-randconfig-r036-20210421 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project d87b9b81ccb95217181ce75515c6c68bbb408ca4) 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/ddc9bb1d01c107824714706f9fbd6264b8eb4b38 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review dlinkin-nvidia-com/devlink-rate-objects-API/20210421-235552 git checkout ddc9bb1d01c107824714706f9fbd6264b8eb4b38 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=arm If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> net/core/devlink.c:1588:12: warning: variable 'err' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] else if (devlink_rate_is_node(devlink_rate)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/devlink.c:1591:7: note: uninitialized use occurs here if (err) ^~~ net/core/devlink.c:1588:8: note: remove the 'if' if its condition is always true else if (devlink_rate_is_node(devlink_rate)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/devlink.c:1581:9: note: initialize the variable 'err' to silence this warning int err; ^ = 0 1 warning generated. vim +1588 net/core/devlink.c 1574 1575 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, 1576 const struct devlink_ops *ops, 1577 struct genl_info *info) 1578 { 1579 struct nlattr **attrs = info->attrs; 1580 u64 rate; 1581 int err; 1582 1583 if (attrs[DEVLINK_ATTR_RATE_TX_SHARE]) { 1584 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_SHARE]); 1585 if (devlink_rate_is_leaf(devlink_rate)) 1586 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, 1587 rate, info->extack); > 1588 else if (devlink_rate_is_node(devlink_rate)) 1589 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, 1590 rate, info->extack); 1591 if (err) 1592 return err; 1593 devlink_rate->tx_share = rate; 1594 } 1595 1596 if (attrs[DEVLINK_ATTR_RATE_TX_MAX]) { 1597 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_MAX]); 1598 if (devlink_rate_is_leaf(devlink_rate)) 1599 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, 1600 rate, info->extack); 1601 else if (devlink_rate_is_node(devlink_rate)) 1602 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, 1603 rate, info->extack); 1604 if (err) 1605 return err; 1606 devlink_rate->tx_max = rate; 1607 } 1608 1609 return 0; 1610 } 1611 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 34045 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes 2021-04-21 15:52 ` [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes dlinkin 2021-04-21 21:31 ` kernel test robot @ 2021-04-21 21:32 ` kernel test robot 2021-04-23 9:37 ` Dan Carpenter 2 siblings, 0 replies; 7+ messages in thread From: kernel test robot @ 2021-04-21 21:32 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 3782 bytes --] Hi, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on net-next/master] url: https://github.com/0day-ci/linux/commits/dlinkin-nvidia-com/devlink-rate-objects-API/20210421-235552 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git a926c025d56bb1acd8a192fca0e307331ee91b30 config: mips-randconfig-r031-20210421 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project d87b9b81ccb95217181ce75515c6c68bbb408ca4) 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 mips cross compiling tool for clang build # apt-get install binutils-mips-linux-gnu # https://github.com/0day-ci/linux/commit/ddc9bb1d01c107824714706f9fbd6264b8eb4b38 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review dlinkin-nvidia-com/devlink-rate-objects-API/20210421-235552 git checkout ddc9bb1d01c107824714706f9fbd6264b8eb4b38 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=mips If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> net/core/devlink.c:1588:12: warning: variable 'err' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] else if (devlink_rate_is_node(devlink_rate)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/devlink.c:1591:7: note: uninitialized use occurs here if (err) ^~~ net/core/devlink.c:1588:8: note: remove the 'if' if its condition is always true else if (devlink_rate_is_node(devlink_rate)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/devlink.c:1581:9: note: initialize the variable 'err' to silence this warning int err; ^ = 0 1 warning generated. vim +1588 net/core/devlink.c 1574 1575 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, 1576 const struct devlink_ops *ops, 1577 struct genl_info *info) 1578 { 1579 struct nlattr **attrs = info->attrs; 1580 u64 rate; 1581 int err; 1582 1583 if (attrs[DEVLINK_ATTR_RATE_TX_SHARE]) { 1584 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_SHARE]); 1585 if (devlink_rate_is_leaf(devlink_rate)) 1586 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, 1587 rate, info->extack); > 1588 else if (devlink_rate_is_node(devlink_rate)) 1589 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, 1590 rate, info->extack); 1591 if (err) 1592 return err; 1593 devlink_rate->tx_share = rate; 1594 } 1595 1596 if (attrs[DEVLINK_ATTR_RATE_TX_MAX]) { 1597 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_MAX]); 1598 if (devlink_rate_is_leaf(devlink_rate)) 1599 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, 1600 rate, info->extack); 1601 else if (devlink_rate_is_node(devlink_rate)) 1602 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, 1603 rate, info->extack); 1604 if (err) 1605 return err; 1606 devlink_rate->tx_max = rate; 1607 } 1608 1609 return 0; 1610 } 1611 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 39154 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes 2021-04-21 15:52 ` [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes dlinkin @ 2021-04-23 9:37 ` Dan Carpenter 2021-04-21 21:32 ` kernel test robot 2021-04-23 9:37 ` Dan Carpenter 2 siblings, 0 replies; 7+ messages in thread From: Dan Carpenter @ 2021-04-23 9:37 UTC (permalink / raw) To: kbuild [-- Attachment #1: Type: text/plain, Size: 3870 bytes --] Hi, url: https://github.com/0day-ci/linux/commits/dlinkin-nvidia-com/devlink-rate-objects-API/20210421-235552 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git a926c025d56bb1acd8a192fca0e307331ee91b30 config: x86_64-randconfig-m001-20210421 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> New smatch warnings: net/core/devlink.c:1591 devlink_nl_rate_set() error: uninitialized symbol 'err'. Old smatch warnings: net/core/devlink.c:1604 devlink_nl_rate_set() error: uninitialized symbol 'err'. net/core/devlink.c:6364 devlink_fmsg_prepare_skb() error: uninitialized symbol 'err'. vim +/err +1591 net/core/devlink.c 709d06045321cd Dmytro Linkin 2021-04-21 1575 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, 709d06045321cd Dmytro Linkin 2021-04-21 1576 const struct devlink_ops *ops, 709d06045321cd Dmytro Linkin 2021-04-21 1577 struct genl_info *info) 709d06045321cd Dmytro Linkin 2021-04-21 1578 { 709d06045321cd Dmytro Linkin 2021-04-21 1579 struct nlattr **attrs = info->attrs; 709d06045321cd Dmytro Linkin 2021-04-21 1580 u64 rate; 709d06045321cd Dmytro Linkin 2021-04-21 1581 int err; 709d06045321cd Dmytro Linkin 2021-04-21 1582 709d06045321cd Dmytro Linkin 2021-04-21 1583 if (attrs[DEVLINK_ATTR_RATE_TX_SHARE]) { 709d06045321cd Dmytro Linkin 2021-04-21 1584 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_SHARE]); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1585 if (devlink_rate_is_leaf(devlink_rate)) 709d06045321cd Dmytro Linkin 2021-04-21 1586 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, 709d06045321cd Dmytro Linkin 2021-04-21 1587 rate, info->extack); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1588 else if (devlink_rate_is_node(devlink_rate)) ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1589 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1590 rate, info->extack); No else path. Is there something else besides leafs and nodes? 709d06045321cd Dmytro Linkin 2021-04-21 @1591 if (err) 709d06045321cd Dmytro Linkin 2021-04-21 1592 return err; 709d06045321cd Dmytro Linkin 2021-04-21 1593 devlink_rate->tx_share = rate; 709d06045321cd Dmytro Linkin 2021-04-21 1594 } 709d06045321cd Dmytro Linkin 2021-04-21 1595 709d06045321cd Dmytro Linkin 2021-04-21 1596 if (attrs[DEVLINK_ATTR_RATE_TX_MAX]) { 709d06045321cd Dmytro Linkin 2021-04-21 1597 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_MAX]); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1598 if (devlink_rate_is_leaf(devlink_rate)) 709d06045321cd Dmytro Linkin 2021-04-21 1599 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, 709d06045321cd Dmytro Linkin 2021-04-21 1600 rate, info->extack); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1601 else if (devlink_rate_is_node(devlink_rate)) ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1602 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1603 rate, info->extack); 709d06045321cd Dmytro Linkin 2021-04-21 1604 if (err) 709d06045321cd Dmytro Linkin 2021-04-21 1605 return err; 709d06045321cd Dmytro Linkin 2021-04-21 1606 devlink_rate->tx_max = rate; 709d06045321cd Dmytro Linkin 2021-04-21 1607 } 709d06045321cd Dmytro Linkin 2021-04-21 1608 709d06045321cd Dmytro Linkin 2021-04-21 1609 return 0; 709d06045321cd Dmytro Linkin 2021-04-21 1610 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 33141 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes @ 2021-04-23 9:37 ` Dan Carpenter 0 siblings, 0 replies; 7+ messages in thread From: Dan Carpenter @ 2021-04-23 9:37 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 3870 bytes --] Hi, url: https://github.com/0day-ci/linux/commits/dlinkin-nvidia-com/devlink-rate-objects-API/20210421-235552 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git a926c025d56bb1acd8a192fca0e307331ee91b30 config: x86_64-randconfig-m001-20210421 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> New smatch warnings: net/core/devlink.c:1591 devlink_nl_rate_set() error: uninitialized symbol 'err'. Old smatch warnings: net/core/devlink.c:1604 devlink_nl_rate_set() error: uninitialized symbol 'err'. net/core/devlink.c:6364 devlink_fmsg_prepare_skb() error: uninitialized symbol 'err'. vim +/err +1591 net/core/devlink.c 709d06045321cd Dmytro Linkin 2021-04-21 1575 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, 709d06045321cd Dmytro Linkin 2021-04-21 1576 const struct devlink_ops *ops, 709d06045321cd Dmytro Linkin 2021-04-21 1577 struct genl_info *info) 709d06045321cd Dmytro Linkin 2021-04-21 1578 { 709d06045321cd Dmytro Linkin 2021-04-21 1579 struct nlattr **attrs = info->attrs; 709d06045321cd Dmytro Linkin 2021-04-21 1580 u64 rate; 709d06045321cd Dmytro Linkin 2021-04-21 1581 int err; 709d06045321cd Dmytro Linkin 2021-04-21 1582 709d06045321cd Dmytro Linkin 2021-04-21 1583 if (attrs[DEVLINK_ATTR_RATE_TX_SHARE]) { 709d06045321cd Dmytro Linkin 2021-04-21 1584 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_SHARE]); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1585 if (devlink_rate_is_leaf(devlink_rate)) 709d06045321cd Dmytro Linkin 2021-04-21 1586 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, 709d06045321cd Dmytro Linkin 2021-04-21 1587 rate, info->extack); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1588 else if (devlink_rate_is_node(devlink_rate)) ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1589 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1590 rate, info->extack); No else path. Is there something else besides leafs and nodes? 709d06045321cd Dmytro Linkin 2021-04-21 @1591 if (err) 709d06045321cd Dmytro Linkin 2021-04-21 1592 return err; 709d06045321cd Dmytro Linkin 2021-04-21 1593 devlink_rate->tx_share = rate; 709d06045321cd Dmytro Linkin 2021-04-21 1594 } 709d06045321cd Dmytro Linkin 2021-04-21 1595 709d06045321cd Dmytro Linkin 2021-04-21 1596 if (attrs[DEVLINK_ATTR_RATE_TX_MAX]) { 709d06045321cd Dmytro Linkin 2021-04-21 1597 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_MAX]); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1598 if (devlink_rate_is_leaf(devlink_rate)) 709d06045321cd Dmytro Linkin 2021-04-21 1599 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, 709d06045321cd Dmytro Linkin 2021-04-21 1600 rate, info->extack); ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1601 else if (devlink_rate_is_node(devlink_rate)) ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1602 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1603 rate, info->extack); 709d06045321cd Dmytro Linkin 2021-04-21 1604 if (err) 709d06045321cd Dmytro Linkin 2021-04-21 1605 return err; 709d06045321cd Dmytro Linkin 2021-04-21 1606 devlink_rate->tx_max = rate; 709d06045321cd Dmytro Linkin 2021-04-21 1607 } 709d06045321cd Dmytro Linkin 2021-04-21 1608 709d06045321cd Dmytro Linkin 2021-04-21 1609 return 0; 709d06045321cd Dmytro Linkin 2021-04-21 1610 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 33141 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes 2021-04-23 9:37 ` Dan Carpenter (?) @ 2021-04-23 10:26 ` Dmytro Linkin -1 siblings, 0 replies; 7+ messages in thread From: Dmytro Linkin @ 2021-04-23 10:26 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 4579 bytes --] On 4/23/21 12:37 PM, Dan Carpenter wrote: > Hi, > > url: https://github.com/0day-ci/linux/commits/dlinkin-nvidia-com/devlink-rate-objects-API/20210421-235552 > base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git a926c025d56bb1acd8a192fca0e307331ee91b30 > config: x86_64-randconfig-m001-20210421 (attached as .config) > compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 > > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot <lkp@intel.com> > Reported-by: Dan Carpenter <dan.carpenter@oracle.com> > > New smatch warnings: > net/core/devlink.c:1591 devlink_nl_rate_set() error: uninitialized symbol 'err'. > > Old smatch warnings: > net/core/devlink.c:1604 devlink_nl_rate_set() error: uninitialized symbol 'err'. > net/core/devlink.c:6364 devlink_fmsg_prepare_skb() error: uninitialized symbol 'err'. > > vim +/err +1591 net/core/devlink.c > > 709d06045321cd Dmytro Linkin 2021-04-21 1575 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, > 709d06045321cd Dmytro Linkin 2021-04-21 1576 const struct devlink_ops *ops, > 709d06045321cd Dmytro Linkin 2021-04-21 1577 struct genl_info *info) > 709d06045321cd Dmytro Linkin 2021-04-21 1578 { > 709d06045321cd Dmytro Linkin 2021-04-21 1579 struct nlattr **attrs = info->attrs; > 709d06045321cd Dmytro Linkin 2021-04-21 1580 u64 rate; > 709d06045321cd Dmytro Linkin 2021-04-21 1581 int err; > 709d06045321cd Dmytro Linkin 2021-04-21 1582 > 709d06045321cd Dmytro Linkin 2021-04-21 1583 if (attrs[DEVLINK_ATTR_RATE_TX_SHARE]) { > 709d06045321cd Dmytro Linkin 2021-04-21 1584 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_SHARE]); > ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1585 if (devlink_rate_is_leaf(devlink_rate)) > 709d06045321cd Dmytro Linkin 2021-04-21 1586 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, > 709d06045321cd Dmytro Linkin 2021-04-21 1587 rate, info->extack); > ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1588 else if (devlink_rate_is_node(devlink_rate)) > ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1589 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, > ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1590 rate, info->extack); > > No else path. Is there something else besides leafs and nodes? Hi, Before call of devlink_nl_rate_set() check for valid type is done, so only leafs and nodes are allowed. I'll init 'err' to EOPNOTSUPP in next version. > > 709d06045321cd Dmytro Linkin 2021-04-21 @1591 if (err) > 709d06045321cd Dmytro Linkin 2021-04-21 1592 return err; > 709d06045321cd Dmytro Linkin 2021-04-21 1593 devlink_rate->tx_share = rate; > 709d06045321cd Dmytro Linkin 2021-04-21 1594 } > 709d06045321cd Dmytro Linkin 2021-04-21 1595 > 709d06045321cd Dmytro Linkin 2021-04-21 1596 if (attrs[DEVLINK_ATTR_RATE_TX_MAX]) { > 709d06045321cd Dmytro Linkin 2021-04-21 1597 rate = nla_get_u64(attrs[DEVLINK_ATTR_RATE_TX_MAX]); > ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1598 if (devlink_rate_is_leaf(devlink_rate)) > 709d06045321cd Dmytro Linkin 2021-04-21 1599 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, > 709d06045321cd Dmytro Linkin 2021-04-21 1600 rate, info->extack); > ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1601 else if (devlink_rate_is_node(devlink_rate)) > ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1602 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, > ddc9bb1d01c107 Dmytro Linkin 2021-04-21 1603 rate, info->extack); > 709d06045321cd Dmytro Linkin 2021-04-21 1604 if (err) > 709d06045321cd Dmytro Linkin 2021-04-21 1605 return err; > 709d06045321cd Dmytro Linkin 2021-04-21 1606 devlink_rate->tx_max = rate; > 709d06045321cd Dmytro Linkin 2021-04-21 1607 } > 709d06045321cd Dmytro Linkin 2021-04-21 1608 > 709d06045321cd Dmytro Linkin 2021-04-21 1609 return 0; > 709d06045321cd Dmytro Linkin 2021-04-21 1610 } > > --- > 0-DAY CI Kernel Test Service, Intel Corporation > https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.01.org%2Fhyperkitty%2Flist%2Fkbuild-all%40lists.01.org&data=04%7C01%7Cdlinkin%40nvidia.com%7C8c709dcce03841a6914408d9063b6baf%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637547674608679060%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=E8ybPHv3M1s1qkbEVssXjBWG72Il1bJEHFay5UhrZUw%3D&reserved=0 > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-04-23 10:26 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-04-21 22:27 [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes kernel test robot -- strict thread matches above, loose matches on Subject: below -- 2021-04-21 15:52 [PATCH RESEND-2 RFC net-next 00/18] devlink: rate objects API dlinkin 2021-04-21 15:52 ` [PATCH RESEND-2 RFC net-next 12/18] devlink: Introduce rate nodes dlinkin 2021-04-21 21:31 ` kernel test robot 2021-04-21 21:32 ` kernel test robot 2021-04-23 9:37 ` Dan Carpenter 2021-04-23 9:37 ` Dan Carpenter 2021-04-23 10:26 ` Dmytro Linkin
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.