mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 09:14:19 +08:00
IB/verbs: avoid nested container_of()
Nested container_of() calls work correctly but cause a warning when
building with W=2. Invoking it from an inline function like in
drivers/infiniband/hw/mlx5/mlx5_ib.h means we get hundreds of warnings
like:
include/linux/kernel.h:852:8: warning: declaration of '__mptr' shadows a previous local [-Wshadow]
852 | void *__mptr = (void *)(ptr); \
| ^~~~~~
include/rdma/uverbs_ioctl.h:651:11: note: in expansion of macro 'container_of'
651 | (udata ? container_of(container_of(udata, struct uverbs_attr_bundle, \
| ^~~~~~~~~~~~
include/rdma/uverbs_ioctl.h:651:24: note: in expansion of macro 'container_of'
651 | (udata ? container_of(container_of(udata, struct uverbs_attr_bundle, \
| ^~~~~~~~~~~~
drivers/infiniband/hw/mthca/mthca_qp.c:564:35: note: in expansion of macro 'rdma_udata_to_drv_context'
564 | struct mthca_ucontext *context = rdma_udata_to_drv_context(
| ^~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/kernel.h:852:8: note: shadowed declaration is here
852 | void *__mptr = (void *)(ptr); \
| ^~~~~~
include/rdma/uverbs_ioctl.h:651:11: note: in expansion of macro 'container_of'
651 | (udata ? container_of(container_of(udata, struct uverbs_attr_bundle, \
| ^~~~~~~~~~~~
drivers/infiniband/hw/mthca/mthca_qp.c:564:35: note: in expansion of macro 'rdma_udata_to_drv_context'
564 | struct mthca_ucontext *context = rdma_udata_to_drv_context(
| ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from <command-line>:
include/linux/kernel.h:852:8: warning: declaration of '__mptr' shadows a previous local [-Wshadow]
852 | void *__mptr = (void *)(ptr); \
| ^~~~~~
Rewrite the macro to use an inline function internally, which makes it
more readable and reduces the amount of useless output from make W=2.
Fixes: 730623f4a5
("IB/verbs: Add helper function rdma_udata_to_drv_context")
Link: https://lore.kernel.org/r/20201026161549.3709175-1-arnd@kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
b898d5c50c
commit
bfb972c5e1
@ -647,12 +647,15 @@ static inline bool uverbs_attr_is_valid(const struct uverbs_attr_bundle *attrs_b
|
||||
* 'ucontext'.
|
||||
*
|
||||
*/
|
||||
#define rdma_udata_to_drv_context(udata, drv_dev_struct, member) \
|
||||
(udata ? container_of(container_of(udata, struct uverbs_attr_bundle, \
|
||||
driver_udata) \
|
||||
->context, \
|
||||
drv_dev_struct, member) : \
|
||||
(drv_dev_struct *)NULL)
|
||||
static inline struct uverbs_attr_bundle *
|
||||
rdma_udata_to_uverbs_attr_bundle(struct ib_udata *udata)
|
||||
{
|
||||
return container_of(udata, struct uverbs_attr_bundle, driver_udata);
|
||||
}
|
||||
|
||||
#define rdma_udata_to_drv_context(udata, drv_dev_struct, member) \
|
||||
(udata ? container_of(rdma_udata_to_uverbs_attr_bundle(udata)->context, \
|
||||
drv_dev_struct, member) : (drv_dev_struct *)NULL)
|
||||
|
||||
#define IS_UVERBS_COPY_ERR(_ret) ((_ret) && (_ret) != -ENOENT)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user