From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Hemminger Subject: Re: [iproute] rdma broken on 32 bit Date: Thu, 13 Dec 2018 13:15:02 -0800 Message-ID: <20181213131502.74be6f80@xeon-e3> References: <20181210141020.535f042a@xeon-e3> <20181211173315.GF3933@mtr-leonro.mtl.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; boundary="Sig_/lu/zBYPda/T8aNl1X1I1tHi"; protocol="application/pgp-signature" Cc: David Ahern , "netdev@vger.kernel.org" To: Leon Romanovsky Return-path: Received: from mail-pg1-f195.google.com ([209.85.215.195]:36290 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728920AbeLMVPG (ORCPT ); Thu, 13 Dec 2018 16:15:06 -0500 Received: by mail-pg1-f195.google.com with SMTP id n2so1631095pgm.3 for ; Thu, 13 Dec 2018 13:15:06 -0800 (PST) In-Reply-To: <20181211173315.GF3933@mtr-leonro.mtl.com> Sender: netdev-owner@vger.kernel.org List-ID: --Sig_/lu/zBYPda/T8aNl1X1I1tHi Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Tue, 11 Dec 2018 17:33:19 +0000 Leon Romanovsky wrote: > On Mon, Dec 10, 2018 at 02:10:20PM -0800, Stephen Hemminger wrote: > > It appears that RDMA is broken on 32 bit platforms. > > Sure you don't run on 32bit, but iproute2 needs to build everywhere. > > > > The issue is that you are assuming a C enum can hold 64 bits. > > The standard says enum only has to hold "int" values. > > So it breaks on 32bit. > > > > The issue is deeper than just a trivial fix. Please either change iprou= te > > config script to not build RDMA if sizeof(enum) < 64 or fix the code to > > use a safe value like uint64_t. > > > > rdma > > CC rdma.o > > CC utils.o > > CC dev.o > > CC link.o > > In file included from rdma.h:26:0, > > from dev.c:12: > > dev.c: In function =E2=80=98dev_caps_to_str=E2=80=99: > > ../include/utils.h:269:38: warning: left shift count >=3D width of type= [-Wshift-count-overflow] > > #define BIT(nr) (1UL << (nr)) > > ^ > > rdma.h:32:61: note: in expansion of macro =E2=80=98BIT=E2=80=99 > > #define RDMA_BITMAP_ENUM(name, bit_no) RDMA_BITMAP_##name =3D BIT(bit_= no), > > ^~~ > > If you wade through the macro swamp: > > dev.c > > #define RDMA_DEV_FLAGS(x) \ > > > > x(SG_GAPS_REG, 32) \ > > > > enum { RDMA_DEV_FLAGS(RDMA_BITMAP_ENUM) }; > > > > Expands to: > > enum { > > RDMA_BITMAP_SG_GAPS_REG =3D (1UL << (32)), > > }; > > =20 >=20 > Thanks for the report, I reproduced and will do my best to send patches t= omorrow. Thanks for fixing it so fast. Applied your fix --Sig_/lu/zBYPda/T8aNl1X1I1tHi Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEn2/DRbBb5+dmuDyPgKd/YJXN5H4FAlwSy9YACgkQgKd/YJXN 5H4UcA/9EVoqeT8TTVFUN6SYVQM7+xpXHZHAhmVwxqcHH2S+ywAk0Buk+/PWlULG S6LgmmsjrlWc+XBUrj47Wlo8IbssyAGGckg5St4DFzTgTxzvcbMX4bjtp/BhMhaI kBE3gocwEUpZkjzN2P4ahz8lfr9Ltvcc9ulz2R4q5DFtJ+ie9YFqDLA6K9sqVVe4 2scA2hGU5UBuFLm7aHTupyGRpNgFJxpT+Jr7WLaADs2XZZ6FFPDJG3kFch1wjeWo 0Ql/gRaKng5ihctGc4EUcbE9423MaIdiL2N4V6cUMq049pdfnV4IQuwQLITqG0iS EtpBhTy6JQh8G5ILxAZCPmn20TX6GwsVu/g/8qu9TwH5/6LMORj0vV78hlXc7W2R MO9iQYVmxu08/LPIw2/75505KCs+BHUBUiQI+7A2AQ7tHQ92hCeSDX1M2p6d0p2/ iaEzY26IVeV3uevdS3QPRjn/0iR6Je7s0hnAqJGjvAQjjZNFGBDUPbWnlwGIjgCM KIw48l7LPU+6hEl4zMz68MpIQ0cyogpbylPGglcu20uwGCyGRzeWSb4Yr64f6hN4 91erh2r1VBuVXzCReaGHiRRl1kIfgx6ueMBRl2QrzDMVFxb5u/fbx1YnphngB6LL WD+S2dTrEvaGwXnEir18rxb6PSOOCYu22YDA5KVgmj46Dljj38o= =HyTb -----END PGP SIGNATURE----- --Sig_/lu/zBYPda/T8aNl1X1I1tHi--