• Maxim Mikityanskiy's avatar
    net/mlx5e: Introduce select queue parameters · 8bf30be7
    Maxim Mikityanskiy authored
    ndo_select_queue can be called at any time, and there is no way to stop
    the kernel from calling it to synchronize with configuration changes
    (real_num_tx_queues, num_tc). This commit introduces an internal way in
    mlx5e to sync mlx5e_select_queue() with these changes. The configuration
    needed by this function is stored in a struct mlx5e_selq_params, which
    is modified and accessed in an atomic way using RCU methods. The whole
    ndo_select_queue is called under an RCU lock, providing the necessary
    guarantees.
    
    The parameters stored in the new struct mlx5e_selq_params should only be
    used from inside mlx5e_select_queue. It's the minimal set of parameters
    needed for mlx5e_select_queue to do its job efficiently, derived from
    parameters stored elsewhere. That means that when the configuration
    change, mlx5e_selq_params may need to be updated. In such cases, the
    mlx5e_selq_prepare/mlx5e_selq_apply API should be used.
    
    struct mlx5e_selq contains two slots for the params: active and standby.
    mlx5e_selq_prepare updates the standby slot, and mlx5e_selq_apply swaps
    the slots in a safe atomic way using the RCU API. It integrates well
    with the open/activate stages of the configuration change flow.
    Signed-off-by: default avatarMaxim Mikityanskiy <maximmi@nvidia.com>
    Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
    8bf30be7
Makefile 4.28 KB