From nobody Wed Nov 22 01:51:57 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4SZkkk0T7Qz51WMQ; Wed, 22 Nov 2023 01:51:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4SZkkj5NXgz3HQd; Wed, 22 Nov 2023 01:51:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1700617917; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6FhQxdNVXr6YhJmXpSuw8jKFC/1E39MbZ5mJUzcfO+Y=; b=Z3sT4LeSZm/MokASfEXE+Z0cY5m0EnBg9JkWqZ0/IPVkmrGtcdYTnzgeFfysMtbUJVf1Rl mumCxfZmv+ceET3V7W5hZ1JPNOTV2TZshB7Msl1ZJWlv354CGDXiXn/okrm9PBLPGzZHJL NqD7+ChzttAjIESJt+ZXicLNhTDK4f+WeLPdw4YQ+epi7TxFoWQRE7P33nnWMS/zak4WCU INlYlee8rUat6aA4kO+kBUkjbLZa1sAoETuVgbbHWHJhDXyc9Oj3zVXgQpEY0RWCJ72fOL OPOT/d2hjRer1A2zZcnjb4UORuZM4T0BdqgzhidT4buuK10zVzao3F/3FQlf2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1700617917; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6FhQxdNVXr6YhJmXpSuw8jKFC/1E39MbZ5mJUzcfO+Y=; b=IeqWSTdfsYrR8e1yY+OsFGRndb3N6hceibh617ulFQ6PoxSVUt08lFfQuUkD4NvM29KunE +fR3xbPZqoe/G3OellcR7YlJ6Fu0fptEh2v3ZiKoICfBp74iHEXy89IwCwCGI++MxG9ttO Ym0dy0JaxIVXpSTB+F76hEiotes8pQ9cDeL+1xj5nle1U+pfZzfEDm9mWPuYRIZjZpKWhe Ke7raNRowKtJUuNnQCkiZWTi/EaFSWkbmaY55xko0k2n076JuST5oxf+CTug+ubC/GSqI+ cE3tEJzRWit0bxbsvhxqWSlws4yWJ0ldl7ziJ5Z3ImgRpquo55W8+UdiWgeqFQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1700617917; a=rsa-sha256; cv=none; b=UVUup56J6dJgW0Xt8a5UGNm/qly+QT33+OMmBzOksAG6sGwuPOYKjugGBUGimVy3SjTiWN EP0GzdCngtu4JPz30cd3lDVZ2+PNwsKatXaZ3aLsijrKaW/+oDaL5jNw4EH4SsOeTiLREu r8qBXAc7OI6OCsJZDOgPhCk1gFl062XCqWkPs2Top1DOzUWUiW0AFwVq1aXP/t37hULfZ2 GorYnE2Hz2uIarroZCzP2kfO9buRAJeVbXjCx6sIxsABRPqJeWlOd82QYRg56pGitnncNV 31dY9fTE1zJLpi8MPaH9lzG0fXNKtvO4h7TOI+BMluEdkjbdhWb4T4DcsVNNCQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4SZkkj4Chqz10HG; Wed, 22 Nov 2023 01:51:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3AM1pvFD078137; Wed, 22 Nov 2023 01:51:57 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3AM1pvOb078119; Wed, 22 Nov 2023 01:51:57 GMT (envelope-from git) Date: Wed, 22 Nov 2023 01:51:57 GMT Message-Id: <202311220151.3AM1pvOb078119@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 67a9c8868af3 - stable/14 - net/mlx5: Allow creating autogroups with reserved entries List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 67a9c8868af371f3e0b96a18d1f9d54fd2be4b1a Auto-Submitted: auto-generated The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=67a9c8868af371f3e0b96a18d1f9d54fd2be4b1a commit 67a9c8868af371f3e0b96a18d1f9d54fd2be4b1a Author: Mark Bloch AuthorDate: 2023-02-19 14:16:43 +0000 Commit: Konstantin Belousov CommitDate: 2023-11-22 01:40:28 +0000 net/mlx5: Allow creating autogroups with reserved entries (cherry picked from commit 0a5db6bb3a953bd22f53f3607ae6853487548532) --- sys/dev/mlx5/fs.h | 3 ++- sys/dev/mlx5/mlx5_core/fs_core.h | 1 + sys/dev/mlx5/mlx5_core/mlx5_fs_tree.c | 22 +++++++++++++++++----- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/sys/dev/mlx5/fs.h b/sys/dev/mlx5/fs.h index da1a469d333c..d61a2bb498b7 100644 --- a/sys/dev/mlx5/fs.h +++ b/sys/dev/mlx5/fs.h @@ -140,7 +140,8 @@ mlx5_create_auto_grouped_flow_table(struct mlx5_flow_namespace *ns, int prio, const char *name, int num_flow_table_entries, - int max_num_groups); + int max_num_groups, + int num_reserved_entries); struct mlx5_flow_table * mlx5_create_vport_flow_table(struct mlx5_flow_namespace *ns, diff --git a/sys/dev/mlx5/mlx5_core/fs_core.h b/sys/dev/mlx5/mlx5_core/fs_core.h index dc619fc2d2db..a9273fdab61c 100644 --- a/sys/dev/mlx5/mlx5_core/fs_core.h +++ b/sys/dev/mlx5/mlx5_core/fs_core.h @@ -99,6 +99,7 @@ struct mlx5_flow_table { unsigned int max_types; unsigned int group_size; unsigned int num_types; + unsigned int max_fte; } autogroup; unsigned int max_fte; unsigned int level; diff --git a/sys/dev/mlx5/mlx5_core/mlx5_fs_tree.c b/sys/dev/mlx5/mlx5_core/mlx5_fs_tree.c index b59373d48730..dcf93e5fc892 100644 --- a/sys/dev/mlx5/mlx5_core/mlx5_fs_tree.c +++ b/sys/dev/mlx5/mlx5_core/mlx5_fs_tree.c @@ -892,12 +892,18 @@ struct mlx5_flow_table *mlx5_create_auto_grouped_flow_table(struct mlx5_flow_nam int prio, const char *name, int num_flow_table_entries, - int max_num_groups) + int max_num_groups, + int num_reserved_entries) { struct mlx5_flow_table *ft = NULL; struct fs_prio *fs_prio; bool is_shared_prio; + if (max_num_groups > (num_flow_table_entries - num_reserved_entries)) + return ERR_PTR(-EINVAL); + if (num_reserved_entries > num_flow_table_entries) + return ERR_PTR(-EINVAL); + fs_prio = find_prio(ns, prio); if (!fs_prio) return ERR_PTR(-EINVAL); @@ -918,8 +924,9 @@ struct mlx5_flow_table *mlx5_create_auto_grouped_flow_table(struct mlx5_flow_nam ft->autogroup.active = true; ft->autogroup.max_types = max_num_groups; + ft->autogroup.max_fte = num_flow_table_entries - num_reserved_entries; /* We save place for flow groups in addition to max types */ - ft->autogroup.group_size = ft->max_fte / (max_num_groups + 1); + ft->autogroup.group_size = ft->autogroup.max_fte / (max_num_groups + 1); if (is_shared_prio) ft->shared_refcount = 1; @@ -1109,11 +1116,13 @@ struct mlx5_flow_group *mlx5_create_flow_group(struct mlx5_flow_table *ft, { struct mlx5_flow_group *fg; struct mlx5_core_dev *dev = fs_get_dev(&ft->base); + unsigned int start_index; + start_index = MLX5_GET(create_flow_group_in, in, start_flow_index); if (!dev) return ERR_PTR(-ENODEV); - if (ft->autogroup.active) + if (ft->autogroup.active && start_index < ft->autogroup.max_fte) return ERR_PTR(-EPERM); fg = fs_create_fg(dev, ft, ft->fgs.prev, in, 1); @@ -1132,7 +1141,9 @@ static void fs_del_fg(struct mlx5_flow_group *fg) dev = fs_get_dev(&parent_ft->base); WARN_ON(!dev); - if (parent_ft->autogroup.active && fg->max_ftes == parent_ft->autogroup.group_size) + if (parent_ft->autogroup.active && + fg->max_ftes == parent_ft->autogroup.group_size && + fg->start_index < parent_ft->autogroup.max_fte) parent_ft->autogroup.num_types--; if (mlx5_cmd_fs_destroy_fg(dev, parent_ft->vport, @@ -1423,6 +1434,7 @@ static struct mlx5_flow_group *create_autogroup(struct mlx5_flow_table *ft, u32 *in; int inlen = MLX5_ST_SZ_BYTES(create_flow_group_in); void *match_criteria_addr; + u32 max_fte = ft->autogroup.max_fte; if (!ft->autogroup.active) return ERR_PTR(-ENOENT); @@ -1459,7 +1471,7 @@ static struct mlx5_flow_group *create_autogroup(struct mlx5_flow_table *ft, prev = &g->base.list; } - if (candidate_index + group_size > ft->max_fte) { + if (candidate_index + group_size > max_fte) { ret = ERR_PTR(-ENOSPC); goto out; }