From nobody Tue Feb 08 15:14:14 2022 X-Original-To: dev-commits-src-branches@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 E971C19C41CF; Tue, 8 Feb 2022 15:14:16 +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 4JtRPL401Gz4djJ; Tue, 8 Feb 2022 15:14:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644333256; 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=6XSOFIijooiQvIL3rjDYREla708WlOOxMrNkivyRV6U=; b=OGJi9cIGRchADNJrrvbTOtz9AJGXsOf8IUSSKLqbZU8TEEMJSmIo6ygkup9qZHcoZ3UGEy oRs7gJrA08lRqR73tf4MwsRvdTNg33WsgNDe8PjiflC5xoOxtW7tJ8biByt8baOxdIh8RK Sdqj9ki8sySvzuB6fykz1ZQ9rp6artEkYD8edr20WZRNb3UJLQ9SPeymh4263yhs+NpuKV TKN35UOiw/9fPz7vyoAncO3EIsucVyfRVzeNLyn5YRazqgbID3iDxPXX4Zqj1qHnh224Jj 7Z5UPXWCb48ZWHkMWZjamztoUfJZAgQRVkrRMPw4oQkXIcJ7Uhacn5anuJB4aQ== 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 434291BA75; Tue, 8 Feb 2022 15:14:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 218FEE2O021016; Tue, 8 Feb 2022 15:14:14 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 218FEE4j021015; Tue, 8 Feb 2022 15:14:14 GMT (envelope-from git) Date: Tue, 8 Feb 2022 15:14:14 GMT Message-Id: <202202081514.218FEE4j021015@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Hans Petter Selasky Subject: git: 5ddb1a584db6 - stable/13 - mlx5en: Implement one RQT object per channel. List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: hselasky X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 5ddb1a584db61ef375fe4dc604894edcf6d4dd3f Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644333256; 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=6XSOFIijooiQvIL3rjDYREla708WlOOxMrNkivyRV6U=; b=hp1bEAn6yK6aNNLc/F+xCKPzXEsjo9ZXXB7hwL1UVZxoxlbM9JfX8GCTl5k3rL9pK8rD3H Sl5PpQp7DQ+o8RA46FoROgcPA/iC6Zuv7WLVvv30fOIy1bnGPK9hnTlqI7Bq3PxS1WpZdv oRPKktYGVwLuym0L9Yqz2hy+vPdJMbCuJKPUHjWvfmoJdJ3NeufYRYEeFRefYFiQXlTeLp EW9knpRHrQ6hW1q1kiS4tzL1y+N4ouvWfYaM2mz4xBYjSgSaVgV/ZLUAPZB86rb/uhOmjJ Tbth5h4MLM/oEv/GNii7H90BsxAa6hDFA9BaZxJX/mgFwKsxuWwh9EPOCoRteQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1644333256; a=rsa-sha256; cv=none; b=eu4CE9GoDF74wuo07pb+Wqdjtl4uyGioBwf+URFs2Txp2lI658AyquXogtezqFWIU1IkSo 2NBbch9km8maMO4ZaJFcj4C2qwOClXY3it62OF+h/fkiWgO3IaUGZgvWEPMibCDhhxxomN wjDBRUw0hd6mPYybJJ5jS93AD3qanPKwk64xc0Ugh91SJ6XUnc4Un8gn9bVz1iveFhaF36 R+64i6n6Xt2X4wq6p9cEb/Sj0qC3OaBHoEEIFlL5ySTqwFq4tTg6rCq+O4Ft0V1gfaVk/3 gZCKlqmFrambAtHIdQajvYhLzQrrMGx67Bqke8PDy0X2tjE8QW3k20pg+eYMPw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by hselasky: URL: https://cgit.FreeBSD.org/src/commit/?id=5ddb1a584db61ef375fe4dc604894edcf6d4dd3f commit 5ddb1a584db61ef375fe4dc604894edcf6d4dd3f Author: Hans Petter Selasky AuthorDate: 2022-02-08 15:08:54 +0000 Commit: Hans Petter Selasky CommitDate: 2022-02-08 15:08:54 +0000 mlx5en: Implement one RQT object per channel. These objects will eventually be used to switch TLS RX traffic. Sponsored by: NVIDIA Networking (cherry picked from commit 8e332232a5ac8b11fb1c34c70f48bf586267ffda) --- sys/dev/mlx5/mlx5_en/en.h | 1 + sys/dev/mlx5/mlx5_en/mlx5_en_main.c | 110 +++++++++++++++++++++++++++++++----- 2 files changed, 96 insertions(+), 15 deletions(-) diff --git a/sys/dev/mlx5/mlx5_en/en.h b/sys/dev/mlx5/mlx5_en/en.h index 8b74bdc08b77..405fe6390cfb 100644 --- a/sys/dev/mlx5/mlx5_en/en.h +++ b/sys/dev/mlx5/mlx5_en/en.h @@ -926,6 +926,7 @@ struct mlx5e_channel { struct mlx5e_priv *priv; struct completion completion; int ix; + u32 rqtn; } __aligned(MLX5E_CACHELINE_SIZE); enum mlx5e_traffic_types { diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c index 03a92a7a25cc..0cff33543cb1 100644 --- a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c +++ b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c @@ -2743,17 +2743,14 @@ mlx5e_close_tises(struct mlx5e_priv *priv) } static int -mlx5e_open_rqt(struct mlx5e_priv *priv) +mlx5e_open_default_rqt(struct mlx5e_priv *priv, u32 *prqtn, int sz) { u32 *in; void *rqtc; int inlen; int err; - int sz; int i; - sz = 1 << priv->params.rx_hash_log_tbl_sz; - inlen = MLX5_ST_SZ_BYTES(create_rqt_in) + sizeof(u32) * sz; in = mlx5_vzalloc(inlen); if (in == NULL) @@ -2766,12 +2763,51 @@ mlx5e_open_rqt(struct mlx5e_priv *priv) for (i = 0; i != sz; i++) MLX5_SET(rqtc, rqtc, rq_num[i], priv->drop_rq.rqn); - err = mlx5_core_create_rqt(priv->mdev, in, inlen, &priv->rqtn); + err = mlx5_core_create_rqt(priv->mdev, in, inlen, prqtn); kvfree(in); return (err); } +static int +mlx5e_open_rqts(struct mlx5e_priv *priv) +{ + int err; + int i; + + err = mlx5e_open_default_rqt(priv, &priv->rqtn, + 1 << priv->params.rx_hash_log_tbl_sz); + if (err) + goto err_default; + + for (i = 0; i != priv->mdev->priv.eq_table.num_comp_vectors; i++) { + err = mlx5e_open_default_rqt(priv, &priv->channel[i].rqtn, 1); + if (err) + goto err_channel; + } + return (0); + +err_channel: + while (i--) + mlx5_core_destroy_rqt(priv->mdev, priv->channel[i].rqtn); + + mlx5_core_destroy_rqt(priv->mdev, priv->rqtn); + +err_default: + return (err); +} + +static void +mlx5e_close_rqts(struct mlx5e_priv *priv) +{ + int i; + + for (i = 0; i != priv->mdev->priv.eq_table.num_comp_vectors; i++) + mlx5_core_destroy_rqt(priv->mdev, priv->channel[i].rqtn); + + mlx5_core_destroy_rqt(priv->mdev, priv->rqtn); +} + static int mlx5e_activate_rqt(struct mlx5e_priv *priv) { @@ -2795,9 +2831,11 @@ mlx5e_activate_rqt(struct mlx5e_priv *priv) MLX5_SET(modify_rqt_in, in, bitmask.rqn_list, 1); for (i = 0; i != sz; i++) { - int ix = i; + int ix; #ifdef RSS - ix = rss_get_indirection_to_bucket(ix); + ix = rss_get_indirection_to_bucket(i); +#else + ix = i; #endif /* ensure we don't overflow */ ix %= priv->params.num_channels; @@ -2809,8 +2847,35 @@ mlx5e_activate_rqt(struct mlx5e_priv *priv) } err = mlx5_core_modify_rqt(priv->mdev, priv->rqtn, in, inlen); - kvfree(in); + if (err) + goto err_modify; + + inlen = MLX5_ST_SZ_BYTES(modify_rqt_in) + sizeof(u32); + + MLX5_SET(rqtc, rqtc, rqt_actual_size, 1); + + for (i = 0; i != priv->mdev->priv.eq_table.num_comp_vectors; i++) { + int ix; +#ifdef RSS + ix = rss_get_indirection_to_bucket(i); +#else + ix = i; +#endif + /* ensure we don't overflow */ + ix %= priv->params.num_channels; + + /* apply receive side scaling stride, if any */ + ix -= ix % (int)priv->params.channels_rsss; + + MLX5_SET(rqtc, rqtc, rq_num[0], priv->channel[ix].rq.rqn); + err = mlx5_core_modify_rqt(priv->mdev, priv->channel[i].rqtn, in, inlen); + if (err) + goto err_modify; + } + +err_modify: + kvfree(in); return (err); } @@ -2840,8 +2905,23 @@ mlx5e_deactivate_rqt(struct mlx5e_priv *priv) MLX5_SET(rqtc, rqtc, rq_num[i], priv->drop_rq.rqn); err = mlx5_core_modify_rqt(priv->mdev, priv->rqtn, in, inlen); - kvfree(in); + if (err) + goto err_modify; + + inlen = MLX5_ST_SZ_BYTES(modify_rqt_in) + sizeof(u32); + MLX5_SET(rqtc, rqtc, rqt_actual_size, 1); + + for (i = 0; i != priv->mdev->priv.eq_table.num_comp_vectors; i++) { + MLX5_SET(rqtc, rqtc, rq_num[0], priv->drop_rq.rqn); + + err = mlx5_core_modify_rqt(priv->mdev, priv->channel[i].rqtn, in, inlen); + if (err) + goto err_modify; + } + +err_modify: + kvfree(in); return (err); } @@ -4615,16 +4695,16 @@ mlx5e_create_ifp(struct mlx5_core_dev *mdev) goto err_tls_init; } - err = mlx5e_open_rqt(priv); + err = mlx5e_open_rqts(priv); if (err) { - if_printf(ifp, "%s: mlx5e_open_rqt failed (%d)\n", __func__, err); + if_printf(ifp, "%s: mlx5e_open_rqts failed (%d)\n", __func__, err); goto err_open_drop_rq; } err = mlx5e_open_tirs(priv); if (err) { mlx5_en_err(ifp, "mlx5e_open_tirs() failed, %d\n", err); - goto err_open_rqt; + goto err_open_rqts; } err = mlx5e_open_flow_tables(priv); @@ -4771,8 +4851,8 @@ mlx5e_create_ifp(struct mlx5_core_dev *mdev) err_open_tirs: mlx5e_close_tirs(priv); -err_open_rqt: - mlx5_core_destroy_rqt(priv->mdev, priv->rqtn, 0); +err_open_rqts: + mlx5e_close_rqts(priv); err_open_drop_rq: mlx5e_close_drop_rq(&priv->drop_rq); @@ -4878,7 +4958,7 @@ mlx5e_destroy_ifp(struct mlx5_core_dev *mdev, void *vpriv) mlx5e_close_flow_tables(priv); mlx5e_close_tirs(priv); - mlx5_core_destroy_rqt(priv->mdev, priv->rqtn, 0); + mlx5e_close_rqts(priv); mlx5e_close_drop_rq(&priv->drop_rq); mlx5e_tls_cleanup(priv); mlx5e_rl_cleanup(priv);