From nobody Thu Aug 27 05:12:46 2026 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 4hVqQl1svdz6qRmL for ; Thu, 27 Aug 2026 05:12: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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hVqQk73cRz3h6j for ; Thu, 27 Aug 2026 05:12:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787807567; 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=GSEtrG3k3MLF32r5avhspkTOPl5aPNMEw+XENdw0ixw=; b=pdkLoc30GLbIp4mbPoBpl3gcuiUlRqnel/toP3vG+AMu6hHPrOfp2W6lyGjl5DSH2RWWAz ZNZNIhoTqt7Bllj29aIhKmei0Mb63Bk9AMRb6ohm3VwJiOM6/dtYGUNEfB0Lykv3cTrZyD Zd7CBy7Snmos0vrqY0QTrgpkiH10hAN/Q5fdakyQ1aNPVmAF+On9JtbMWoB6DxjGoQF1/b YUN2AIzVjjXNTDZvHTw5jLUAzZLopPNTceEdQyp2y/1yv3AB83USrPLfcqFY0ztWx2TObN CkI8wfUMLxKGY/qOdjUSS1+nD8QMqYMvDiuAGbSD+8ThoIKhAKNk8RiO1MRCfg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787807567; a=rsa-sha256; cv=none; b=Ab0d3AXvLyOZe1/aJ7JVUUz+fIiO3DqdXuG7e01H7oZE6L8oz51shQKGUqE2V/oakrWn78 KhUZ+93W13hP1F9xWi0/Mxq61QUi5YFUocRk/rU7U9YxtzhZBub5tep8PWW5Yo6ZBiH/5S D7j95DdDL6XQC9UdEgBa0V54pM1rC2ZI/gIjZERPnyAeg7Eryylp70Dvbjdg9X8ZdDT6dA G+yBRg8ODPFzPZe67BWlKz1ePRzTOXyc3TfHMyeHEy0qAIcqXx+J2BHoDy91ZO/yIHJ6Tm YJGBEmL9obvWc+T3v2tCnSkq3fFhdMlVJZh8MQRqZqMWJaBpvCd4AtPjMGNT0w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787807567; 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=GSEtrG3k3MLF32r5avhspkTOPl5aPNMEw+XENdw0ixw=; b=n6jJEt0iavIbqTmYPZFm3SHNHjk1bJVcRcLtlvorIFjOlMCYGj4W+I0iYaRK5HGpHPebPy cWrJADoNBBRkWK0Tgq1ucKGjL9e4W3qm7Ix02Cr48b00fdruU3jt1iNIGZmDzCqENDHtw0 YJWANZd52phmnf7pDTa1KTdn0qBaOVWVPLJ5+uDZ3vRZktdY7tLJM+c3UOoUG6eu/Icgk1 +gBfBoV1oXGifWwWk5jWFyvn5X+e/Ua6vgeZqDMZvQYi5ah6I0oC3TJt/MkBBUkKXIhmaI y6NlAkffuFT4mGWqEdDLm9bnSGqEVZRzc5xmKrxAE8nFp7dLBVI0AQis/WKCdA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hVqQk5svdz18mt for ; Thu, 27 Aug 2026 05:12:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 42853 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 27 Aug 2026 05:12:46 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Jaeyoon Choi Subject: git: 7682b8f37669 - main - ufshci: claim trackers before failing them 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jaeyoon X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7682b8f37669671844fedd94a382ec0c459b9b2c Auto-Submitted: auto-generated Date: Thu, 27 Aug 2026 05:12:46 +0000 Message-Id: <6a8fc74e.42853.3e5860e1@gitrepo.freebsd.org> The branch main has been updated by jaeyoon: URL: https://cgit.FreeBSD.org/src/commit/?id=7682b8f37669671844fedd94a382ec0c459b9b2c commit 7682b8f37669671844fedd94a382ec0c459b9b2c Author: Jaeyoon Choi AuthorDate: 2026-08-27 05:00:41 +0000 Commit: Jaeyoon Choi CommitDate: 2026-08-27 05:08:37 +0000 ufshci: claim trackers before failing them ufshci_req_queue_fail() drops the queue lock to complete each tracker. In that window the completion path could complete the same tracker again. Claim the slot before dropping the lock, so the completion scan skips it. Reserved slots are left to their submit thread, which completes them itself. The manual request completion helper lost its only caller, so drop it. Reviewed by: imp (mentor) Sponsored by: Samsung Electronics Differential Revision: https://reviews.freebsd.org/D58945 --- sys/dev/ufshci/ufshci_req_queue.c | 60 +++++++++++++-------------------------- 1 file changed, 20 insertions(+), 40 deletions(-) diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c index db96d13fad24..97eccd082176 100644 --- a/sys/dev/ufshci/ufshci_req_queue.c +++ b/sys/dev/ufshci/ufshci_req_queue.c @@ -182,29 +182,6 @@ ufshci_req_queue_manual_complete_tracker(struct ufshci_tracker *tr, uint8_t ocs, ufshci_req_queue_complete_tracker(tr); } -static void -ufshci_req_queue_manual_complete_request(struct ufshci_req_queue *req_queue, - struct ufshci_request *req, uint8_t ocs, uint8_t rc) -{ - struct ufshci_completion cpl; - bool error; - - memset(&cpl, 0, sizeof(cpl)); - cpl.response_upiu.header.response = rc; - error = ufshci_req_queue_response_is_error(req_queue, ocs, - &cpl.response_upiu); - - if (error) { - ufshci_printf(req_queue->ctrlr, - "Manual complete request error:0x%x", error); - } - - if (req->cb_fn) - req->cb_fn(req->cb_arg, &cpl, error); - - ufshci_free_request(req); -} - void ufshci_req_queue_fail(struct ufshci_controller *ctrlr, struct ufshci_req_queue *req_queue) @@ -221,23 +198,26 @@ ufshci_req_queue_fail(struct ufshci_controller *ctrlr, for (i = 0; i < req_queue->num_trackers; i++) { tr = hwq->act_tr[i]; - if (tr->slot_state == UFSHCI_SLOT_STATE_RESERVED) { - mtx_unlock(&hwq->qlock); - ufshci_req_queue_manual_complete_request(req_queue, - tr->req, UFSHCI_DESC_ABORTED, - UFSHCI_RESPONSE_CODE_GENERAL_FAILURE); - mtx_lock(&hwq->qlock); - } else if (tr->slot_state == UFSHCI_SLOT_STATE_SCHEDULED) { - /* - * Do not remove the tracker. The abort_tracker path - * will do that for us. - */ - mtx_unlock(&hwq->qlock); - ufshci_req_queue_manual_complete_tracker(tr, - UFSHCI_DESC_ABORTED, - UFSHCI_RESPONSE_CODE_GENERAL_FAILURE); - mtx_lock(&hwq->qlock); - } + /* + * A slot in UFSHCI_SLOT_STATE_RESERVED is visible here + * only while its submit thread is failing a PRDT setup. + * That thread completes the request, so leave the slot + * alone. + */ + if (tr->slot_state != UFSHCI_SLOT_STATE_SCHEDULED) + continue; + + /* + * Claim the tracker under the lock. The completion + * scan only completes SCHEDULED slots, so it will + * skip this one while the lock is dropped. + */ + tr->slot_state = UFSHCI_SLOT_STATE_NEED_ERROR_HANDLING; + mtx_unlock(&hwq->qlock); + ufshci_req_queue_manual_complete_tracker(tr, + UFSHCI_DESC_ABORTED, + UFSHCI_RESPONSE_CODE_GENERAL_FAILURE); + mtx_lock(&hwq->qlock); } mtx_unlock(&hwq->qlock);