• Jack Morgenstein's avatar
    net/mlx4_core: Fix SRIOV free-pool management when enforcing resource quotas · 95646373
    Jack Morgenstein authored
    The Hypervisor driver tracks free slots and reserved slots at the global level
    and tracks allocated slots and guaranteed slots per VF.
    
    Guaranteed slots are treated as reserved by the driver, so the total
    reserved slots is the sum of all guaranteed slots over all the VFs.
    
    As VFs allocate resources, free (global) is decremented and allocated (per VF)
    is incremented for those resources. However, reserved (global) is never changed.
    
    This means that effectively, when a VF allocates a resource from its
    guaranteed pool, it is actually reducing that resource's free pool (since
    the global reserved count was not also reduced).
    
    The fix for this problem is the following: For each resource, as long as a
    VF's allocated count is <= its guaranteed number, when allocating for that
    VF, the reserved count (global) should be reduced by the allocation as well.
    
    When the global reserved count reaches zero, the remaining global free count
    is still accessible as the free pool for that resource.
    
    When the VF frees resources, the reverse happens: the global reserved count
    for a resource is incremented only once the VFs allocated number falls below
    its guaranteed number.
    
    This fix was developed by Rick Kready <kready@us.ibm.com>
    Reported-by: default avatarRick Kready <kready@us.ibm.com>
    Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
    Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    95646373
resource_tracker.c 118 KB