From nobody Thu Feb 24 12:55:46 2022 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 0840E19DCF29; Thu, 24 Feb 2022 12:55:47 +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 4K4CZB4VZcz4SGL; Thu, 24 Feb 2022 12:55:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645707346; 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=ZzGeXxCryC9ULtnaphbw8J20KilQxmjE07wzwDYjUhc=; b=RMz0ikZVKhivR23R/NXbvPt23VNRELAwHIdEdZivUOBN6xfeA3S1YkGxPZCIk3pXRN1fIZ UifCYINpgGrSpOFBkyQUn4tQvb8E7lGyFgTaj/g/wzjygPdQ1fG7ZAfxLoUKtASlHcVRUs zRO9QXdYeZpxFpSVs7cz11UqchV6TYxxej8ENlAkSqdDfUCb1XT7Ep3bM1AWHSobyf/AS1 /ymEwh1h+N+X/4dNMNnrePPxXQtroBLNKG7JD0fThAifQkMb87VkZ1gl+YEwIhYQzssEcc 0bOEcYA8aidmqmF549buyFKvKJOKaZ5sWF3WTF/rASQjZqD0DlYQkzzQIrH2pA== 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 337F84627; Thu, 24 Feb 2022 12:55:46 +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 21OCtk34030021; Thu, 24 Feb 2022 12:55:46 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21OCtkhV030020; Thu, 24 Feb 2022 12:55:46 GMT (envelope-from git) Date: Thu, 24 Feb 2022 12:55:46 GMT Message-Id: <202202241255.21OCtkhV030020@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Marcin Wojtas Subject: git: dbc92a6d9d2b - stable/13 - ena: rework tx req_id validation logic 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: mw X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: dbc92a6d9d2b436b50a9098aa6b3dfc8f61e1060 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645707346; 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=ZzGeXxCryC9ULtnaphbw8J20KilQxmjE07wzwDYjUhc=; b=daVfUZjIS8e3zx6OfBW3m6p/bRcvIwxGDRpBSaLOM5lfUTCEbXpLnoDwI9+AFHuuYhEpOk +zsKekZu0wWEunyL1nvfBimgbGdRLFjq/xSbZauRt7Oo62qf18s7vVhbF9DBkQd9a4n2Jp 1ZbBryQNYc9u+OMhLzNZLMJywk4yJ64IuztmHyc8QSJZoaPnWKfDML0Y3ZXibreGIVOeuc /RTw8A3CSvX91OXlZl/z8/rJPsVrQ8Qrl6vU7yaP/GbkBUAIncT5xZSDyBkFdJyW8o8j7P 3ILs35kQrBTJHXZBMau5ReRJ0xzX/+0VmwUgISDPokixKzscbwD09JP8o0m6lw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1645707346; a=rsa-sha256; cv=none; b=b0Rzpg+3RZIWZs747iaaGK3Lwmoe5I7Mi+uZXOJ3Wukbnf//0LxN83pabdc3RPEB2bzN21 mtID3xM+fc/PLfOJzxK1HkM3ZsiiV1kGR/9xa7I6Et6los6yf+XoVFq897SD0RTE+jb9I4 VM3zBMl02aYnx/+DDua8phN/lfkUjioWkhZ6Lkn2wHKBmkh/KRowPFRsAmA9e0optCXu3n FX0GXV2DwD+tdaYc68eVu7S5xGAzeWHsHAXnviwFGT38JCBjc5Om4KDJPqsCGFEAbt0Lnl j4rfIuAa4eZf4n4SekhJGRAvWQjRcKqjxXcGPpQ/RzntN/f8b+j2zGpPBKDmMw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by mw: URL: https://cgit.FreeBSD.org/src/commit/?id=dbc92a6d9d2b436b50a9098aa6b3dfc8f61e1060 commit dbc92a6d9d2b436b50a9098aa6b3dfc8f61e1060 Author: Artur Rojek AuthorDate: 2022-01-03 13:50:06 +0000 Commit: Marcin Wojtas CommitDate: 2022-02-24 12:53:43 +0000 ena: rework tx req_id validation logic Since `ena_com_tx_comp_req_id_get` already checks for `req_id` validity, the logic was exiting early, never giving `validate_tx_req_id` a chance to trigger device reset. Rewrite the logic so that device reset is called based on return value of `ena_com_tx_comp_req_id_get` instead. Submitted by: Artur Rojek Obtained from: Semihalf MFC after: 2 weeks Sponsored by: Amazon, Inc. (cherry picked from commit b168d0c850f34e8178d815ba3a87de2657a02ca9) --- sys/dev/ena/ena_datapath.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/sys/dev/ena/ena_datapath.c b/sys/dev/ena/ena_datapath.c index 3026671b6a19..c6798b3f7eb3 100644 --- a/sys/dev/ena/ena_datapath.c +++ b/sys/dev/ena/ena_datapath.c @@ -48,7 +48,8 @@ __FBSDID("$FreeBSD$"); static int ena_tx_cleanup(struct ena_ring *); static int ena_rx_cleanup(struct ena_ring *); -static inline int validate_tx_req_id(struct ena_ring *, uint16_t); +static inline int ena_get_tx_req_id(struct ena_ring *tx_ring, + struct ena_com_io_cq *io_cq, uint16_t *req_id); static void ena_rx_hash_mbuf(struct ena_ring *, struct ena_com_rx_ctx *, struct mbuf *); static struct mbuf* ena_rx_mbuf(struct ena_ring *, struct ena_com_rx_buf_info *, @@ -200,23 +201,27 @@ ena_qflush(if_t ifp) *********************************************************************/ static inline int -validate_tx_req_id(struct ena_ring *tx_ring, uint16_t req_id) +ena_get_tx_req_id(struct ena_ring *tx_ring, struct ena_com_io_cq *io_cq, + uint16_t *req_id) { struct ena_adapter *adapter = tx_ring->adapter; - struct ena_tx_buffer *tx_info = NULL; + int rc; - if (likely(req_id < tx_ring->ring_size)) { - tx_info = &tx_ring->tx_buffer_info[req_id]; - if (tx_info->mbuf != NULL) - return (0); - ena_log(adapter->pdev, ERR, - "tx_info doesn't have valid mbuf\n"); + rc = ena_com_tx_comp_req_id_get(io_cq, req_id); + if (rc == ENA_COM_TRY_AGAIN) + return (EAGAIN); + + if (unlikely(rc != 0)) { + ena_log(adapter->pdev, ERR, "Invalid req_id: %hu\n", *req_id); + counter_u64_add(tx_ring->tx_stats.bad_req_id, 1); + goto err; } - ena_log(adapter->pdev, ERR, "Invalid req_id: %hu\n", req_id); - counter_u64_add(tx_ring->tx_stats.bad_req_id, 1); + if (tx_ring->tx_buffer_info[*req_id].mbuf != NULL) + return (0); - /* Trigger device reset */ + ena_log(adapter->pdev, ERR, "tx_info doesn't have valid mbuf\n"); +err: ena_trigger_reset(adapter, ENA_REGS_RESET_INV_TX_REQ_ID); return (EFAULT); @@ -262,11 +267,7 @@ ena_tx_cleanup(struct ena_ring *tx_ring) struct ena_tx_buffer *tx_info; struct mbuf *mbuf; - rc = ena_com_tx_comp_req_id_get(io_cq, &req_id); - if (unlikely(rc != 0)) - break; - - rc = validate_tx_req_id(tx_ring, req_id); + rc = ena_get_tx_req_id(tx_ring, io_cq, &req_id); if (unlikely(rc != 0)) break;