From nobody Sat Feb 7 08:44:56 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1768452893; cv=none; d=zohomail.com; s=zohoarc; b=A3RCzNPyMUTvunLYNzdjf4F12lP6Bc5z++5D2rKPPDJ/VojgJLOT9svhMsZ1ZqRA/Spa5PgysdrpmHiiCDjwEP9KASMZVCsT0S84yTeOKgBGp11MAz+utbsDxW1g9I40P17cp0f1Y6Su/PkNYCVhriAJefka1pEUOEX+oxrX1cw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768452893; 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=TZnaNNsZCNmN4jqFYzbrceDrs1tItqnZdPNYCcrgRIU=; b=eh7wFg+2+Osf5LqWK4x/B4Yu4tH4BlrteBvgqlc3QdWsmcLT6x7/E9ambT2nDfNdwHjG90joWJRy+QDggCF+0qu4UXmNZU5fiEY1+UDWVdSJLt9KBIBBCSkPfLqW/rDZ27RNRzvPOgzM1KMlTXMOsJLhC3Nuuw1DZUxRqXbXxV4= 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768452893616453.18613332430016; Wed, 14 Jan 2026 20:54:53 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgFNh-0001y4-PD; Wed, 14 Jan 2026 23:54:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgFNg-0001v7-0h for qemu-devel@nongnu.org; Wed, 14 Jan 2026 23:54:48 -0500 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vgFNe-00072I-CS for qemu-devel@nongnu.org; Wed, 14 Jan 2026 23:54:47 -0500 Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-81f4c0e2b42so285897b3a.1 for ; Wed, 14 Jan 2026 20:54:46 -0800 (PST) Received: from jeuk-MS-7D42.. ([175.119.5.143]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f8e4b4110sm1141426b3a.10.2026.01.14.20.54.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Jan 2026 20:54:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768452885; x=1769057685; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TZnaNNsZCNmN4jqFYzbrceDrs1tItqnZdPNYCcrgRIU=; b=dd+czx1Sbzn6VZVF6IdYXez1TaguCWq0sHZ1vf6RmmnPpm9IIUlEpofxXD8OJTOk95 AjccPa+s/msB+pXGKga6KByBOvFP1dhXJQvpwXrrTPcsieoDY6RaeddO01E+iavdfHvH icPuSC1MUjZmOJ3Az/nQOsxI5/SpkJmPLDNWdTjSbieatdrOnUFWzkAlId/TLnWQr2Zm HnVHmtmbrg4LE8w+ORQFoGp/2f66GWvmFTKgVIQ2j6lpaTu7ktURnsfCz+rI+OYd7zY5 Tf56BjQprsPMeMdlQgwi8Q9eMSOaucS55c4mxw4Yn6o2lpEBDw6UTcojuDpHE+SJYZ2x nteg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768452885; x=1769057685; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=TZnaNNsZCNmN4jqFYzbrceDrs1tItqnZdPNYCcrgRIU=; b=XJHVsEfyXUEknXzoHr7eKnxA3To30VS9u2ODg6HHa5XxDIu1caN28S4q/2lFHxwmoh yxY4fPYkk0b7zgcMlefkleWT7544jxUAMBzsKCm/7qdTDRURsjNF+M75enmtCNi7CU77 Tx+hRKB1CF61OJnvI0rp08C5adjGMoR4eXK4loYUS9Hm7vFHVmZYlY1v5Rkjn7RfkUdy UixIVwrvI83wgYe9KkL9tjN6ymu50A3f+BFef0zHYkQClZr5FlK9Pu+Loe9O54p0TdQ/ jTPCkBKBCAMJIdJ+EGq48MqHgeJUqVLalSKGFV0y7sb2Nm1BMpao+CNqdK55iFTnKlNE G4Yg== X-Gm-Message-State: AOJu0YyH8YNgO510dMf8ORZMY7B8P5l81rYbc9/MnT481xlr5bqjefez gYcNTHwGtIDQ+5PY8Y3b2J7YJoOReLBVlD/lps25YE+jwCEMutOVZVutyh2MXQ== X-Gm-Gg: AY/fxX7tRsLahMtbA62GcEAkbuKs8uzYbRC8lL2BJZHk14qSC17eXNadegZNm6mN432 rYv2MqNSajXzyaBzPP0/3eZCK7TSXrc7uRd3GpoiJCiRcEzMID2MLOHpd4rRda3waBbudWzp8bp +jMoSZhNQCPyAalnkWvpmFsy9roOIFfO+9UoW56T2RTO3SNtgkLxGErxNS6VVJFI0D877//VJkh 2Zop/V/6xtFEXNnoDubvSfNy50lPgWx/duRA6XOs52V/PepOD+41UL9L+WYqB7QlPX4Jvolkfg6 VlQhRwyVmGhsDN7P+oGP+avuorTboMrnFYqZat9fscV04O7EQyRLEzFCjsv0ZA/soAl22QmMwbu Wd36cdc1cEM8Np6JnlZ+FyAPkUpGiH3y+Eq6qfQ7em124rC8melyWLB5SkynQU2GUq6xi5AblyC Lm19A7W8nNCQaxKg== X-Received: by 2002:a05:6a00:ab84:b0:81f:5acb:55eb with SMTP id d2e1a72fcca58-81f81d1356emr5342454b3a.6.1768452884570; Wed, 14 Jan 2026 20:54:44 -0800 (PST) From: Jeuk Kim To: qemu-devel@nongnu.org, richard.henderson@linaro.org Cc: pbonzini@redhat.com, qemu-block@nongnu.org, jeuk20.kim@samsung.com, j-young.choi@samsung.com, Jeuk Kim Subject: [PULL 1/3] hw/ufs: Ensure DBC of PRDT uses only lower 18 bits Date: Thu, 15 Jan 2026 13:53:59 +0900 Message-ID: X-Mailer: git-send-email 2.43.0 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=lists.gnu.org; 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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42e; envelope-from=jeuk20.kim@gmail.com; helo=mail-pf1-x42e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @gmail.com) X-ZM-MESSAGEID: 1768452894841158500 Content-Type: text/plain; charset="utf-8" The UFS spec defines the PRDT data byte count as an 18-bit field. This commit masks the value to the lower 18 bits to prevent incorrect transfer lengths and ensure compliance. Signed-off-by: Jeuk Kim --- hw/ufs/ufs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c index cab42ae7b6..4ee6755d82 100644 --- a/hw/ufs/ufs.c +++ b/hw/ufs/ufs.c @@ -224,7 +224,8 @@ static MemTxResult ufs_dma_read_prdt(UfsRequest *req) =20 for (uint16_t i =3D 0; i < prdt_len; ++i) { hwaddr data_dma_addr =3D le64_to_cpu(prd_entries[i].addr); - uint32_t data_byte_count =3D le32_to_cpu(prd_entries[i].size) + 1; + uint32_t data_byte_count =3D + le32_to_cpu(prd_entries[i].size & 0x3ffff) + 1; qemu_sglist_add(req->sg, data_dma_addr, data_byte_count); req->data_len +=3D data_byte_count; } --=20 2.43.0 From nobody Sat Feb 7 08:44:56 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1768452898; cv=none; d=zohomail.com; s=zohoarc; b=JRDYN1WUPMO07x/ukcIB4YWSqZU8wXQ1w8sAT5vmhUZAk7i/QvxeIyXtJ2UULc/FAY6nf7xy+T7WXLCRmO6WOZTrp8coaLG5ChqrYbeH1BaorTQQhKX6Oo6Sy3+MAWNKDYuVdbtPF/vS0GMecc5ZUWw79XjlqFe7XEJpP8SXs1c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768452898; 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=1HcDaCEOBouUMxSZzU9eT7F74w1l/7SCZiWk9i+TCm0=; b=XKKi7IGPVd3065uildN128/iqngQA52R015YGOJbJ/IeThou6CByX8miKw9XP/Whf4FclCFUkhdQoIag0GglfjwnU7HNmC8PM/POWDhZENZr3qGVdhiGkUZc3CpEZkDK8W8TMmOAG9lF5CBK+uLgv50pfD8G/suzGmRX1FGlMlM= 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768452898253941.4268804693695; Wed, 14 Jan 2026 20:54:58 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgFNk-00022U-EJ; Wed, 14 Jan 2026 23:54:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgFNi-0001zP-Jx for qemu-devel@nongnu.org; Wed, 14 Jan 2026 23:54:50 -0500 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vgFNg-00076R-Ra for qemu-devel@nongnu.org; Wed, 14 Jan 2026 23:54:50 -0500 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-81f3b4ae67bso261295b3a.1 for ; Wed, 14 Jan 2026 20:54:48 -0800 (PST) Received: from jeuk-MS-7D42.. ([175.119.5.143]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f8e4b4110sm1141426b3a.10.2026.01.14.20.54.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Jan 2026 20:54:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768452887; x=1769057687; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1HcDaCEOBouUMxSZzU9eT7F74w1l/7SCZiWk9i+TCm0=; b=Kj1JV+8dL5t0WM4eksyRVbS041dkN6J6GAxyehhpH8dpg+9Ln0bnpR5I3YobJNiwUk gDH+9+SQerrNxviy569qxzbvLpYyTqoA/5B/NFAYq1x+zc+d7C7UFtIER92wD/+qLNqw 5TsCpogrNDPpXriar4RZcmsKoIaHk0HUyOu9bTn2uX4Gue27PTUiXA5ayIrE41Rmopxt z1ZR0ALO76q6BVQGJUBfd8zkBO4jbF/0Wfee6fJCYKLDc/4teEwzq3yoLf2YaZfNqqGd qutkbSjB3p+8RyDtJe+LIBEYrhQa2i+bwJDgOqpb4UXzWDlH3DfjczCJ8qpL3gqwpuEa Pcdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768452887; x=1769057687; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=1HcDaCEOBouUMxSZzU9eT7F74w1l/7SCZiWk9i+TCm0=; b=FkScAzNivcCnHMJd/5xSavEbrsywIsB1Y/5T1CXAS3zJHtid0aeKDumpb5hSWDHw6Z WojXhekRC0r6WzGJZqfKVm/GPmBPEALSpVwt2tC4eJ5XQlxxACibCpf6KqK9cYxURo8L 2UmHovfxa5Ap1iGFDfMbWiuwHwFKmMwU+wSuM2VQTSJBID6C6evgwCo0yAANI/swBcni 5wzOx5W+cfT5L6+m/V2hNw1IDoU6QyTUpV4tNA0zA9LrHmZpVZ1vYGvf3IRfrFdBogoK OPSATqqapEA57fNVuqvwL9n0+m6+OFtmOuADsZ703l0MOj8s9iMok1Q+eipUXie4RMb4 4rKw== X-Gm-Message-State: AOJu0YxkVKRc+ZK8/hISNvvxJY/cPyiqPH3uXwk1b+kDL9rRsPi2P/ti fhi2BOQ7kYjhmvfvYlYZsOCxXgWvZr7KG+XmH9kvL4IiMQJidkqYkw8GIjf9ag== X-Gm-Gg: AY/fxX4BSd6ZlbRnWjrVSoe83aC9j7SnnOSZ43WGy2dPhWswdvSzE+WbfiX5rx5ei/E sHej6HSrE5aCB05kG4yj9HidTEBuek7FFyV51SBsg3CxhIK5mlVCiT4IYgbcEd4vS3GSBcSQ2Uv DIGRB7SjrQyE6pvltJqfwgTiLGYe+HFkYcwJCO1szc98Spg2Ovp7g9uRW374md3+fIh9FznXDhu g2cbFcxR9Pz24kWpQrHvKabvlyiilW9x4lNWovGzgXrsk/y1CoxBweStAFA8DALjvJdVDNM6+wW Ti7VXgsNAJEsx/rg0YYAnz8gC0ZcD9fFfkSihTyW3Aqbr3d7+OnTfvWC0p4UynrId8FiVl2N76Q giNQRsGif1uvfEYPGtTrqU+VMNeA6zYcKg/cPAo8rPzS+xSgGtUhvlNQafVMCoImgF0KtRsGlXE pyxahtkJJcfTNqwg== X-Received: by 2002:a05:6a00:a248:b0:81c:5694:c544 with SMTP id d2e1a72fcca58-81f81f80beamr4679691b3a.56.1768452887068; Wed, 14 Jan 2026 20:54:47 -0800 (PST) From: Jeuk Kim To: qemu-devel@nongnu.org, richard.henderson@linaro.org Cc: pbonzini@redhat.com, qemu-block@nongnu.org, jeuk20.kim@samsung.com, j-young.choi@samsung.com, Ilia Levi Subject: [PULL 2/3] hw/ufs: Fix mcq completion queue wraparound Date: Thu, 15 Jan 2026 13:54:00 +0900 Message-ID: <6833aae1cfbbc83d8458ee1bba33ca4f71f71e55.1768452598.git.jeuk20.kim@samsung.com> X-Mailer: git-send-email 2.43.0 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=lists.gnu.org; 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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=jeuk20.kim@gmail.com; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @gmail.com) X-ZM-MESSAGEID: 1768452898987158500 Content-Type: text/plain; charset="utf-8" From: Ilia Levi Currently, ufs_mcq_process_cq() writes to the CQ without checking whether there is available space. This can cause CQ entries to be discarded and overwritten. The solution is to stop writing when CQ is full and exert backpressure on the affected SQs. This is similar to how NVMe CQs operate. Signed-off-by: Ilia Levi Reviewed-by: Jeuk Kim Signed-off-by: Jeuk Kim --- hw/ufs/ufs.c | 20 +++++++++++++++++++- hw/ufs/ufs.h | 9 +++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c index 4ee6755d82..b41eec0b7e 100644 --- a/hw/ufs/ufs.c +++ b/hw/ufs/ufs.c @@ -447,6 +447,10 @@ static void ufs_mcq_process_cq(void *opaque) =20 QTAILQ_FOREACH_SAFE(req, &cq->req_list, entry, next) { + if (ufs_mcq_cq_full(u, cq->cqid)) { + break; + } + ufs_dma_write_rsp_upiu(req); =20 req->cqe.utp_addr =3D @@ -469,6 +473,12 @@ static void ufs_mcq_process_cq(void *opaque) tail =3D (tail + sizeof(req->cqe)) % (cq->size * sizeof(req->cqe)); ufs_mcq_update_cq_tail(u, cq->cqid, tail); =20 + if (QTAILQ_EMPTY(&req->sq->req_list) && + !ufs_mcq_sq_empty(u, req->sq->sqid)) { + /* Dequeueing from SQ was blocked due to lack of free requests= */ + qemu_bh_schedule(req->sq->bh); + } + ufs_clear_req(req); QTAILQ_INSERT_TAIL(&req->sq->req_list, req, entry); } @@ -778,10 +788,18 @@ static void ufs_write_mcq_op_reg(UfsHc *u, hwaddr off= set, uint32_t data, } opr->sq.tp =3D data; break; - case offsetof(UfsMcqOpReg, cq.hp): + case offsetof(UfsMcqOpReg, cq.hp): { + UfsCq *cq =3D u->cq[qid]; + + if (ufs_mcq_cq_full(u, qid) && !QTAILQ_EMPTY(&cq->req_list)) { + /* Enqueueing to CQ was blocked because it was full */ + qemu_bh_schedule(cq->bh); + } + opr->cq.hp =3D data; ufs_mcq_update_cq_head(u, qid, data); break; + } case offsetof(UfsMcqOpReg, cq_int.is): opr->cq_int.is &=3D ~data; break; diff --git a/hw/ufs/ufs.h b/hw/ufs/ufs.h index 3799d97f30..13d964c5ae 100644 --- a/hw/ufs/ufs.h +++ b/hw/ufs/ufs.h @@ -200,6 +200,15 @@ static inline bool ufs_mcq_cq_empty(UfsHc *u, uint32_t= qid) return ufs_mcq_cq_tail(u, qid) =3D=3D ufs_mcq_cq_head(u, qid); } =20 +static inline bool ufs_mcq_cq_full(UfsHc *u, uint32_t qid) +{ + uint32_t tail =3D ufs_mcq_cq_tail(u, qid); + uint16_t cq_size =3D u->cq[qid]->size; + + tail =3D (tail + sizeof(UfsCqEntry)) % (sizeof(UfsCqEntry) * cq_size); + return tail =3D=3D ufs_mcq_cq_head(u, qid); +} + #define TYPE_UFS "ufs" #define UFS(obj) OBJECT_CHECK(UfsHc, (obj), TYPE_UFS) =20 --=20 2.43.0 From nobody Sat Feb 7 08:44:56 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1768452901; cv=none; d=zohomail.com; s=zohoarc; b=Il5JxkJmnf9d8kGsqrNR2zuj0n9DiLP16candZr2NBXGTM9iGvNANECm+tW431RjGgF6IW96/SVR210oMrRIh/6k/9CjCF/ToIb0IcfXUNDy094Az1ZWiKLIUEF0vIYu+FJSWZ10w4VQISuYizZ/ssXfE5rh9TsWnrxMyEy7TCQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768452901; 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=0rJHXNit0JKho2PSdVDxe5tw9YboCOURabBlYsSPHIE=; b=YNBRfDCxbNZOef9eV0fWSXcvo/HGadzWWY8z9PpZx4mQyUrRd0Q9sqj/CKHG15sf47cnugRtt5Npb/s2+e5LkcTJXo+tIqjAIB0YOpY7L9o3qg/3OKWQOOYEBbvVpMy3VshAhyjNH4HzMpMHpQOKyjTJ81kSc/qpNjttH63XSzg= 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768452901228249.49289520890193; Wed, 14 Jan 2026 20:55:01 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgFNn-00027A-ED; Wed, 14 Jan 2026 23:54:55 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgFNl-00024R-6U for qemu-devel@nongnu.org; Wed, 14 Jan 2026 23:54:53 -0500 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vgFNj-00076t-DK for qemu-devel@nongnu.org; Wed, 14 Jan 2026 23:54:52 -0500 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-c2dc870e194so211003a12.2 for ; Wed, 14 Jan 2026 20:54:51 -0800 (PST) Received: from jeuk-MS-7D42.. ([175.119.5.143]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f8e4b4110sm1141426b3a.10.2026.01.14.20.54.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Jan 2026 20:54:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768452890; x=1769057690; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0rJHXNit0JKho2PSdVDxe5tw9YboCOURabBlYsSPHIE=; b=RXtPfpJZVWV+auA12PLFxS8O8QJ9TBIa4g2V1MxyaVC9ueUyPTADxKH/yNAZzb30G9 rDMBO7dkOexPPEjjbl28WF6zCFeDt4RZXpxh08jGziUZPceDBiz+TRaqglayPt4PvNPO OsksBXJ0N9vefg1Ugh+uRa+JM3/QEcZHyl+LctyQ4/zJtGt7hLRvF4L9tCpAruLpg1Yx 7OS2ilUh1VvEWJFC+TB3GUrcXfcRtTAR5MMvuJtGtndm3oPqGDhbaQYrPyRYe+YyjVu1 EZFPZNvFaWg5twVWUgC37XIa89EvPKcFJSVhSKB53EKFrKruKYmvwuUXxpmK6B4cc7Hu hMbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768452890; x=1769057690; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0rJHXNit0JKho2PSdVDxe5tw9YboCOURabBlYsSPHIE=; b=M7/bwgL1J8r3BPiYpZZL6RrOEdlEqJykOTLbtPr6OeROdM+KBV2Ol2iM0diA1j6DJz VJ7+5M6kKT3Y3Gzj7xOoCGzbGZjfmACrc6QOaMpRnQCcab7RtvyETykNhwZvS03b28vO m1btvA3Kmym6vLK4EJ3vz+2Z/cxsiwZukBwNbR2o8SG3S7S2e+HF7QGV8uT0eDVFxy8+ MvI2ZQISY/dRbpmkjt2bP5xIi4b7hBnZNuPaAakpXW+0bNhfX42KgsxfvG7NCCdSl4CJ YfKkbEzNlwJAZbWwCAMx6MXl2owIBGwhp8edQ8ccVqg663vFy7iyZ529ECtqHbSZJLE3 HZpg== X-Gm-Message-State: AOJu0YzJcg/EoTBcp9rFpB00tJUu+m0GdlFGxG74UEpFhwT4JE2rWHlx ORFKiDF/52reynbvnJ/D5+gqlrykv46zHN4O7qGeXeR3VhtpxCFD31ktz/x7sQ== X-Gm-Gg: AY/fxX6Jnzz9itUyi8pmFVvt1StrqkZdAUwtnfYXLtmdQOis0FdG2Sl1mqeRmQxvKrX 86sq9OjEkkUsyZw9k0i7EpNzqPHuxzrnr6wPlTuJkQt8FjlJ9jZI8Hq+Lb45TzmOD6du6rH+nUK /ghfPGH4yG6R+LyO9jkG3ifkZz0GMKUpyWEulyzXKn9lK0fZsutHpAb57TpvHF36fcviPX6Yr1s hn6+2MZjpPGfLifxtS+mtgQDOdvyDFxfCTPNSSlGWASyOR2uTu/0AQioiZ13sOYgdexlK0N1XzA YCdtEdRgp1zslSbdFA7OKhjDYGxGSeLPb9y4yCV+z13XqAtOlXAnW5K64T4PTsOB9wEj0GO/QYc aS5Z8agyQUORqluvLnzjkHe+bKdF1YR55dtQeiPoled9WcT4VYraEErRnJczdkQpjdbcAEDnYHq PozLPhjWfXxlUfVA== X-Received: by 2002:a05:6a00:420b:b0:81f:3cd5:2069 with SMTP id d2e1a72fcca58-81f81d13491mr5272132b3a.4.1768452889755; Wed, 14 Jan 2026 20:54:49 -0800 (PST) From: Jeuk Kim To: qemu-devel@nongnu.org, richard.henderson@linaro.org Cc: pbonzini@redhat.com, qemu-block@nongnu.org, jeuk20.kim@samsung.com, j-young.choi@samsung.com, Ilia Levi , Fabiano Rosas Subject: [PULL 3/3] tests/qtest/ufs-test: Add test for mcq completion queue wraparound Date: Thu, 15 Jan 2026 13:54:01 +0900 Message-ID: <0995e513c7c46412ccb5b11a2e71b9c7145997b0.1768452598.git.jeuk20.kim@samsung.com> X-Mailer: git-send-email 2.43.0 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=lists.gnu.org; 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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=jeuk20.kim@gmail.com; helo=mail-pg1-x52a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @gmail.com) X-ZM-MESSAGEID: 1768452902923158500 Content-Type: text/plain; charset="utf-8" From: Ilia Levi Added a test that sends 32 NOP Out commands asynchronously. Since the CQ has 31 entries by default, this tests the scenario where CQ processing needs to wait for space to become available. Additionally, added two minor fixes to existing tests: * advance CQ head after reading from CQ * initialize command descriptor slots bitmap in ufs_init() Signed-off-by: Ilia Levi Acked-by: Fabiano Rosas Reviewed-by: Jeuk Kim Signed-off-by: Jeuk Kim --- tests/qtest/ufs-test.c | 126 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/tests/qtest/ufs-test.c b/tests/qtest/ufs-test.c index 4867ccf08a..ff9835735c 100644 --- a/tests/qtest/ufs-test.c +++ b/tests/qtest/ufs-test.c @@ -166,6 +166,7 @@ __ufs_send_transfer_request_mcq(QUfs *ufs, uint8_t lun, cqhp =3D ufs_rreg(ufs, ufs->cqdao[TEST_QID]); cqentry_addr =3D ufs->cqlba[TEST_QID] + cqhp; qtest_memread(ufs->dev.bus->qts, cqentry_addr, &cqentry, sizeof(cqentr= y)); + cqhp =3D (cqhp + sizeof(UfsCqEntry)) % (QUEUE_SIZE * sizeof(UfsCqEntry= )); ufs_wreg(ufs, ufs->cqdao[TEST_QID], cqhp); =20 return cqentry.status; @@ -208,6 +209,81 @@ static enum UtpOcsCodes ufs_send_nop_out(QUfs *ufs, Ut= pUpiuRsp *rsp_out) return ret; } =20 +static bool ufs_mcq_sq_has_space(QUfs *ufs) +{ + uint32_t sqhp =3D ufs_rreg(ufs, ufs->sqdao[TEST_QID]); + uint32_t sqtp =3D ufs_rreg(ufs, ufs->sqdao[TEST_QID] + 0x4); + uint32_t next_sqtp =3D + (sqtp + sizeof(UfsSqEntry)) % (QUEUE_SIZE * sizeof(UfsSqEntry)); + return next_sqtp !=3D sqhp; +} + +static void +__ufs_send_transfer_request_mcq_async(QUfs *ufs, uint8_t lun, + const UtpTransferReqDesc *utrd) +{ + uint32_t sqtp; + uint64_t utrd_addr; + + /* Wait for SQ space */ + while (!ufs_mcq_sq_has_space(ufs)) { + qtest_clock_step(ufs->dev.bus->qts, 100); + } + + sqtp =3D ufs_rreg(ufs, ufs->sqdao[TEST_QID] + 0x4); + utrd_addr =3D ufs->sqlba[TEST_QID] + sqtp; + qtest_memwrite(ufs->dev.bus->qts, utrd_addr, utrd, sizeof(*utrd)); + sqtp =3D (sqtp + sizeof(UfsSqEntry)) % (QUEUE_SIZE * sizeof(UfsSqEntry= )); + ufs_wreg(ufs, ufs->sqdao[TEST_QID] + 0x4, sqtp); +} + +static int ufs_mcq_send_nop_out_async(QUfs *ufs) +{ + int cmd_desc_slot =3D alloc_cmd_desc_slot(ufs); + uint64_t req_upiu_addr =3D + ufs->cmd_desc_addr + cmd_desc_slot * UTP_COMMAND_DESCRIPTOR_SIZE; + + /* Build up request upiu */ + UtpUpiuReq req_upiu =3D { 0 }; + req_upiu.header.trans_type =3D UFS_UPIU_TRANSACTION_NOP_OUT; + req_upiu.header.task_tag =3D cmd_desc_slot; + qtest_memwrite(ufs->dev.bus->qts, req_upiu_addr, &req_upiu, + sizeof(req_upiu)); + + /* Build up utp transfer request descriptor */ + UtpTransferReqDesc utrd =3D + ufs_build_req_utrd(req_upiu_addr, UFS_UTP_NO_DATA_TRANSFER, 0); + + /* Send Transfer Request */ + __ufs_send_transfer_request_mcq_async(ufs, 0, &utrd); + + return cmd_desc_slot; +} + +static int ufs_mcq_poll_cq(QUfs *ufs, UfsCqEntry *cqe, uint16_t n_cqe) +{ + uint32_t cqhp, cqtp; + uint64_t cqe_addr; + int ix =3D 0; + + cqhp =3D ufs_rreg(ufs, ufs->cqdao[TEST_QID]); + cqtp =3D ufs_rreg(ufs, ufs->cqdao[TEST_QID] + 0x4); + + while (cqhp !=3D cqtp && ix < n_cqe) { + /* read completion entry */ + cqe_addr =3D ufs->cqlba[TEST_QID] + cqhp; + qtest_memread(ufs->dev.bus->qts, cqe_addr, &cqe[ix], sizeof(cqe[ix= ])); + + /* advance completion queue head pointer */ + cqhp =3D (cqhp + sizeof(UfsCqEntry)) % (QUEUE_SIZE * sizeof(UfsCqE= ntry)); + ix++; + } + + ufs_wreg(ufs, ufs->cqdao[TEST_QID], cqhp); + + return ix; +} + static enum UtpOcsCodes ufs_send_query(QUfs *ufs, uint8_t query_function, uint8_t query_opcode, uint8_t idn, uint8_t index, uint8_t selector, @@ -416,6 +492,7 @@ static void ufs_init(QUfs *ufs, QGuestAllocator *alloc) ufs_wreg(ufs, A_UTRIACR, 0); =20 /* Enable transfer request */ + bitmap_zero(ufs->cmd_desc_bitmap, UFS_MAX_CMD_DESC); ufs->cmd_desc_addr =3D guest_alloc(alloc, UFS_MAX_CMD_DESC * UTP_COMMAND_DESCRIPTOR_SIZE); ufs->data_buffer_addr =3D @@ -679,6 +756,53 @@ static void ufstest_read_write(void *obj, void *data, = QGuestAllocator *alloc) ufs_exit(ufs, alloc); } =20 +static void ufstest_mcq_cq_wraparound(void *obj, void *data, + QGuestAllocator *alloc) +{ + QUfs *ufs =3D obj; + UfsCqEntry cqe[QUEUE_SIZE]; + const int num_requests =3D QUEUE_SIZE; + int i, completed =3D 0; + + ufs_init(ufs, alloc); + + /* Ensure MCQ is supported */ + g_assert_true(ufs->support_mcq); + + for (i =3D 0; i < num_requests; ++i) { + ufs_mcq_send_nop_out_async(ufs); + } + + while (completed !=3D num_requests) { + int n_cqe =3D ufs_mcq_poll_cq(ufs, cqe, ARRAY_SIZE(cqe)); + if (!n_cqe) { + break; + } + + for (i =3D 0; i < n_cqe; ++i) { + uint64_t ucdba; + uint64_t rsp_upiu_addr; + UtpUpiuRsp rsp_upiu; + uint8_t tag; + + g_assert_cmpuint(cqe[i].status, =3D=3D, UFS_OCS_SUCCESS); + + ucdba =3D le64_to_cpu(cqe[i].utp_addr) & MAKE_64BIT_MASK(7, 57= ); + rsp_upiu_addr =3D ucdba + UTP_RESPONSE_UPIU_OFFSET; + qtest_memread(ufs->dev.bus->qts, rsp_upiu_addr, &rsp_upiu, + sizeof(rsp_upiu)); + + tag =3D rsp_upiu.header.task_tag; + release_cmd_desc_slot(ufs, tag); + } + + completed +=3D n_cqe; + } + + g_assert_cmpint(completed, =3D=3D, num_requests); + ufs_exit(ufs, alloc); +} + static void ufstest_query_flag_request(void *obj, void *data, QGuestAllocator *alloc) { @@ -1129,6 +1253,8 @@ static void ufs_register_nodes(void) qos_add_test("init", "ufs", ufstest_init, NULL); qos_add_test("legacy-read-write", "ufs", ufstest_read_write, &io_test_= opts); qos_add_test("mcq-read-write", "ufs", ufstest_read_write, &mcq_test_op= ts); + qos_add_test("mcq-cq-wraparound", "ufs", ufstest_mcq_cq_wraparound, + &mcq_test_opts); qos_add_test("query-flag", "ufs", ufstest_query_flag_request, &io_test_opts); qos_add_test("query-attribute", "ufs", ufstest_query_attr_request, --=20 2.43.0