From nobody Wed Nov 15 23:09:11 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 4SVzPg6btsz50rr7; Wed, 15 Nov 2023 23:09:11 +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 4SVzPg4rQ3z3N3H; Wed, 15 Nov 2023 23:09:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1700089751; 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=4Fg1nOdKho+hfxyxWUbEwS8UFfpgTEOO+nxMVKpukaM=; b=xjJGpDmAgJjXbMFboM58dP97Vp1V+0RfZIX9lobXOWhGqFWzm91Y2kVTO9tk3lFXtmxP/f a0BpDv1Wj3ZRoAH4X8Zx05ItuScLvYTy6V1ZawnQzYbBKGVVyqBaWZmOBYgPLye2Cc96PR 9+BohHC3Ux/2CLE70VAD3/yQaSoWyfE9x+6BUbCWgAWL7sKF+7sMwNIAPnZeTFevd6Tels kA449XFOLAPFaw8SPxy7Jf5AjfvxUmL0vB/BKaLmHtyTLHF+YqledicFQQwTgWLdEx3Qpt WVBwg97juyl1bFh2S10AxELDD50dbEQolHGYuFdqjM+Cyf27vqZzoE8k2AByzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1700089751; 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=4Fg1nOdKho+hfxyxWUbEwS8UFfpgTEOO+nxMVKpukaM=; b=Sy7VqDyjGMrxsNAFpzq699glMPpODB5ypNC84/ZS7+kG/OaTKup9s1DLGHFgRHpKc/j+xZ GfQTuAVssX7sd+xdACLK8DAULhFnRU8tooGQVRJJ5/EZko3eVsnVXX0sffSRfVbJ9s6aGn u1pV0u8CIa3bmuDrB/vthHsRxCiL0bUgeMt5CclMBrjaynohBL9H/2wyDmbYGTnr/N4PnD ik8VerdI5biQV8TpxSh/QUHI6NJt4SJE7UIt7oSwsRZ+JApvJ1ZKGBJGrNHJG6LxRKJ5Wm T+ZWqGkRy+q+ideU8Dzz3Gec3UseRjLDWyklDV/0XsMgnw7PEQGs1werSxhEsw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1700089751; a=rsa-sha256; cv=none; b=hpBeYMVrv6IaNONL+dRWfYbMpQtELmdvVoxWHV0XA3oiI5T5/FFMF28808Q3URezeAUiXu HgswjHFVycI62ZcgJ6TPe5dYCF06JDTsagB9sR6JJNfUsffaUnHKDE7oVKj5CWEv8LPakQ t2ZaQcnOCOnYzr+iIeINJ9854W/KvM98nPNP8OOcpRnSltgubRz3cLsTlH9TLGQOWJtEIv ZxQfYHjn64qy9uyGiw29dbTGouyCGqoPz0HPqS+U1pX12FjVmoOpqzoWtVxFX4tGlHETGF iYhW9s9RIkT9Dim3xGf9z0YrBrirh1KvqkZTUCBqxQ0yMUPzFb6IbAorYblRLQ== 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 4SVzPg3x8gzc04; Wed, 15 Nov 2023 23:09:11 +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 3AFN9Bg5064858; Wed, 15 Nov 2023 23:09:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3AFN9BaC064855; Wed, 15 Nov 2023 23:09:11 GMT (envelope-from git) Date: Wed, 15 Nov 2023 23:09:11 GMT Message-Id: <202311152309.3AFN9BaC064855@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 0a5db6bb3a95 - main - 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/main X-Git-Reftype: branch X-Git-Commit: 0a5db6bb3a953bd22f53f3607ae6853487548532 Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=0a5db6bb3a953bd22f53f3607ae6853487548532 commit 0a5db6bb3a953bd22f53f3607ae6853487548532 Author: Mark Bloch AuthorDate: 2023-02-19 14:16:43 +0000 Commit: Konstantin Belousov CommitDate: 2023-11-15 23:08:16 +0000 net/mlx5: Allow creating autogroups with reserved entries Exclude the last n entries for an autogrouped flow table. Reserving entries at the end of the FT will ensure that this FG will be the last to be evaluated. This will be used in the next patch to create Linux upstream commit: 79cdb0aaea8b5478db34afa1d4d5ecc808689a67 Signed-off-by: Mark Bloch Sponsored by: NVidia networking MFC after: 1 week --- 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; }