• Tom Herbert's avatar
    net/mlx5: Add MLX5_ARRAY_SET64 to fix BUILD_BUG_ON · b8a4ddb2
    Tom Herbert authored
    I am hitting this in mlx5:
    
    drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c: In function
    reclaim_pages_cmd.clone.0:
    drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c:346: error: call
    to __compiletime_assert_346 declared with attribute error:
    BUILD_BUG_ON failed: __mlx5_bit_off(manage_pages_out, pas[i]) % 64
    drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c: In function give_pages:
    drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c:291: error: call
    to __compiletime_assert_291 declared with attribute error:
    BUILD_BUG_ON failed: __mlx5_bit_off(manage_pages_in, pas[i]) % 64
    
    Problem is that this is doing a BUILD_BUG_ON on a non-constant
    expression because of trying to take offset of pas[i] in the
    structure.
    
    Fix is to create MLX5_ARRAY_SET64 that takes an additional argument
    that is the field index to separate between BUILD_BUG_ON on the array
    constant field and the indexed field to assign the value to.
    There are two callers of MLX5_SET64 that are trying to get a variable
    offset, change those to call MLX5_ARRAY_SET64 passing 'pas' and 'i'
    as the arguments to use in the offset check and the indexed value
    assignment.
    
    Fixes: a533ed5e ("net/mlx5: Pages management commands via mlx5 ifc")
    Signed-off-by: default avatarTom Herbert <tom@herbertland.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b8a4ddb2
pagealloc.c 14 KB