linux/drivers/infiniband/hw/hns
Jason Gunthorpe 14351f08ed RDMA/hns: Work around broken constant propagation in gcc 8
gcc 8.3 and 5.4 throw this:

In function 'modify_qp_init_to_rtr',
././include/linux/compiler_types.h:322:38: error: call to '__compiletime_assert_1859' declared with attribute error: FIELD_PREP: value too large for the field
  _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
[..]
drivers/infiniband/hw/hns/hns_roce_common.h:91:52: note: in expansion of macro 'FIELD_PREP'
   *((__le32 *)ptr + (field_h) / 32) |= cpu_to_le32(FIELD_PREP(   \
                                                    ^~~~~~~~~~
drivers/infiniband/hw/hns/hns_roce_common.h:95:39: note: in expansion of macro '_hr_reg_write'
 #define hr_reg_write(ptr, field, val) _hr_reg_write(ptr, field, val)
                                       ^~~~~~~~~~~~~
drivers/infiniband/hw/hns/hns_roce_hw_v2.c:4412:2: note: in expansion of macro 'hr_reg_write'
  hr_reg_write(context, QPC_LP_PKTN_INI, lp_pktn_ini);

Because gcc has miscalculated the constantness of lp_pktn_ini:

	mtu = ib_mtu_enum_to_int(ib_mtu);
	if (WARN_ON(mtu < 0)) [..]
	lp_pktn_ini = ilog2(MAX_LP_MSG_LEN / mtu);

Since mtu is limited to {256,512,1024,2048,4096} lp_pktn_ini is between 4
and 8 which is compatible with the 4 bit field in the FIELD_PREP.

Work around this broken compiler by adding a 'can never be true'
constraint on lp_pktn_ini's value which clears out the problem.

Fixes: f0cb411aad ("RDMA/hns: Use new interface to modify QP context")
Link: https://lore.kernel.org/r/0-v1-c773ecb137bc+11f-hns_gcc8_jgg@nvidia.com
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2021-09-24 08:47:55 -03:00
..
hns_roce_ah.c RDMA/hns: Avoid filling sl in high 3 bits of vlan_id 2020-12-11 15:21:34 -04:00
hns_roce_alloc.c RDMA/hns: Delete unused hns bitmap interface 2021-08-24 09:15:17 -03:00
hns_roce_cmd.c RDMA/hns: Fix the double unlock problem of poll_sem 2021-08-03 13:42:44 -03:00
hns_roce_cmd.h RDMA/hns: Fix incorrect symbol types 2020-12-11 15:21:35 -04:00
hns_roce_common.h RDMA/hns: Add hr_reg_write_bool() 2021-06-21 15:03:41 -03:00
hns_roce_cq.c RDMA/hns: Use refcount_t instead of atomic_t for CQ reference counting 2021-06-08 14:56:11 -03:00
hns_roce_db.c RDMA: Use the sg_table directly and remove the opencoded version from umem 2021-08-24 19:52:40 -03:00
hns_roce_device.h RDMA/hns: Bugfix for incorrect association between dip_idx and dgid 2021-08-25 13:55:30 -03:00
hns_roce_hem.c RDMA: Fix kernel-doc warnings about wrong comment 2021-06-21 20:32:50 -03:00
hns_roce_hem.h RDMA/hns: Clean the hardware related code for HEM 2021-05-28 20:13:58 -03:00
hns_roce_hw_v1.c RDMA/hns: Don't skip IB creation flow for regular RC QP 2021-08-03 13:44:26 -03:00
hns_roce_hw_v1.h RDMA/hns: Clean the hardware related code for HEM 2021-05-28 20:13:58 -03:00
hns_roce_hw_v2_dfx.c RDMA/hns: Dump detailed driver-specific CQ 2019-04-08 13:05:25 -03:00
hns_roce_hw_v2.c RDMA/hns: Work around broken constant propagation in gcc 8 2021-09-24 08:47:55 -03:00
hns_roce_hw_v2.h RDMA/hns: Delete unnecessary blank lines. 2021-08-26 12:12:21 -03:00
hns_roce_main.c Merge branch 'sg_nents' into rdma.git for-next 2021-08-30 09:49:59 -03:00
hns_roce_mr.c RDMA/hns: Fix return in hns_roce_rereg_user_mr() 2021-08-19 11:12:04 -03:00
hns_roce_pd.c RDMA/hns: Use IDA interface to manage uar index 2021-08-24 09:15:16 -03:00
hns_roce_qp.c RDMA/hns: Delete unnecessary blank lines. 2021-08-26 12:12:21 -03:00
hns_roce_restrack.c RDMA: Add a dedicated CQ resource tracker function 2020-06-23 11:46:27 -03:00
hns_roce_srq.c RDMA/hns: Use IDA interface to manage srq index 2021-08-24 09:15:16 -03:00
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile RDMA/hns: Fix build error again 2019-10-29 16:16:54 -03:00