lkml.org 
[lkml]   [2019]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 010/306] net/mlx5: Fix auto group size calculation
    Date
    From: Maor Gottlieb <maorg@mellanox.com>

    [ Upstream commit 97fd8da281f80e7e69e0114bc906575734d4dfaf ]

    Once all the large flow groups (defined by the user when the flow table
    is created - max_num_groups) were created, then all the following new
    flow groups will have only one flow table entry, even though the flow table
    has place to larger groups.
    Fix the condition to prefer large flow group.

    Fixes: f0d22d187473 ("net/mlx5_core: Introduce flow steering autogrouped flow table")
    Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
    Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 10 ++++++----
    drivers/net/ethernet/mellanox/mlx5/core/fs_core.h | 1 +
    2 files changed, 7 insertions(+), 4 deletions(-)

    --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
    @@ -520,7 +520,7 @@ static void del_sw_flow_group(struct fs_

    rhashtable_destroy(&fg->ftes_hash);
    ida_destroy(&fg->fte_allocator);
    - if (ft->autogroup.active)
    + if (ft->autogroup.active && fg->max_ftes == ft->autogroup.group_size)
    ft->autogroup.num_groups--;
    err = rhltable_remove(&ft->fgs_hash,
    &fg->hash,
    @@ -1065,6 +1065,8 @@ mlx5_create_auto_grouped_flow_table(stru

    ft->autogroup.active = true;
    ft->autogroup.required_groups = max_num_groups;
    + /* We save place for flow groups in addition to max types */
    + ft->autogroup.group_size = ft->max_fte / (max_num_groups + 1);

    return ft;
    }
    @@ -1270,8 +1272,7 @@ static struct mlx5_flow_group *alloc_aut
    return ERR_PTR(-ENOENT);

    if (ft->autogroup.num_groups < ft->autogroup.required_groups)
    - /* We save place for flow groups in addition to max types */
    - group_size = ft->max_fte / (ft->autogroup.required_groups + 1);
    + group_size = ft->autogroup.group_size;

    /* ft->max_fte == ft->autogroup.max_types */
    if (group_size == 0)
    @@ -1298,7 +1299,8 @@ static struct mlx5_flow_group *alloc_aut
    if (IS_ERR(fg))
    goto out;

    - ft->autogroup.num_groups++;
    + if (group_size == ft->autogroup.group_size)
    + ft->autogroup.num_groups++;

    out:
    return fg;
    --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.h
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.h
    @@ -121,6 +121,7 @@ struct mlx5_flow_table {
    struct {
    bool active;
    unsigned int required_groups;
    + unsigned int group_size;
    unsigned int num_groups;
    } autogroup;
    /* Protect fwd_rules */

    \
     
     \ /
      Last update: 2019-11-27 21:57    [W:2.831 / U:0.352 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site