Message ID | 20191002121241.D74DAE04C7@unicorn.suse.cz (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [net] mlx5: avoid 64-bit division in dr_icm_pool_mr_create() | expand |
On 10/2/2019 3:12 PM, Michal Kubecek wrote: > Recently added code introduces 64-bit division in dr_icm_pool_mr_create() > so that build on 32-bit architectures fails with > > ERROR: "__umoddi3" [drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko] undefined! > > As the divisor is always a power of 2, we can use bitwise operation > instead. > > Fixes: 29cf8febd185 ("net/mlx5: DR, ICM pool memory allocator") > Reported-by: Borislav Petkov <bp@alien8.de> > Signed-off-by: Michal Kubecek <mkubecek@suse.cz> > --- > drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c > index 913f1e5aaaf2..d7c7467e2d53 100644 > --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c > +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c > @@ -137,7 +137,8 @@ dr_icm_pool_mr_create(struct mlx5dr_icm_pool *pool, > > icm_mr->icm_start_addr = icm_mr->dm.addr; > > - align_diff = icm_mr->icm_start_addr % align_base; > + /* align_base is always a power of 2 */ > + align_diff = icm_mr->icm_start_addr & (align_base - 1); > if (align_diff) > icm_mr->used_length = align_base - align_diff; > Align diff is power of 2, looks good to me. Thanks for fixing it Michal.
From: Alex Vesker <valex@mellanox.com> Date: Wed, 2 Oct 2019 14:58:44 +0000 > On 10/2/2019 3:12 PM, Michal Kubecek wrote: >> Recently added code introduces 64-bit division in dr_icm_pool_mr_create() >> so that build on 32-bit architectures fails with >> >> ERROR: "__umoddi3" [drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko] undefined! >> >> As the divisor is always a power of 2, we can use bitwise operation >> instead. >> >> Fixes: 29cf8febd185 ("net/mlx5: DR, ICM pool memory allocator") >> Reported-by: Borislav Petkov <bp@alien8.de> >> Signed-off-by: Michal Kubecek <mkubecek@suse.cz> ... > Align diff is power of 2, looks good to me. > Thanks for fixing it Michal. I'll just apply this directly, thanks everyone.
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c index 913f1e5aaaf2..d7c7467e2d53 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c @@ -137,7 +137,8 @@ dr_icm_pool_mr_create(struct mlx5dr_icm_pool *pool, icm_mr->icm_start_addr = icm_mr->dm.addr; - align_diff = icm_mr->icm_start_addr % align_base; + /* align_base is always a power of 2 */ + align_diff = icm_mr->icm_start_addr & (align_base - 1); if (align_diff) icm_mr->used_length = align_base - align_diff;
Recently added code introduces 64-bit division in dr_icm_pool_mr_create() so that build on 32-bit architectures fails with ERROR: "__umoddi3" [drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko] undefined! As the divisor is always a power of 2, we can use bitwise operation instead. Fixes: 29cf8febd185 ("net/mlx5: DR, ICM pool memory allocator") Reported-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Michal Kubecek <mkubecek@suse.cz> --- drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)