* Re: [PATCH net-next] devlink: Simplify devlink port API calls
@ 2021-08-09 8:21 kernel test robot
2021-08-09 10:54 ` kernel test robot
0 siblings, 1 reply; 4+ messages in thread
From: kernel test robot @ 2021-08-09 8:21 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 15698 bytes --]
CC: clang-built-linux(a)googlegroups.com
CC: kbuild-all(a)lists.01.org
In-Reply-To: <c9f15f122181f05f09fffd2380365b9925dd6427.1628422645.git.leonro@nvidia.com>
References: <c9f15f122181f05f09fffd2380365b9925dd6427.1628422645.git.leonro@nvidia.com>
TO: Leon Romanovsky <leon@kernel.org>
Hi Leon,
I love your patch! Perhaps something to improve:
[auto build test WARNING on net-next/master]
url: https://github.com/0day-ci/linux/commits/Leon-Romanovsky/devlink-Simplify-devlink-port-API-calls/20210808-194343
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git f9be84db09d2e8930319503683305781378a7dbf
:::::: branch date: 21 hours ago
:::::: commit date: 21 hours ago
config: x86_64-randconfig-c001-20210808 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 41a6b50c25961addc04438b567ee1f4ef9e40f98)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/30335171ca292d93926e3606fde0a3e76cf792a0
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Leon-Romanovsky/devlink-Simplify-devlink-port-API-calls/20210808-194343
git checkout 30335171ca292d93926e3606fde0a3e76cf792a0
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
fs/fuse/dev.c:1677:14: note: '?' condition is false
num_pages = min(num_pages, fc->max_pages);
^
include/linux/minmax.h:45:19: note: expanded from macro 'min'
#define min(x, y) __careful_cmp(x, y, <)
^
include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
__cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
^
include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
__cmp(unique_x, unique_y, op); })
^
include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
#define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
^
fs/fuse/dev.c:1681:7: note: Calling 'kzalloc'
ra = kzalloc(args_size, GFP_KERNEL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/slab.h:721:9: note: Uninitialized value stored to field 'num_pages'
return kmalloc(size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/slab.h:721:2: note: Returning pointer, which participates in a condition later
return kmalloc(size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/fuse/dev.c:1681:7: note: Returning from 'kzalloc'
ra = kzalloc(args_size, GFP_KERNEL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/fuse/dev.c:1682:6: note: Assuming 'ra' is non-null
if (!ra)
^~~
fs/fuse/dev.c:1682:2: note: Taking false branch
if (!ra)
^
fs/fuse/dev.c:1698:9: note: Assuming 'num' is not equal to 0
while (num && ap->num_pages < num_pages) {
^~~
fs/fuse/dev.c:1698:9: note: Left side of '&&' is true
fs/fuse/dev.c:1698:30: note: The left operand of '<' is a garbage value
while (num && ap->num_pages < num_pages) {
~~~~~~~~~~~~~ ^
Suppressed 6 warnings (6 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
11 warnings generated.
Suppressed 11 warnings (11 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
11 warnings generated.
Suppressed 11 warnings (11 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
11 warnings generated.
net/core/net-sysfs.c:1719:2: warning: Value stored to 'txq' is never read [clang-analyzer-deadcode.DeadStores]
txq = real_tx;
^ ~~~~~~~
net/core/net-sysfs.c:1719:2: note: Value stored to 'txq' is never read
txq = real_tx;
^ ~~~~~~~
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
60 warnings generated.
Suppressed 60 warnings (58 in non-user code, 2 with check filters).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
70 warnings generated.
>> net/core/devlink.c:1283:8: warning: Called function pointer is null (null dereference) [clang-analyzer-core.CallAndMessage]
err = devlink_port->devlink->ops->port_type_set(devlink_port,
^
net/core/devlink.c:1383:6: note: Assuming the condition is true
if (info->attrs[DEVLINK_ATTR_PORT_TYPE]) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:1383:2: note: Taking true branch
if (info->attrs[DEVLINK_ATTR_PORT_TYPE]) {
^
net/core/devlink.c:1387:9: note: Calling 'devlink_port_type_set'
err = devlink_port_type_set(devlink_port, port_type);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:1277:6: note: Assuming field 'port_type_set' is null
if (devlink_port->devlink->ops->port_type_set)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:1277:2: note: Taking false branch
if (devlink_port->devlink->ops->port_type_set)
^
net/core/devlink.c:1280:6: note: Assuming 'port_type' is not equal to field 'type'
if (port_type == devlink_port->type)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:1280:2: note: Taking false branch
if (port_type == devlink_port->type)
^
net/core/devlink.c:1283:8: note: Called function pointer is null (null dereference)
err = devlink_port->devlink->ops->port_type_set(devlink_port,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:4316:15: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc]
if (!strcmp(param_item->param->name, param_name))
^
net/core/devlink.c:9956:9: note: Calling '__devlink_params_unregister'
return __devlink_params_unregister(devlink_port->devlink,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:9838:14: note: Assuming 'i' is < 'params_count'
for (i = 0; i < params_count; i++, param++)
^~~~~~~~~~~~~~~~
net/core/devlink.c:9838:2: note: Loop condition is true. Entering loop body
for (i = 0; i < params_count; i++, param++)
^
net/core/devlink.c:9839:3: note: Calling 'devlink_param_unregister_one'
devlink_param_unregister_one(devlink, 0, param_list, param,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:4805:11: note: 'param_item' is non-null
WARN_ON(!param_item);
^
include/asm-generic/bug.h:121:25: note: expanded from macro 'WARN_ON'
int __ret_warn_on = !!(condition); \
^~~~~~~~~
net/core/devlink.c:4805:2: note: Taking false branch
WARN_ON(!param_item);
^
include/asm-generic/bug.h:122:2: note: expanded from macro 'WARN_ON'
if (unlikely(__ret_warn_on)) \
^
net/core/devlink.c:4808:2: note: Memory is released
kfree(param_item);
^~~~~~~~~~~~~~~~~
net/core/devlink.c:9839:3: note: Returning; memory was released
devlink_param_unregister_one(devlink, 0, param_list, param,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:9838:14: note: Assuming 'i' is < 'params_count'
for (i = 0; i < params_count; i++, param++)
^~~~~~~~~~~~~~~~
net/core/devlink.c:9838:2: note: Loop condition is true. Entering loop body
for (i = 0; i < params_count; i++, param++)
^
net/core/devlink.c:9839:3: note: Calling 'devlink_param_unregister_one'
devlink_param_unregister_one(devlink, 0, param_list, param,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:4804:15: note: Calling 'devlink_param_find_by_name'
param_item = devlink_param_find_by_name(param_list, param->name);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:4315:2: note: Left side of '&&' is false
list_for_each_entry(param_item, param_list, list)
^
include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
for (pos = list_first_entry(head, typeof(*pos), member); \
^
include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
list_entry((ptr)->next, type, member)
^
include/linux/list.h:511:2: note: expanded from macro 'list_entry'
container_of(ptr, type, member)
^
include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^
net/core/devlink.c:4315:2: note: Taking false branch
list_for_each_entry(param_item, param_list, list)
^
include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
for (pos = list_first_entry(head, typeof(*pos), member); \
^
include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
list_entry((ptr)->next, type, member)
^
include/linux/list.h:511:2: note: expanded from macro 'list_entry'
container_of(ptr, type, member)
^
note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert'
vim +1283 net/core/devlink.c
bfcd3a46617209 Jiri Pirko 2016-02-26 1270
30335171ca292d Leon Romanovsky 2021-08-08 1271 static int devlink_port_type_set(struct devlink_port *devlink_port,
bfcd3a46617209 Jiri Pirko 2016-02-26 1272 enum devlink_port_type port_type)
bfcd3a46617209 Jiri Pirko 2016-02-26 1273
bfcd3a46617209 Jiri Pirko 2016-02-26 1274 {
bfcd3a46617209 Jiri Pirko 2016-02-26 1275 int err;
bfcd3a46617209 Jiri Pirko 2016-02-26 1276
30335171ca292d Leon Romanovsky 2021-08-08 1277 if (devlink_port->devlink->ops->port_type_set)
30335171ca292d Leon Romanovsky 2021-08-08 1278 return -EOPNOTSUPP;
30335171ca292d Leon Romanovsky 2021-08-08 1279
6edf10173a1feb Elad Raz 2016-10-23 1280 if (port_type == devlink_port->type)
6edf10173a1feb Elad Raz 2016-10-23 1281 return 0;
30335171ca292d Leon Romanovsky 2021-08-08 1282
30335171ca292d Leon Romanovsky 2021-08-08 @1283 err = devlink_port->devlink->ops->port_type_set(devlink_port,
30335171ca292d Leon Romanovsky 2021-08-08 1284 port_type);
bfcd3a46617209 Jiri Pirko 2016-02-26 1285 if (err)
bfcd3a46617209 Jiri Pirko 2016-02-26 1286 return err;
30335171ca292d Leon Romanovsky 2021-08-08 1287
bfcd3a46617209 Jiri Pirko 2016-02-26 1288 devlink_port->desired_type = port_type;
bfcd3a46617209 Jiri Pirko 2016-02-26 1289 devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
bfcd3a46617209 Jiri Pirko 2016-02-26 1290 return 0;
bfcd3a46617209 Jiri Pirko 2016-02-26 1291 }
bfcd3a46617209 Jiri Pirko 2016-02-26 1292
---
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: 37390 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH net-next] devlink: Simplify devlink port API calls
2021-08-09 8:21 [PATCH net-next] devlink: Simplify devlink port API calls kernel test robot
@ 2021-08-09 10:54 ` kernel test robot
0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-08-09 10:54 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 15601 bytes --]
Hi Leon,
I love your patch! Perhaps something to improve:
[auto build test WARNING on net-next/master]
url:
https://github.com/0day-ci/linux/commits/Leon-Romanovsky/devlink-Simplify-devlink-port-API-calls/20210808-194343
base:
https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
f9be84db09d2e8930319503683305781378a7dbf
:::::: branch date: 21 hours ago
:::::: commit date: 21 hours ago
config: x86_64-randconfig-c001-20210808 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project
41a6b50c25961addc04438b567ee1f4ef9e40f98)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
#
https://github.com/0day-ci/linux/commit/30335171ca292d93926e3606fde0a3e76cf792a0
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Leon-Romanovsky/devlink-Simplify-devlink-port-API-calls/20210808-194343
git checkout 30335171ca292d93926e3606fde0a3e76cf792a0
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross
ARCH=x86_64 clang-analyzer
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
fs/fuse/dev.c:1677:14: note: '?' condition is false
num_pages = min(num_pages, fc->max_pages);
^
include/linux/minmax.h:45:19: note: expanded from macro 'min'
#define min(x, y) __careful_cmp(x, y, <)
^
include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
__cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y),
op))
^
include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
__cmp(unique_x, unique_y, op); })
^
include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
#define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
^
fs/fuse/dev.c:1681:7: note: Calling 'kzalloc'
ra = kzalloc(args_size, GFP_KERNEL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/slab.h:721:9: note: Uninitialized value stored to
field 'num_pages'
return kmalloc(size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/slab.h:721:2: note: Returning pointer, which
participates in a condition later
return kmalloc(size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/fuse/dev.c:1681:7: note: Returning from 'kzalloc'
ra = kzalloc(args_size, GFP_KERNEL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/fuse/dev.c:1682:6: note: Assuming 'ra' is non-null
if (!ra)
^~~
fs/fuse/dev.c:1682:2: note: Taking false branch
if (!ra)
^
fs/fuse/dev.c:1698:9: note: Assuming 'num' is not equal to 0
while (num && ap->num_pages < num_pages) {
^~~
fs/fuse/dev.c:1698:9: note: Left side of '&&' is true
fs/fuse/dev.c:1698:30: note: The left operand of '<' is a garbage value
while (num && ap->num_pages < num_pages) {
~~~~~~~~~~~~~ ^
Suppressed 6 warnings (6 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
11 warnings generated.
Suppressed 11 warnings (11 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
11 warnings generated.
Suppressed 11 warnings (11 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
11 warnings generated.
net/core/net-sysfs.c:1719:2: warning: Value stored to 'txq' is never
read [clang-analyzer-deadcode.DeadStores]
txq = real_tx;
^ ~~~~~~~
net/core/net-sysfs.c:1719:2: note: Value stored to 'txq' is never read
txq = real_tx;
^ ~~~~~~~
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
60 warnings generated.
Suppressed 60 warnings (58 in non-user code, 2 with check filters).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
9 warnings generated.
Suppressed 9 warnings (9 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
10 warnings generated.
Suppressed 10 warnings (10 in non-user code).
Use -header-filter=.* to display errors from all non-system headers.
Use -system-headers to display errors from system headers as well.
70 warnings generated.
>> net/core/devlink.c:1283:8: warning: Called function pointer is null (null dereference) [clang-analyzer-core.CallAndMessage]
err = devlink_port->devlink->ops->port_type_set(devlink_port,
^
net/core/devlink.c:1383:6: note: Assuming the condition is true
if (info->attrs[DEVLINK_ATTR_PORT_TYPE]) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:1383:2: note: Taking true branch
if (info->attrs[DEVLINK_ATTR_PORT_TYPE]) {
^
net/core/devlink.c:1387:9: note: Calling 'devlink_port_type_set'
err = devlink_port_type_set(devlink_port, port_type);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:1277:6: note: Assuming field 'port_type_set' is null
if (devlink_port->devlink->ops->port_type_set)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:1277:2: note: Taking false branch
if (devlink_port->devlink->ops->port_type_set)
^
net/core/devlink.c:1280:6: note: Assuming 'port_type' is not equal
to field 'type'
if (port_type == devlink_port->type)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:1280:2: note: Taking false branch
if (port_type == devlink_port->type)
^
net/core/devlink.c:1283:8: note: Called function pointer is null
(null dereference)
err = devlink_port->devlink->ops->port_type_set(devlink_port,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:4316:15: warning: Use of memory after it is freed
[clang-analyzer-unix.Malloc]
if (!strcmp(param_item->param->name, param_name))
^
net/core/devlink.c:9956:9: note: Calling '__devlink_params_unregister'
return __devlink_params_unregister(devlink_port->devlink,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:9838:14: note: Assuming 'i' is < 'params_count'
for (i = 0; i < params_count; i++, param++)
^~~~~~~~~~~~~~~~
net/core/devlink.c:9838:2: note: Loop condition is true. Entering
loop body
for (i = 0; i < params_count; i++, param++)
^
net/core/devlink.c:9839:3: note: Calling 'devlink_param_unregister_one'
devlink_param_unregister_one(devlink, 0, param_list,
param,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:4805:11: note: 'param_item' is non-null
WARN_ON(!param_item);
^
include/asm-generic/bug.h:121:25: note: expanded from macro 'WARN_ON'
int __ret_warn_on = !!(condition);
\
^~~~~~~~~
net/core/devlink.c:4805:2: note: Taking false branch
WARN_ON(!param_item);
^
include/asm-generic/bug.h:122:2: note: expanded from macro 'WARN_ON'
if (unlikely(__ret_warn_on))
\
^
net/core/devlink.c:4808:2: note: Memory is released
kfree(param_item);
^~~~~~~~~~~~~~~~~
net/core/devlink.c:9839:3: note: Returning; memory was released
devlink_param_unregister_one(devlink, 0, param_list,
param,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:9838:14: note: Assuming 'i' is < 'params_count'
for (i = 0; i < params_count; i++, param++)
^~~~~~~~~~~~~~~~
net/core/devlink.c:9838:2: note: Loop condition is true. Entering
loop body
for (i = 0; i < params_count; i++, param++)
^
net/core/devlink.c:9839:3: note: Calling 'devlink_param_unregister_one'
devlink_param_unregister_one(devlink, 0, param_list,
param,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:4804:15: note: Calling 'devlink_param_find_by_name'
param_item = devlink_param_find_by_name(param_list,
param->name);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/devlink.c:4315:2: note: Left side of '&&' is false
list_for_each_entry(param_item, param_list, list)
^
include/linux/list.h:628:13: note: expanded from macro
'list_for_each_entry'
for (pos = list_first_entry(head, typeof(*pos), member);
\
^
include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
list_entry((ptr)->next, type, member)
^
include/linux/list.h:511:2: note: expanded from macro 'list_entry'
container_of(ptr, type, member)
^
include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member)
&& \
^
net/core/devlink.c:4315:2: note: Taking false branch
list_for_each_entry(param_item, param_list, list)
^
include/linux/list.h:628:13: note: expanded from macro
'list_for_each_entry'
for (pos = list_first_entry(head, typeof(*pos), member);
\
^
include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
list_entry((ptr)->next, type, member)
^
include/linux/list.h:511:2: note: expanded from macro 'list_entry'
container_of(ptr, type, member)
^
note: (skipping 2 expansions in backtrace; use
-fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:328:2: note: expanded from macro
'compiletime_assert'
vim +1283 net/core/devlink.c
bfcd3a46617209 Jiri Pirko 2016-02-26 1270 30335171ca292d Leon
Romanovsky 2021-08-08 1271 static int devlink_port_type_set(struct
devlink_port *devlink_port,
bfcd3a46617209 Jiri Pirko 2016-02-26 1272 enum
devlink_port_type port_type)
bfcd3a46617209 Jiri Pirko 2016-02-26 1273 bfcd3a46617209 Jiri
Pirko 2016-02-26 1274 {
bfcd3a46617209 Jiri Pirko 2016-02-26 1275 int err;
bfcd3a46617209 Jiri Pirko 2016-02-26 1276 30335171ca292d Leon
Romanovsky 2021-08-08 1277 if (devlink_port->devlink->ops->port_type_set)
30335171ca292d Leon Romanovsky 2021-08-08 1278 return -EOPNOTSUPP;
30335171ca292d Leon Romanovsky 2021-08-08 1279 6edf10173a1feb Elad Raz
2016-10-23 1280 if (port_type == devlink_port->type)
6edf10173a1feb Elad Raz 2016-10-23 1281 return 0;
30335171ca292d Leon Romanovsky 2021-08-08 1282 30335171ca292d Leon
Romanovsky 2021-08-08 @1283 err =
devlink_port->devlink->ops->port_type_set(devlink_port,
30335171ca292d Leon Romanovsky 2021-08-08 1284 port_type);
bfcd3a46617209 Jiri Pirko 2016-02-26 1285 if (err)
bfcd3a46617209 Jiri Pirko 2016-02-26 1286 return err;
30335171ca292d Leon Romanovsky 2021-08-08 1287 bfcd3a46617209 Jiri
Pirko 2016-02-26 1288 devlink_port->desired_type = port_type;
bfcd3a46617209 Jiri Pirko 2016-02-26 1289
devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
bfcd3a46617209 Jiri Pirko 2016-02-26 1290 return 0;
bfcd3a46617209 Jiri Pirko 2016-02-26 1291 }
bfcd3a46617209 Jiri Pirko 2016-02-26 1292
---
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: 37390 bytes --]
[-- Attachment #3: AttachedMessagePart.ksh --]
[-- Type: text/plain, Size: 150 bytes --]
_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-leave@lists.01.org
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH net-next] devlink: Simplify devlink port API calls
@ 2021-08-08 11:41 Leon Romanovsky
2021-08-08 12:00 ` patchwork-bot+netdevbpf
0 siblings, 1 reply; 4+ messages in thread
From: Leon Romanovsky @ 2021-08-08 11:41 UTC (permalink / raw)
To: David S . Miller, Jakub Kicinski
Cc: Leon Romanovsky, Jiri Pirko, linux-kernel, netdev, Saeed Mahameed
From: Leon Romanovsky <leonro@nvidia.com>
Devlink port already has pointer to the devlink instance and all API
calls that forward these devlink ports to the drivers perform same
"devlink_port->devlink" assignment before actual call.
This patch removes useless parameter and allows us in the future
to create specific devlink_port_ops to manage user space access with
reliable ops assignment.
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
.../net/ethernet/mellanox/mlx5/core/eswitch.c | 10 +-
.../net/ethernet/mellanox/mlx5/core/eswitch.h | 6 +-
.../ethernet/mellanox/mlx5/core/sf/devlink.c | 8 +-
.../net/ethernet/mellanox/mlx5/core/sf/sf.h | 4 +-
include/net/devlink.h | 12 +--
net/core/devlink.c | 95 +++++++++----------
6 files changed, 64 insertions(+), 71 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
index 97e6cb6f13c1..2b90388ef209 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
@@ -1889,8 +1889,7 @@ is_port_function_supported(struct mlx5_eswitch *esw, u16 vport_num)
mlx5_esw_is_sf_vport(esw, vport_num);
}
-int mlx5_devlink_port_function_hw_addr_get(struct devlink *devlink,
- struct devlink_port *port,
+int mlx5_devlink_port_function_hw_addr_get(struct devlink_port *port,
u8 *hw_addr, int *hw_addr_len,
struct netlink_ext_ack *extack)
{
@@ -1899,7 +1898,7 @@ int mlx5_devlink_port_function_hw_addr_get(struct devlink *devlink,
int err = -EOPNOTSUPP;
u16 vport_num;
- esw = mlx5_devlink_eswitch_get(devlink);
+ esw = mlx5_devlink_eswitch_get(port->devlink);
if (IS_ERR(esw))
return PTR_ERR(esw);
@@ -1923,8 +1922,7 @@ int mlx5_devlink_port_function_hw_addr_get(struct devlink *devlink,
return err;
}
-int mlx5_devlink_port_function_hw_addr_set(struct devlink *devlink,
- struct devlink_port *port,
+int mlx5_devlink_port_function_hw_addr_set(struct devlink_port *port,
const u8 *hw_addr, int hw_addr_len,
struct netlink_ext_ack *extack)
{
@@ -1933,7 +1931,7 @@ int mlx5_devlink_port_function_hw_addr_set(struct devlink *devlink,
int err = -EOPNOTSUPP;
u16 vport_num;
- esw = mlx5_devlink_eswitch_get(devlink);
+ esw = mlx5_devlink_eswitch_get(port->devlink);
if (IS_ERR(esw)) {
NL_SET_ERR_MSG_MOD(extack, "Eswitch doesn't support set hw_addr");
return PTR_ERR(esw);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
index d562edf5b0bc..41eff9dd1bf6 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
@@ -475,12 +475,10 @@ int mlx5_devlink_eswitch_encap_mode_set(struct devlink *devlink,
struct netlink_ext_ack *extack);
int mlx5_devlink_eswitch_encap_mode_get(struct devlink *devlink,
enum devlink_eswitch_encap_mode *encap);
-int mlx5_devlink_port_function_hw_addr_get(struct devlink *devlink,
- struct devlink_port *port,
+int mlx5_devlink_port_function_hw_addr_get(struct devlink_port *port,
u8 *hw_addr, int *hw_addr_len,
struct netlink_ext_ack *extack);
-int mlx5_devlink_port_function_hw_addr_set(struct devlink *devlink,
- struct devlink_port *port,
+int mlx5_devlink_port_function_hw_addr_set(struct devlink_port *port,
const u8 *hw_addr, int hw_addr_len,
struct netlink_ext_ack *extack);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c
index 1be048769309..720195c4be7c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c
@@ -164,12 +164,12 @@ static bool mlx5_sf_is_active(const struct mlx5_sf *sf)
return sf->hw_state == MLX5_VHCA_STATE_ACTIVE || sf->hw_state == MLX5_VHCA_STATE_IN_USE;
}
-int mlx5_devlink_sf_port_fn_state_get(struct devlink *devlink, struct devlink_port *dl_port,
+int mlx5_devlink_sf_port_fn_state_get(struct devlink_port *dl_port,
enum devlink_port_fn_state *state,
enum devlink_port_fn_opstate *opstate,
struct netlink_ext_ack *extack)
{
- struct mlx5_core_dev *dev = devlink_priv(devlink);
+ struct mlx5_core_dev *dev = devlink_priv(dl_port->devlink);
struct mlx5_sf_table *table;
struct mlx5_sf *sf;
int err = 0;
@@ -248,11 +248,11 @@ static int mlx5_sf_state_set(struct mlx5_core_dev *dev, struct mlx5_sf_table *ta
return err;
}
-int mlx5_devlink_sf_port_fn_state_set(struct devlink *devlink, struct devlink_port *dl_port,
+int mlx5_devlink_sf_port_fn_state_set(struct devlink_port *dl_port,
enum devlink_port_fn_state state,
struct netlink_ext_ack *extack)
{
- struct mlx5_core_dev *dev = devlink_priv(devlink);
+ struct mlx5_core_dev *dev = devlink_priv(dl_port->devlink);
struct mlx5_sf_table *table;
struct mlx5_sf *sf;
int err;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/sf.h b/drivers/net/ethernet/mellanox/mlx5/core/sf/sf.h
index 81ce13b19ee8..3a480e06ecc0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/sf/sf.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/sf.h
@@ -24,11 +24,11 @@ int mlx5_devlink_sf_port_new(struct devlink *devlink,
unsigned int *new_port_index);
int mlx5_devlink_sf_port_del(struct devlink *devlink, unsigned int port_index,
struct netlink_ext_ack *extack);
-int mlx5_devlink_sf_port_fn_state_get(struct devlink *devlink, struct devlink_port *dl_port,
+int mlx5_devlink_sf_port_fn_state_get(struct devlink_port *dl_port,
enum devlink_port_fn_state *state,
enum devlink_port_fn_opstate *opstate,
struct netlink_ext_ack *extack);
-int mlx5_devlink_sf_port_fn_state_set(struct devlink *devlink, struct devlink_port *dl_port,
+int mlx5_devlink_sf_port_fn_state_set(struct devlink_port *dl_port,
enum devlink_port_fn_state state,
struct netlink_ext_ack *extack);
#else
diff --git a/include/net/devlink.h b/include/net/devlink.h
index 08f4c6191e72..ccbfb3a844aa 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -1396,8 +1396,8 @@ struct devlink_ops {
*
* Note: @extack can be NULL when port notifier queries the port function.
*/
- int (*port_function_hw_addr_get)(struct devlink *devlink, struct devlink_port *port,
- u8 *hw_addr, int *hw_addr_len,
+ int (*port_function_hw_addr_get)(struct devlink_port *port, u8 *hw_addr,
+ int *hw_addr_len,
struct netlink_ext_ack *extack);
/**
* @port_function_hw_addr_set: Port function's hardware address set function.
@@ -1406,7 +1406,7 @@ struct devlink_ops {
* by the devlink port. Driver should return -EOPNOTSUPP if it doesn't support port
* function handling for a particular port.
*/
- int (*port_function_hw_addr_set)(struct devlink *devlink, struct devlink_port *port,
+ int (*port_function_hw_addr_set)(struct devlink_port *port,
const u8 *hw_addr, int hw_addr_len,
struct netlink_ext_ack *extack);
/**
@@ -1462,8 +1462,7 @@ struct devlink_ops {
*
* Return: 0 on success, negative value otherwise.
*/
- int (*port_fn_state_get)(struct devlink *devlink,
- struct devlink_port *port,
+ int (*port_fn_state_get)(struct devlink_port *port,
enum devlink_port_fn_state *state,
enum devlink_port_fn_opstate *opstate,
struct netlink_ext_ack *extack);
@@ -1478,8 +1477,7 @@ struct devlink_ops {
*
* Return: 0 on success, negative value otherwise.
*/
- int (*port_fn_state_set)(struct devlink *devlink,
- struct devlink_port *port,
+ int (*port_fn_state_set)(struct devlink_port *port,
enum devlink_port_fn_state state,
struct netlink_ext_ack *extack);
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 8fa015319af6..ee95eee8d0ed 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -804,10 +804,11 @@ static int devlink_nl_port_attrs_put(struct sk_buff *msg,
return 0;
}
-static int
-devlink_port_fn_hw_addr_fill(struct devlink *devlink, const struct devlink_ops *ops,
- struct devlink_port *port, struct sk_buff *msg,
- struct netlink_ext_ack *extack, bool *msg_updated)
+static int devlink_port_fn_hw_addr_fill(const struct devlink_ops *ops,
+ struct devlink_port *port,
+ struct sk_buff *msg,
+ struct netlink_ext_ack *extack,
+ bool *msg_updated)
{
u8 hw_addr[MAX_ADDR_LEN];
int hw_addr_len;
@@ -816,7 +817,8 @@ devlink_port_fn_hw_addr_fill(struct devlink *devlink, const struct devlink_ops *
if (!ops->port_function_hw_addr_get)
return 0;
- err = ops->port_function_hw_addr_get(devlink, port, hw_addr, &hw_addr_len, extack);
+ err = ops->port_function_hw_addr_get(port, hw_addr, &hw_addr_len,
+ extack);
if (err) {
if (err == -EOPNOTSUPP)
return 0;
@@ -893,12 +895,11 @@ devlink_port_fn_opstate_valid(enum devlink_port_fn_opstate opstate)
opstate == DEVLINK_PORT_FN_OPSTATE_ATTACHED;
}
-static int
-devlink_port_fn_state_fill(struct devlink *devlink,
- const struct devlink_ops *ops,
- struct devlink_port *port, struct sk_buff *msg,
- struct netlink_ext_ack *extack,
- bool *msg_updated)
+static int devlink_port_fn_state_fill(const struct devlink_ops *ops,
+ struct devlink_port *port,
+ struct sk_buff *msg,
+ struct netlink_ext_ack *extack,
+ bool *msg_updated)
{
enum devlink_port_fn_opstate opstate;
enum devlink_port_fn_state state;
@@ -907,7 +908,7 @@ devlink_port_fn_state_fill(struct devlink *devlink,
if (!ops->port_fn_state_get)
return 0;
- err = ops->port_fn_state_get(devlink, port, &state, &opstate, extack);
+ err = ops->port_fn_state_get(port, &state, &opstate, extack);
if (err) {
if (err == -EOPNOTSUPP)
return 0;
@@ -935,7 +936,6 @@ static int
devlink_nl_port_function_attrs_put(struct sk_buff *msg, struct devlink_port *port,
struct netlink_ext_ack *extack)
{
- struct devlink *devlink = port->devlink;
const struct devlink_ops *ops;
struct nlattr *function_attr;
bool msg_updated = false;
@@ -945,13 +945,12 @@ devlink_nl_port_function_attrs_put(struct sk_buff *msg, struct devlink_port *por
if (!function_attr)
return -EMSGSIZE;
- ops = devlink->ops;
- err = devlink_port_fn_hw_addr_fill(devlink, ops, port, msg,
- extack, &msg_updated);
+ ops = port->devlink->ops;
+ err = devlink_port_fn_hw_addr_fill(ops, port, msg, extack,
+ &msg_updated);
if (err)
goto out;
- err = devlink_port_fn_state_fill(devlink, ops, port, msg, extack,
- &msg_updated);
+ err = devlink_port_fn_state_fill(ops, port, msg, extack, &msg_updated);
out:
if (err || !msg_updated)
nla_nest_cancel(msg, function_attr);
@@ -1269,31 +1268,33 @@ static int devlink_nl_cmd_port_get_dumpit(struct sk_buff *msg,
return msg->len;
}
-static int devlink_port_type_set(struct devlink *devlink,
- struct devlink_port *devlink_port,
+static int devlink_port_type_set(struct devlink_port *devlink_port,
enum devlink_port_type port_type)
{
int err;
- if (devlink->ops->port_type_set) {
- if (port_type == devlink_port->type)
- return 0;
- err = devlink->ops->port_type_set(devlink_port, port_type);
- if (err)
- return err;
- devlink_port->desired_type = port_type;
- devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
+ if (devlink_port->devlink->ops->port_type_set)
+ return -EOPNOTSUPP;
+
+ if (port_type == devlink_port->type)
return 0;
- }
- return -EOPNOTSUPP;
+
+ err = devlink_port->devlink->ops->port_type_set(devlink_port,
+ port_type);
+ if (err)
+ return err;
+
+ devlink_port->desired_type = port_type;
+ devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
+ return 0;
}
-static int
-devlink_port_function_hw_addr_set(struct devlink *devlink, struct devlink_port *port,
- const struct nlattr *attr, struct netlink_ext_ack *extack)
+static int devlink_port_function_hw_addr_set(struct devlink_port *port,
+ const struct nlattr *attr,
+ struct netlink_ext_ack *extack)
{
- const struct devlink_ops *ops;
+ const struct devlink_ops *ops = port->devlink->ops;
const u8 *hw_addr;
int hw_addr_len;
@@ -1314,17 +1315,16 @@ devlink_port_function_hw_addr_set(struct devlink *devlink, struct devlink_port *
}
}
- ops = devlink->ops;
if (!ops->port_function_hw_addr_set) {
NL_SET_ERR_MSG_MOD(extack, "Port doesn't support function attributes");
return -EOPNOTSUPP;
}
- return ops->port_function_hw_addr_set(devlink, port, hw_addr, hw_addr_len, extack);
+ return ops->port_function_hw_addr_set(port, hw_addr, hw_addr_len,
+ extack);
}
-static int devlink_port_fn_state_set(struct devlink *devlink,
- struct devlink_port *port,
+static int devlink_port_fn_state_set(struct devlink_port *port,
const struct nlattr *attr,
struct netlink_ext_ack *extack)
{
@@ -1332,18 +1332,18 @@ static int devlink_port_fn_state_set(struct devlink *devlink,
const struct devlink_ops *ops;
state = nla_get_u8(attr);
- ops = devlink->ops;
+ ops = port->devlink->ops;
if (!ops->port_fn_state_set) {
NL_SET_ERR_MSG_MOD(extack,
"Function does not support state setting");
return -EOPNOTSUPP;
}
- return ops->port_fn_state_set(devlink, port, state, extack);
+ return ops->port_fn_state_set(port, state, extack);
}
-static int
-devlink_port_function_set(struct devlink *devlink, struct devlink_port *port,
- const struct nlattr *attr, struct netlink_ext_ack *extack)
+static int devlink_port_function_set(struct devlink_port *port,
+ const struct nlattr *attr,
+ struct netlink_ext_ack *extack)
{
struct nlattr *tb[DEVLINK_PORT_FUNCTION_ATTR_MAX + 1];
int err;
@@ -1357,7 +1357,7 @@ devlink_port_function_set(struct devlink *devlink, struct devlink_port *port,
attr = tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR];
if (attr) {
- err = devlink_port_function_hw_addr_set(devlink, port, attr, extack);
+ err = devlink_port_function_hw_addr_set(port, attr, extack);
if (err)
return err;
}
@@ -1367,7 +1367,7 @@ devlink_port_function_set(struct devlink *devlink, struct devlink_port *port,
*/
attr = tb[DEVLINK_PORT_FN_ATTR_STATE];
if (attr)
- err = devlink_port_fn_state_set(devlink, port, attr, extack);
+ err = devlink_port_fn_state_set(port, attr, extack);
if (!err)
devlink_port_notify(port, DEVLINK_CMD_PORT_NEW);
@@ -1378,14 +1378,13 @@ static int devlink_nl_cmd_port_set_doit(struct sk_buff *skb,
struct genl_info *info)
{
struct devlink_port *devlink_port = info->user_ptr[1];
- struct devlink *devlink = devlink_port->devlink;
int err;
if (info->attrs[DEVLINK_ATTR_PORT_TYPE]) {
enum devlink_port_type port_type;
port_type = nla_get_u16(info->attrs[DEVLINK_ATTR_PORT_TYPE]);
- err = devlink_port_type_set(devlink, devlink_port, port_type);
+ err = devlink_port_type_set(devlink_port, port_type);
if (err)
return err;
}
@@ -1394,7 +1393,7 @@ static int devlink_nl_cmd_port_set_doit(struct sk_buff *skb,
struct nlattr *attr = info->attrs[DEVLINK_ATTR_PORT_FUNCTION];
struct netlink_ext_ack *extack = info->extack;
- err = devlink_port_function_set(devlink, devlink_port, attr, extack);
+ err = devlink_port_function_set(devlink_port, attr, extack);
if (err)
return err;
}
--
2.31.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH net-next] devlink: Simplify devlink port API calls
2021-08-08 11:41 Leon Romanovsky
@ 2021-08-08 12:00 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-08-08 12:00 UTC (permalink / raw)
To: Leon Romanovsky; +Cc: davem, kuba, leonro, jiri, linux-kernel, netdev, saeedm
Hello:
This patch was applied to netdev/net-next.git (refs/heads/master):
On Sun, 8 Aug 2021 14:41:21 +0300 you wrote:
> From: Leon Romanovsky <leonro@nvidia.com>
>
> Devlink port already has pointer to the devlink instance and all API
> calls that forward these devlink ports to the drivers perform same
> "devlink_port->devlink" assignment before actual call.
>
> This patch removes useless parameter and allows us in the future
> to create specific devlink_port_ops to manage user space access with
> reliable ops assignment.
>
> [...]
Here is the summary with links:
- [net-next] devlink: Simplify devlink port API calls
https://git.kernel.org/netdev/net-next/c/82564f6c706a
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-08-09 10:54 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-08-09 8:21 [PATCH net-next] devlink: Simplify devlink port API calls kernel test robot
2021-08-09 10:54 ` kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2021-08-08 11:41 Leon Romanovsky
2021-08-08 12:00 ` patchwork-bot+netdevbpf
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.