From nobody Tue Aug 25 04:34:29 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=1779487002; cv=none; d=zohomail.com; s=zohoarc; b=iUONNt5r5wV3T8SvHVdnTDmQeiM0DRNitwlblvrX7EuMVMQHbufwlrJbFoLqSK1VdTRSiOAuFGuc18CvPeu34ug/xsJe3h9d9TRAnXnKEN8j4153CBvwRpl6lT/sKdGMhmfG6/es+QJt37DePeDiqpC+KBMqM9EfCmyKNdxeHJs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779487002; 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=U/7mxBOSUupLTT69cqvNzAA7jcW3xKAIzE+KK490Ikw=; b=HskqasaVX8vrJLwMKPA87N7rce8ibLulpQLV13UDgKIqO50NAq1yPR9ZCjHhbQ9OmgY4jjykWsmVl8I/B3Sh6lZfGrh7CBP7b9f+vOK0EFgFF2PddIjhujBxRcn8aTijhtYNpATZ9EyS2hj0TFbn1VwzZLf+OBHV+mZcjtWGpoQ= 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 1779487002448218.38403539309547; Fri, 22 May 2026 14:56:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQXo9-0000KA-Hy; Fri, 22 May 2026 17:53:30 -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 1wQXo3-0008Uv-AQ; Fri, 22 May 2026 17:53:24 -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 1wQXo0-0004vv-5L; Fri, 22 May 2026 17:53:22 -0400 Received: from tsrv.corpit.ru (tsrv.tls.msk.ru [192.168.177.2]) by isrv.corpit.ru (Postfix) with ESMTP id C40111AFB84; Sat, 23 May 2026 00:49:21 +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 ED9F43B71D3; Sat, 23 May 2026 00:49:25 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tls.msk.ru; s=202602; t=1779486561; bh=3muA5MuiaqixstxYyQMlrapQZkF0eE2rkgCoHkfsYPs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=iQ4zc1CGFdf6YfFD8RykggXUf1X3gd+StDyTxSj6doZEQ6J2haYwMi9i5cGDev29/ XlRkt8VQHc1rskeuexYwNTrAKEmRV5Zn4Q0tsbOW8bOJgslSoulYKnaTrBMhATS8Zf mAmsCoVw3O+FK1MteCqOlXf6nI0UE9+6qzxJrzAqqRW9DJZfRI7vuFJAq1VRdK1Thu zdwdunecR25wwR0u8ytke32skVTiKP90jNWKppHubHkRiA30JMd0jrxxx3OGXSOiPK xUtNmTnysTaTkEYO300C3nSr7DBV9pksqz7Jv3WLMzuH6K8AnDH0orC7hHqLZW+TDF s7wFjJ4RCp2vA== From: Michael Tokarev To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Kevin Wolf , Michael Tokarev Subject: [Stable-10.2.3 142/149] ide-test: Test reset during TRIM Date: Sat, 23 May 2026 00:49:14 +0300 Message-ID: <20260522214923.807017-43-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: 1779487003582154100 Content-Type: text/plain; charset="utf-8" From: Kevin Wolf This is a regression test for the bug fixed in the previous commits, a deadlock between the drain issued by an IDE reset and the TRIM state machine. Signed-off-by: Kevin Wolf Message-ID: <20260421161132.99878-8-kwolf@redhat.com> Signed-off-by: Kevin Wolf (cherry picked from commit 2fa24e9755994f76f08ea2452215eb50f26f4c21) Signed-off-by: Michael Tokarev diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c index c6dcb2c074..721e78170b 100644 --- a/tests/qtest/ide-test.c +++ b/tests/qtest/ide-test.c @@ -41,8 +41,11 @@ #define IDE_PCI_FUNC 1 =20 #define IDE_BASE 0x1f0 +#define IDE_BASE2 0x3f6 #define IDE_PRIMARY_IRQ 14 =20 +#define IDE_CTRL_RESET 0x04 + #define ATAPI_BLOCK_SIZE 2048 =20 /* How many bytes to receive via ATAPI PIO at one time. @@ -99,6 +102,7 @@ enum { =20 CMDF_ABORT =3D 0x100, CMDF_NO_BM =3D 0x200, + CMDF_NO_WAIT =3D 0x400, }; =20 enum { @@ -228,21 +232,21 @@ static uint8_t wait_dma_completion(QTestState *qts, Q= PCIDevice *dev, return status; } =20 -static int send_dma_request(QTestState *qts, int cmd, uint64_t sector, - int nb_sectors, PrdtEntry *prdt, int prdt_entr= ies, - void(*post_exec)(QPCIDevice *dev, QPCIBar ide_= bar, - uint64_t sector, int nb_secto= rs)) +static int send_dma_request_dev(QTestState *qts, QPCIDevice *dev, + QPCIBar bmdma_bar, QPCIBar ide_bar, int cm= d, + uint64_t sector, int nb_sectors, + PrdtEntry *prdt, int prdt_entries, + void(*post_exec)(QPCIDevice *dev, + QPCIBar ide_bar, + uint64_t sector, + int nb_sectors)) { - QPCIDevice *dev; - QPCIBar bmdma_bar, ide_bar; uintptr_t guest_prdt; size_t len; bool from_dev; uint8_t status; int flags; =20 - dev =3D get_pci_device(qts, &bmdma_bar, &ide_bar); - flags =3D cmd & ~0xff; cmd &=3D 0xff; =20 @@ -308,8 +312,28 @@ static int send_dma_request(QTestState *qts, int cmd, = uint64_t sector, qpci_io_writeb(dev, bmdma_bar, bmreg_cmd, 0); } =20 + if (flags & CMDF_NO_WAIT) { + return 0; + } + status =3D wait_dma_completion(qts, dev, bmdma_bar, ide_bar); =20 + return status; +} + +static int send_dma_request(QTestState *qts, int cmd, uint64_t sector, + int nb_sectors, PrdtEntry *prdt, int prdt_entr= ies, + void(*post_exec)(QPCIDevice *dev, QPCIBar ide_= bar, + uint64_t sector, int nb_secto= rs)) +{ + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar; + uint8_t status; + + dev =3D get_pci_device(qts, &bmdma_bar, &ide_bar); + status =3D send_dma_request_dev(qts, dev, bmdma_bar, ide_bar, + cmd, sector, nb_sectors, prdt, prdt_entr= ies, + post_exec); free_pci_device(dev); =20 return status; @@ -457,6 +481,60 @@ static void test_bmdma_trim(void) test_bmdma_teardown(qts); } =20 +static void test_bmdma_trim_reset(void) +{ + QTestState *qts; + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar, ide_bar2; + uint8_t status; + const uint64_t trim_range[] =3D { + trim_range_le(0, 2), + trim_range_le(6, 8), + }; + size_t len =3D 512; + uint8_t *buf; + uintptr_t guest_buf; + PrdtEntry prdt[1]; + + qts =3D ide_test_start( + "-blockdev file,filename=3D%s,node-name=3Dimg " + "-blockdev blkdebug,image=3Dimg,node-name=3Ddbg,discard=3Dunmap," + "inject-error.0.event=3Dnone,inject-error.0.iotype=3Ddiscard," + "inject-error.0.errno=3D0,inject-error.0.delay-ns=3D1000000 " + "-device ide-hd,drive=3Ddbg,bus=3Dide.0", + tmp_path[0]); + qtest_irq_intercept_in(qts, "ioapic"); + + guest_buf =3D guest_alloc(&guest_malloc, len); + prdt[0].addr =3D cpu_to_le32(guest_buf), + prdt[0].size =3D cpu_to_le32(len | PRDT_EOT), + + dev =3D get_pci_device(qts, &bmdma_bar, &ide_bar); + ide_bar2 =3D qpci_legacy_iomap(dev, IDE_BASE2); + + buf =3D g_malloc(len); + + /* TRIM request with two segments */ + *((uint64_t *)buf) =3D trim_range[0]; + *((uint64_t *)buf + 1) =3D trim_range[1]; + + qtest_memwrite(qts, guest_buf, buf, 2 * sizeof(uint64_t)); + + send_dma_request_dev(qts, dev, bmdma_bar, ide_bar, CMD_DSM | CMDF_NO_W= AIT, 0, 1, prdt, + ARRAY_SIZE(prdt), NULL); + + /* Reset the device while the first segment is in flight */ + qpci_io_writeb(dev, ide_bar2, 0, IDE_CTRL_RESET); + + status =3D wait_dma_completion(qts, dev, bmdma_bar, ide_bar); + g_assert_cmphex(status, =3D=3D, BM_STS_INTR); + assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), DF | ERR); + + free_pci_device(dev); + g_free(buf); + test_bmdma_teardown(qts); +} + /* * This test is developed according to the Programming Interface for * Bus Master IDE Controller (Revision 1.0 5/16/94) @@ -1138,6 +1216,7 @@ int main(int argc, char **argv) =20 qtest_add_func("/ide/bmdma/simple_rw", test_bmdma_simple_rw); qtest_add_func("/ide/bmdma/trim", test_bmdma_trim); + qtest_add_func("/ide/bmdma/trim_reset", test_bmdma_trim_reset); qtest_add_func("/ide/bmdma/various_prdts", test_bmdma_various_prdts); qtest_add_func("/ide/bmdma/no_busmaster", test_bmdma_no_busmaster); =20 --=20 2.47.3