linux/drivers/infiniband/hw
Arnd Bergmann 4f33fcc68a IB/mlx5: revisit -Wmaybe-uninitialized warning
[ Upstream commit 1b19b95169 ]

A warning that I thought I had fixed before occasionally comes
back in rare randconfig builds (I found 7 instances in the last
100000 builds, originally it was much more frequent):

drivers/infiniband/hw/mlx5/mr.c: In function 'mlx5_ib_reg_user_mr':
drivers/infiniband/hw/mlx5/mr.c:1229:5: error: 'order' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  if (order <= mr_cache_max_order(dev)) {
     ^
drivers/infiniband/hw/mlx5/mr.c:1247:8: error: 'ncont' may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/infiniband/hw/mlx5/mr.c:1247:8: error: 'page_shift' may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/infiniband/hw/mlx5/mr.c:1260:2: error: 'npages' may be used uninitialized in this function [-Werror=maybe-uninitialized]

I've looked at all those findings again and noticed that they are all
with CONFIG_INFINIBAND_USER_MEM=n, which means ib_umem_get() returns
an error unconditionally and we never initialize or use those variables.
This triggers a condition in gcc iff mr_umem_get() is partially but not
entirely inlined, which in turn depends on the exact combination of
optimization settings. This is a known problem with gcc, with no
easy solution in the compiler, so this adds another workaround that
should be more reliable than my previous attempt.

Returning an error from mlx5_ib_reg_user_mr() earlier means that we
can completely bypass the logic that caused the warning, the compiler
can now see that the variable is never accessed.

Fixes: 14ab8896f5 ("IB/mlx5: avoid bogus -Wmaybe-uninitialized warning")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2018-03-19 08:42:56 +01:00
..
bnxt_re bnxt_re: changing the ip address shouldn't affect new connections 2017-12-14 09:53:14 +01:00
cxgb3 License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cxgb4 iw_cxgb4: when flushing, complete all wrs in a chain 2018-01-17 09:45:19 +01:00
hfi1 IB/hfi1: Initialize bth1 in 16B rc ack builder 2018-02-25 11:07:56 +01:00
hns RDMA/hns: Avoid NULL pointer exception 2017-12-25 14:26:30 +01:00
i40iw i40iw: Correct ARP index mask 2018-02-25 11:07:57 +01:00
mlx4 IB/mlx4: Fix mlx4_ib_alloc_mr error flow 2018-03-03 10:24:32 +01:00
mlx5 IB/mlx5: revisit -Wmaybe-uninitialized warning 2018-03-19 08:42:56 +01:00
mthca License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
nes IB: Correct MR length field to be 64-bit 2017-09-25 11:47:23 -04:00
ocrdma IB/ocrdma: fix incorrect fall-through on switch statement 2017-09-22 13:16:00 -04:00
qedr RDMA/qedr: Parse vlan priority as sl 2017-10-04 15:18:18 -04:00
qib IB/qib: Fix comparison error with qperf compare/swap test 2018-02-22 15:42:14 +01:00
usnic License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
vmw_pvrdma RDMA/vmw_pvrdma: Call ib_umem_release on destroy QP path 2018-03-03 10:24:29 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00