From owner-svn-src-all@freebsd.org Tue Sep 1 12:21:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E05543C59C0; Tue, 1 Sep 2020 12:21:17 +0000 (UTC) (envelope-from hselasky@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 "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BgmQ55Yyzz4RQ3; Tue, 1 Sep 2020 12:21:17 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8AA0319404; Tue, 1 Sep 2020 12:21:17 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 081CLH06084751; Tue, 1 Sep 2020 12:21:17 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 081CLHvJ084750; Tue, 1 Sep 2020 12:21:17 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202009011221.081CLHvJ084750@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Tue, 1 Sep 2020 12:21:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r365036 - head/sys/dev/mlx5/mlx5_en X-SVN-Group: head X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: head/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 365036 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Sep 2020 12:21:17 -0000 Author: hselasky Date: Tue Sep 1 12:21:17 2020 New Revision: 365036 URL: https://svnweb.freebsd.org/changeset/base/365036 Log: Make hardware TLS send tag allocation synchronous in mlx5en(4). Previously the send tag was setup in the background, and all packets for the given send tag were dropped until ready. Change this to be blocking behaviour so that once the setsocketopt() for enabling TLS completes, the socket is ready to send packets. Do this by simply flushing the work request which does the needed firmware programming during send tag allocation. MFC after: 1 week Sponsored by: Mellanox Technologies // Nvidia Modified: head/sys/dev/mlx5/mlx5_en/mlx5_en_hw_tls.c Modified: head/sys/dev/mlx5/mlx5_en/mlx5_en_hw_tls.c ============================================================================== --- head/sys/dev/mlx5/mlx5_en/mlx5_en_hw_tls.c Tue Sep 1 12:11:59 2020 (r365035) +++ head/sys/dev/mlx5/mlx5_en/mlx5_en_hw_tls.c Tue Sep 1 12:21:17 2020 (r365036) @@ -188,7 +188,7 @@ mlx5e_tls_work(struct work_struct *work) priv = container_of(ptag->tls, struct mlx5e_priv, tls); switch (ptag->state) { - case MLX5E_TLS_ST_SETUP: + case MLX5E_TLS_ST_INIT: /* try to open TIS, if not present */ if (ptag->tisn == 0) { err = mlx5_tls_open_tis(priv->mdev, 0, priv->tdn, @@ -215,8 +215,8 @@ mlx5e_tls_work(struct work_struct *work) ptag->dek_index_ok = 1; MLX5E_TLS_TAG_LOCK(ptag); - if (ptag->state == MLX5E_TLS_ST_SETUP) - ptag->state = MLX5E_TLS_ST_TXRDY; + if (ptag->state == MLX5E_TLS_ST_INIT) + ptag->state = MLX5E_TLS_ST_SETUP; MLX5E_TLS_TAG_UNLOCK(ptag); break; @@ -413,6 +413,10 @@ mlx5e_tls_snd_tag_alloc(struct ifnet *ifp, MPASS(ptag->tag.m_snd_tag.refcount == 0); m_snd_tag_init(&ptag->tag.m_snd_tag, ifp); *ppmt = &ptag->tag.m_snd_tag; + + queue_work(priv->tls.wq, &ptag->work); + flush_work(&ptag->work); + return (0); failure: @@ -736,16 +740,11 @@ mlx5e_sq_tls_xmit(struct mlx5e_sq *sq, struct mlx5e_xm MLX5E_TLS_TAG_LOCK(ptls_tag); switch (ptls_tag->state) { case MLX5E_TLS_ST_INIT: - queue_work(sq->priv->tls.wq, &ptls_tag->work); - ptls_tag->state = MLX5E_TLS_ST_SETUP; - ptls_tag->expected_seq = ~mb_seq; /* force setup */ MLX5E_TLS_TAG_UNLOCK(ptls_tag); return (MLX5E_TLS_FAILURE); - case MLX5E_TLS_ST_SETUP: - MLX5E_TLS_TAG_UNLOCK(ptls_tag); - return (MLX5E_TLS_FAILURE); - + ptls_tag->state = MLX5E_TLS_ST_TXRDY; + ptls_tag->expected_seq = ~mb_seq; /* force setup */ default: MLX5E_TLS_TAG_UNLOCK(ptls_tag); break;