From nobody Tue Aug 25 23:56:49 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1779486750; cv=none; d=zohomail.com; s=zohoarc; b=CmNyzpk1NynkitPcRl/eN7bQS2faBhWbkhG/iZZrpRLktCELiYHXqcz04k+tnsdQhYAKax7uBzIsrGZ/zhgfAQreTmeXvGp1tNw5DRH9o4xsik6rdMHWHfyIUoPhRE04+84J/9jnViKzHFOVdeSFWZCrSkqj1v6w5JJ7MWvUOTI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779486750; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rK+P4CTBAXDPVa1q0liecY92GVN/zEf9h2mTpfgpghs=; b=GAQX4SV/Y8bFyQg/kJBuvASKutgeiyXHXJ4DaDQLZ7K6BpH0Uy517bohl1N6m4vMje1pEWF2cGNnFpvo7TVPxJ6HUkZdks4fIlAf2HGuJKD7+kUCA+5tLY/AQbBkvB3oDalpE+bU7tDwyb5adZXe14wUWgyncd/dUiBmDdsMT/4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779486750234149.18965759177752; Fri, 22 May 2026 14:52:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQXlz-0001sH-1m; Fri, 22 May 2026 17:51:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQXlv-0001mn-Rj; Fri, 22 May 2026 17:51:12 -0400 Received: from isrv.corpit.ru ([212.248.84.144]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQXlt-0003mt-Qk; Fri, 22 May 2026 17:51:11 -0400 Received: from tsrv.corpit.ru (tsrv.tls.msk.ru [192.168.177.2]) by isrv.corpit.ru (Postfix) with ESMTP id 845A41AFB70; Sat, 23 May 2026 00:49:20 +0300 (MSK) Received: from think4mjt.tls.msk.ru (mjtthink.wg.tls.msk.ru [192.168.177.146]) by tsrv.corpit.ru (Postfix) with ESMTP id AF3FE3B71BF; Sat, 23 May 2026 00:49:24 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tls.msk.ru; s=202602; t=1779486560; bh=4GJmcHYljCZZwjgafy8Mgt2lqystmIDIGI238LULHVk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=XwgAZy2+TR9pBA+w7EDPyIJzE+OB08PVExOY/RJHUSUu9c/OpvpsPaUqdWt8TI6SN ZG74yGRS/8C+4+qbPjkxQxuFcecTrRpEBbvwp+g9YGu0KOsYEySgFn7Ci7ekYBTwsO LqMHzX40VVQ/bQEyPql93JFTBKo/rxqSZWCViyjwQCkkttFfh9qpTIFhJw+DvqIDgj q+aII7FJ7du5yeJl/AgnurA7vDMNCuStLocrcfaslLcIl5FmBB1uio/5/1tv5vJwdc Z5u2V8Wc6ko2rf0F/ZbRFrK0KCzYHMEWNGPtXoJE5ahB+8O685MzCnD9FbK7PFdt7a HsHqaDgYLsf1Q== From: Michael Tokarev To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Jeuk Kim , Michael Tokarev Subject: [Stable-10.2.3 122/149] hw/ufs: Keep MCQ SQs alive while requests are outstanding Date: Sat, 23 May 2026 00:48:54 +0300 Message-ID: <20260522214923.807017-23-mjt@tls.msk.ru> X-Mailer: git-send-email 2.47.3 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=212.248.84.144; envelope-from=mjt@tls.msk.ru; helo=isrv.corpit.ru X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @tls.msk.ru) X-ZM-MESSAGEID: 1779486751889154100 Content-Type: text/plain; charset="utf-8" From: Jeuk Kim MCQ requests are allocated with their SQ, but can remain in flight on the CQ list or in the SCSI layer after leaving the SQ free list. Reject runtime SQ deletion while any request is still outstanding, and use separate teardown helpers so device exit can still release MCQ queues after child devices have been unrealized. Fixes: 5c079578d2e ("hw/ufs: Add support MCQ of UFSHCI 4.0") Cc: qemu-stable@nongnu.org Signed-off-by: Jeuk Kim (cherry picked from commit 619c2da19a05668dabe7912afb789e50b8635c4d) Signed-off-by: Michael Tokarev diff --git a/hw/ufs/trace-events b/hw/ufs/trace-events index 7734b35f08..6f7ea9c95f 100644 --- a/hw/ufs/trace-events +++ b/hw/ufs/trace-events @@ -44,6 +44,7 @@ ufs_err_mcq_create_sq_invalid_size(uint8_t qid) "invalid = mcq sq size for sqid %" ufs_err_mcq_create_sq_already_exists(uint8_t qid) "mcq sqid %"PRIu8 "alrea= dy exists" ufs_err_mcq_delete_sq_invalid_sqid(uint8_t qid) "invalid mcq sqid %"PRIu8"" ufs_err_mcq_delete_sq_not_exists(uint8_t qid) "mcq sqid %"PRIu8 "not exist= s" +ufs_err_mcq_delete_sq_busy(uint8_t qid) "mcq sqid %"PRIu8" has outstanding= requests" ufs_err_mcq_create_cq_invalid_cqid(uint8_t qid) "invalid mcq cqid %"PRIu8"" ufs_err_mcq_create_cq_invalid_size(uint8_t qid) "invalid mcq cq size for c= qid %"PRIu8"" ufs_err_mcq_create_cq_already_exists(uint8_t qid) "mcq cqid %"PRIu8 "alrea= dy exists" diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c index 66f4031852..d63a8f9c9c 100644 --- a/hw/ufs/ufs.c +++ b/hw/ufs/ufs.c @@ -556,6 +556,31 @@ static bool ufs_mcq_create_sq(UfsHc *u, uint8_t qid, u= int32_t attr) return true; } =20 +static bool ufs_mcq_sq_has_outstanding_req(UfsSq *sq) +{ + UfsRequest *req; + uint16_t free_reqs =3D 0; + + QTAILQ_FOREACH(req, &sq->req_list, entry) + { + free_reqs++; + } + + return free_reqs !=3D sq->size; +} + +static void ufs_mcq_free_sq(UfsSq *sq) +{ + qemu_bh_delete(sq->bh); + + for (int i =3D 0; i < sq->size; i++) { + ufs_clear_req(&sq->req[i]); + } + + g_free(sq->req); + g_free(sq); +} + static bool ufs_mcq_delete_sq(UfsHc *u, uint8_t qid) { UfsSq *sq; @@ -572,9 +597,12 @@ static bool ufs_mcq_delete_sq(UfsHc *u, uint8_t qid) =20 sq =3D u->sq[qid]; =20 - qemu_bh_delete(sq->bh); - g_free(sq->req); - g_free(sq); + if (ufs_mcq_sq_has_outstanding_req(sq)) { + trace_ufs_err_mcq_delete_sq_busy(qid); + return false; + } + + ufs_mcq_free_sq(sq); u->sq[qid] =3D NULL; return true; } @@ -617,6 +645,12 @@ static bool ufs_mcq_create_cq(UfsHc *u, uint8_t qid, u= int32_t attr) return true; } =20 +static void ufs_mcq_free_cq(UfsCq *cq) +{ + qemu_bh_delete(cq->bh); + g_free(cq); +} + static bool ufs_mcq_delete_cq(UfsHc *u, uint8_t qid) { UfsCq *cq; @@ -640,8 +674,7 @@ static bool ufs_mcq_delete_cq(UfsHc *u, uint8_t qid) =20 cq =3D u->cq[qid]; =20 - qemu_bh_delete(cq->bh); - g_free(cq); + ufs_mcq_free_cq(cq); u->cq[qid] =3D NULL; return true; } @@ -1884,12 +1917,14 @@ static void ufs_exit(PCIDevice *pci_dev) =20 for (int i =3D 0; i < ARRAY_SIZE(u->sq); i++) { if (u->sq[i]) { - ufs_mcq_delete_sq(u, i); + ufs_mcq_free_sq(u->sq[i]); + u->sq[i] =3D NULL; } } for (int i =3D 0; i < ARRAY_SIZE(u->cq); i++) { if (u->cq[i]) { - ufs_mcq_delete_cq(u, i); + ufs_mcq_free_cq(u->cq[i]); + u->cq[i] =3D NULL; } } } --=20 2.47.3