* 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
* 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
* 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-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-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
* [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
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.