Skip to content
  • Matan Barak's avatar
    net/mlx5: Use offset based reserved field names in the IFC header file · b4ff3a36
    Matan Barak authored
    
    
    mlx5_ifc.h is a header file representing the API and ABI between
    the driver to the firmware and hardware. This file is used from
    both the mlx5_ib and mlx5_core drivers.
    
    Previously, this file used incrementing counter to indicate
    reserved fields, for example:
    
    struct mlx5_ifc_odp_per_transport_service_cap_bits {
            u8         send[0x1];
            u8         receive[0x1];
            u8         write[0x1];
            u8         read[0x1];
            u8         reserved_0[0x1];
            u8         srq_receive[0x1];
            u8         reserved_1[0x1a];
    };
    
    If one developer implements through net-next feature A that uses
    reserved_0, they replace it with featureA and renames reserved_1 to
    reserved_0. In the same kernel cycle, a 2nd developer could implement
    feature B through the rdma tree, that uses reserved_1 and split it to
    featureB and a smaller reserved_1 field. This will cause a conflict
    when the two trees are merged.
    
    The source of this conflict is that the 1st developer changed *all*
    reserved fields.
    
    As Linus suggested, we change the layout of structs to:
    
    struct mlx5_ifc_odp_per_transport_service_cap_bits {
    	u8         send[0x1];
    	u8         receive[0x1];
    	u8         write[0x1];
    	u8         read[0x1];
    	u8         reserved_at_4[0x1];
    	u8         srq_receive[0x1];
    	u8         reserved_at_6[0x1a];
    };
    
    This makes the conflicts much more rare and preserves the locality of
    changes.
    
    Signed-off-by: default avatarMatan Barak <matanb@mellanox.com>
    Signed-off-by: default avatarAlaa Hleihel <alaa@mellanox.com>
    Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b4ff3a36