• Vlad Buslov's avatar
    net/mlx5e: Extend tc flow struct with reference counter · 5a7e5bcb
    Vlad Buslov authored
    With new classifier type that doesn't require rtnl lock, following
    invariant holds:
     - Filter with specified cookie created only once.
     - Filter with specified cookie deleted only once.
     - Stats updates can be performed in parallel to each other.
    
    Extend tc flow with rcu and reference counter. To protect from concurrent
    delete, get reference to tc flow when:
     - Reading flow stats.
     - Accessing flow in neigh update handler.
     - Accessing flow in neigh update used value handler.
    
    Only free flow when reference counter reached zero. Modify flow cleanup to
    account for flows that could be not fully initialized by checking if flow
    is actually in the list of corresponding mod_hdr, hairpin and encap
    entries. Don't cleanup flow directly in case of error to allow concurrent
    neigh update (neigh update will be modified to always take reference to
    flow when using it).
    Signed-off-by: default avatarVlad Buslov <vladbu@mellanox.com>
    Reviewed-by: default avatarJianbo Liu <jianbol@mellanox.com>
    Reviewed-by: default avatarRoi Dayan <roid@mellanox.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
    5a7e5bcb
en_tc.c 101 KB