• Marcel Apfelbaum's avatar
    net/mlx4_core: Fix number of EQs used in ICM initialisation · 3fc929e2
    Marcel Apfelbaum authored
    In SRIOV mode, the number of EQs used when computing the total ICM size
    was incorrect.
    
    To fix this, we do the following:
    1. We add a new structure to mlx4_dev, mlx4_phys_caps, to contain physical HCA
       capabilities.  The PPF uses the phys capabilities when it computes things
       like ICM size.
    
       The dev_caps structure will then contain the paravirtualized values, making
       bookkeeping much easier in SRIOV mode. We add a structure rather than a
       single parameter because there will be other fields in the phys_caps.
    
       The first field we add to the mlx4_phys_caps structure is num_phys_eqs.
    
    2. In INIT_HCA, when running in SRIOV mode, the "log_num_eqs" parameter
       passed to the FW is the number of EQs per VF/PF; each function (PF or VF)
       has this number of EQs available.
    
       However, the total number of EQs which must be allowed for in the ICM is
       (1 << log_num_eqs) * (#VFs + #PFs).  Rather than compute this quantity,
       we allocate ICM space for 1024 EQs (which is the device maximum
       number of EQs, and which is the value we place in the mlx4_phys_caps structure).
    
       For INIT_HCA, however, we use the per-function number of EQs as described
       above.
    Signed-off-by: default avatarMarcel Apfelbaum <marcela@dev.mellanox.co.il>
    Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
    Reviewed-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3fc929e2
main.c 60.7 KB