From patchwork Fri Apr 11 04:41:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047548 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A0A98C36010 for ; Fri, 11 Apr 2025 04:42:54 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u36D8-0003De-U8; Fri, 11 Apr 2025 00:41:51 -0400 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 1u36D5-0003DB-Et; Fri, 11 Apr 2025 00:41:47 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u36D3-0001ah-VA; Fri, 11 Apr 2025 00:41:47 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-22403cbb47fso16550725ad.0; Thu, 10 Apr 2025 21:41:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744346504; x=1744951304; 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=npWwzJvQM/483RZnV/1gsYUruF9uzp3Jiju7pOepVLE=; b=L/SePEEPNsJEwFTyq+zeH6z0pUaUmmDnOi+e5R+GP6QHM+BcV2hiqsYTNN1U9HDEK/ 2TFmU+f3Jbcbr2Cnz/pAl3i1vigNQB3Ec7cTachz1H4P5kxMgw6jQkFqNGO9mCp/5SwA 7L6/nZVuexCIodfiTgZzv9ca5RQvJp/Au6CEcbaSeVJMkvsv2ksb/mHUK55pV4f+Vbmg sbricojPOoA7WitX1cWgXFfyXb+7ptdoCuEiITgHCqamB25KI3j309g/F03LOKzw1M4T PSOEkbpak6FbY2igkrJTwkOJaKFQxYre0BlX46Dkkra3iPLzIjCNfrxDb3b9UxpUnUcS f2Tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744346504; x=1744951304; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=npWwzJvQM/483RZnV/1gsYUruF9uzp3Jiju7pOepVLE=; b=IH4DpPIXokLRDcPRZtw1bUqtjoHgBYobI67C3ny4f70XNlzIxGhz15MQAerYKf1d+D bJXRb4vqkZ8iEkslXY2ztE+pLAYCa8k91HClr3QvWmOi+Vf0Yl3Z2jz9OnOdhS+pItMl PGmq7HnQBrNMF2ggq4SLNS8tAijkNTA/fAwczY5sLGLxUGoIZhS5XGTCD+CJAYC+ZXEw hIkrvFWgNIU9hdJt+tMGBPb++RCDREVmKuVgiSFDWX+FNwYWMR6QILStpXwqzIj11Ju7 YkcVUAKKEpC87KAEtZHZqkukvMakdvwJ7w3j+97F1fPUkcX1AYjVHnytaQQk63Ckperm cvyw== X-Forwarded-Encrypted: i=1; AJvYcCXIN+tULdOcG+Me5DA6MAUTMNnqwjRJid8TpI3NWNkOR3j7ddhtQq2lzGrYUCtvl5LLj4KFuCu0jsiA@nongnu.org X-Gm-Message-State: AOJu0YyDYbLq+VWeSUcQp8vjpFGdg1N5VIhdcSzKuL4VUT40VSNsYolY Uz8opDekifSap0IPd58EreWjyO+G2V5On2mZ2QLrkN960SFrvTf9a24JfQ== X-Gm-Gg: ASbGncsiKLuUdE/NdhIVZvh2qKl2SJOCh0T9I1i7g6bmKp4JnsVxp7P5aOfwbDAOrgW yq+0/pNR4SiHkHvL1uHsrg7ehyYgE0MGZLlOcZ0uH3icnqER0zL3CXycPjOgnwltKaQxY3KB2JP gVDfFqTbf0TkHy86/gYcOz7Q7D5iuoP7Lmrf3YS96V1xAWhfsOqP05eEfKTtg97AYmzUOulUl2q TQUDR4my797qbEawQOkvTsrBzbmUZqBDISJ9QB/4NMhZht5YJd9ajS5WmnU/kil4AB+5i8JBEbg tvZK2yFGDtDqPJWDJiprIIjbBEj/wPQL6kAbik72I+Zo X-Google-Smtp-Source: AGHT+IF584UzOZV0bcCk+SeJdeQms0zTSZ1QIuDLi1EJGiTB8qRjZRqHp2A1WvnJ9swlKW5QOkVPbg== X-Received: by 2002:a17:903:22c4:b0:224:a74:28d2 with SMTP id d9443c01a7336-22bea4c6cbcmr19602515ad.26.1744346503775; Thu, 10 Apr 2025 21:41:43 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7c971e4sm39672745ad.136.2025.04.10.21.41.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:41:43 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-D?= =?utf-8?q?aud=C3=A9?= , qemu-block@nongnu.org Subject: [PATCH v4 1/7] tests/qtest/ahci: unmap pci bar before reusing device Date: Fri, 11 Apr 2025 14:41:23 +1000 Message-ID: <20250411044130.201724-2-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411044130.201724-1-npiggin@gmail.com> References: <20250411044130.201724-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=npiggin@gmail.com; helo=mail-pl1-x62e.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=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org ahci-test double-maps the hba bar in the pending_callback test. Unmap it first, to keep iomaps balanced. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Cc: Akihiko Odaki Reviewed-by: Akihiko Odaki Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/ahci.h | 2 ++ tests/qtest/ahci-test.c | 4 ++++ tests/qtest/libqos/ahci.c | 11 +++++++++++ 3 files changed, 17 insertions(+) diff --git a/tests/qtest/libqos/ahci.h b/tests/qtest/libqos/ahci.h index a0487a1557d..f610bd32a5f 100644 --- a/tests/qtest/libqos/ahci.h +++ b/tests/qtest/libqos/ahci.h @@ -574,7 +574,9 @@ void ahci_clean_mem(AHCIQState *ahci); QPCIDevice *get_ahci_device(QTestState *qts, uint32_t *fingerprint); void free_ahci_device(QPCIDevice *dev); void ahci_pci_enable(AHCIQState *ahci); +void ahci_pci_disable(AHCIQState *ahci); void start_ahci_device(AHCIQState *ahci); +void stop_ahci_device(AHCIQState *ahci); void ahci_hba_enable(AHCIQState *ahci); /* Port Management */ diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c index 88ac6c66ce3..7cae6b58e0c 100644 --- a/tests/qtest/ahci-test.c +++ b/tests/qtest/ahci-test.c @@ -198,6 +198,7 @@ static void ahci_shutdown(AHCIQState *ahci) { QOSState *qs = ahci->parent; + ahci_pci_disable(ahci); ahci_clean_mem(ahci); free_ahci_device(ahci->dev); g_free(ahci); @@ -1418,6 +1419,7 @@ static void test_reset(void) CMD_READ_DMA_EXT, CMD_WRITE_DMA_EXT); ahci_set(ahci, AHCI_GHC, AHCI_GHC_HR); + stop_ahci_device(ahci); ahci_clean_mem(ahci); } @@ -1484,6 +1486,7 @@ static void test_reset_pending_callback(void) sleep(1); /* Start again. */ + stop_ahci_device(ahci); ahci_clean_mem(ahci); ahci_pci_enable(ahci); ahci_hba_enable(ahci); @@ -1502,6 +1505,7 @@ static void test_reset_pending_callback(void) ahci_free(ahci, ptr1); ahci_free(ahci, ptr2); + stop_ahci_device(ahci); ahci_clean_mem(ahci); ahci_shutdown(ahci); diff --git a/tests/qtest/libqos/ahci.c b/tests/qtest/libqos/ahci.c index 34a75b7f43b..bd1994a9208 100644 --- a/tests/qtest/libqos/ahci.c +++ b/tests/qtest/libqos/ahci.c @@ -205,6 +205,11 @@ void ahci_pci_enable(AHCIQState *ahci) } +void ahci_pci_disable(AHCIQState *ahci) +{ + stop_ahci_device(ahci); +} + /** * Map BAR5/ABAR, and engage the PCI device. */ @@ -217,6 +222,12 @@ void start_ahci_device(AHCIQState *ahci) qpci_device_enable(ahci->dev); } +void stop_ahci_device(AHCIQState *ahci) +{ + /* Unmap AHCI's ABAR */ + qpci_iounmap(ahci->dev, ahci->hba_bar); +} + /** * Test and initialize the AHCI's HBA memory areas. * Initialize and start any ports with devices attached. From patchwork Fri Apr 11 04:41:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047545 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 65BA0C369A8 for ; Fri, 11 Apr 2025 04:42:02 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u36DB-0003Ep-KL; Fri, 11 Apr 2025 00:41:54 -0400 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 1u36DA-0003EO-DO; Fri, 11 Apr 2025 00:41:52 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u36D8-0001c1-Kr; Fri, 11 Apr 2025 00:41:52 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-224341bbc1dso14994355ad.3; Thu, 10 Apr 2025 21:41:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744346508; x=1744951308; 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=2lYQSLH9OUcacfFWWtc6NBDhhW0SrOAqjv9niMxwZuU=; b=cAXoeze4C5TBqiXG+X9SXBseHPjSU9ZEd05d5dj4+A6P3WegCmJPVEpfC8q7GMEDxW AHCUM0ByK06iKuYRWW6zuo0M4aY5WaIPgi3UEhNRdj5L9h61Z9Kqn9twTxHcnqoxaE9Z XXKagrCy7ICu/uV/gHsIsyaOduk32iBSCu3gt/0IxOMsWGyopFIyazUdVNSpfa6oK0BA kKtQ8HRKmFPEKznHLAYn/RvFdj5J96JVNIaHTsQbSgjeVHRw7g38K/XeiWZJIgOdYcom gEaaG4Zh9fXc7pVHpel9HG1onmG/pU7DfGf0VxjGADnzAPW2Z2bZgv6K9Ok8Z6Wl149/ y9Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744346508; x=1744951308; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2lYQSLH9OUcacfFWWtc6NBDhhW0SrOAqjv9niMxwZuU=; b=LgaymSZpmbLHJialy7cr+Wz5CbojOfyazVqpPacaVJ+KjVHXMAUIcADqQEMGZRAoAA TZZ/EHw1QeNEhhDaM8TxE3wIbTCB+iaJ+HIi+E5VEnnemnR2f5Qc3fyAcxBcECv6AUp1 Bz+l4wW/ZYLDFC7ptrLEnrEZdw+kz78n2Ik0RIK1YFxoNtfUx+RN4CdIxAXyT/f3FRJl mbGJgECz0a8v3OYNz/KXpBwaG3g9NPWjLyxHhK9AuczwQAVDOc7egkYyV77FTcI9GSju /z7GOxEiLA5ebkmUaOZwSjE2trXTwVQtxJLTljbetvmUGeSB6FHAx/lppSWLm4EHXNxU mz5A== X-Forwarded-Encrypted: i=1; AJvYcCXQI9Pn5bIX5ayFItU55U5N5ADJU6ALGvHs73jjQD2PheAvH8Jgb9TF/Axj2PqxxLX2ueau06EdTQ6c@nongnu.org X-Gm-Message-State: AOJu0Yxp1hxnVsoWbF/1QtEairv4D6fOZvY8oBf3x5Jflcq0kPc8purA JWKplxAl2web5sGi8aOOzBIe30ttfy9qytx1iUaGBl4lUL6TqfBk31xr6g== X-Gm-Gg: ASbGncsyY6FPkHKhzRft/CnjDSmvBPEQqzgR51FSc9frgxmkmNBN2BjGuetyWrI0vZ9 BuoIKOUjtZmS+5IlXiky6wx/KDucaIIFjrjHdg1iPG1Gzjzlza7rWt64GhctAv4meTeuKcx38zs xdcdoyz7sJaohBCojCRnU/F10pyjbVFnMkPognwy1yG5WhBPKghIS+UBWY3JXXsd36xARweDlV8 CtO8aY4JXW93pl67Us+oprk0C9o1M+H5gEQMOz47D3hZTl4heob078dUmV5m9T/4d6xo04+cw6W 5+7r98X5uyDN7SHPByFK6CaYRisX/zIUA+k1YV3lx85R X-Google-Smtp-Source: AGHT+IFst1buBogpUZRva6fTa9aq7I3/mso8A+T7Vpigl3nZioJ+nx/encnx+PQrQW3IRWOCi2BHSA== X-Received: by 2002:a17:903:1c5:b0:223:5ada:88ff with SMTP id d9443c01a7336-22bea4bcf30mr23126625ad.24.1744346508543; Thu, 10 Apr 2025 21:41:48 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7c971e4sm39672745ad.136.2025.04.10.21.41.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:41:48 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-D?= =?utf-8?q?aud=C3=A9?= , qemu-block@nongnu.org Subject: [PATCH v4 2/7] tests/qtest/ahci: don't unmap pci bar if it wasn't mapped Date: Fri, 11 Apr 2025 14:41:24 +1000 Message-ID: <20250411044130.201724-3-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411044130.201724-1-npiggin@gmail.com> References: <20250411044130.201724-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=npiggin@gmail.com; helo=mail-pl1-x62d.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=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org ahci-test has a bunch of tests where the pci bar was not mapped. Avoid unmapping it in these cases, to keep iomaps balanced. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Cc: Akihiko Odaki Cc: Akihiko Odaki Cc: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/ahci-test.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c index 7cae6b58e0c..02c9d54f898 100644 --- a/tests/qtest/ahci-test.c +++ b/tests/qtest/ahci-test.c @@ -85,6 +85,8 @@ static void verify_state(AHCIQState *ahci, uint64_t hba_old) uint64_t hba_base; AHCICommandHeader cmd; + g_assert_cmphex(ahci->hba_bar.addr, ==, hba_old); + ahci_fingerprint = qpci_config_readl(ahci->dev, PCI_VENDOR_ID); g_assert_cmphex(ahci_fingerprint, ==, ahci->fingerprint); @@ -193,18 +195,28 @@ static AHCIQState *ahci_boot(const char *cli, ...) /** * Clean up the PCI device, then terminate the QEMU instance. + * Should be called if ahci_pci_enable (or ahci_boot_and_enable) + * was not used, or device/pci was disabled later. */ -static void ahci_shutdown(AHCIQState *ahci) +static void ahci_shutdown_pci_disabled(AHCIQState *ahci) { QOSState *qs = ahci->parent; - ahci_pci_disable(ahci); ahci_clean_mem(ahci); free_ahci_device(ahci->dev); g_free(ahci); qtest_shutdown(qs); } +/** + * Clean up the PCI device, then terminate the QEMU instance. + */ +static void ahci_shutdown(AHCIQState *ahci) +{ + ahci_pci_disable(ahci); + ahci_shutdown_pci_disabled(ahci); +} + /** * Boot and fully enable the HBA device. * @see ahci_boot, ahci_pci_enable and ahci_hba_enable. @@ -945,7 +957,7 @@ static void test_sanity(void) { AHCIQState *ahci; ahci = ahci_boot(NULL); - ahci_shutdown(ahci); + ahci_shutdown_pci_disabled(ahci); } /** @@ -957,7 +969,7 @@ static void test_pci_spec(void) AHCIQState *ahci; ahci = ahci_boot(NULL); ahci_test_pci_spec(ahci); - ahci_shutdown(ahci); + ahci_shutdown_pci_disabled(ahci); } /** @@ -1143,8 +1155,8 @@ static void test_migrate_sanity(void) ahci_migrate(src, dst, uri); - ahci_shutdown(src); - ahci_shutdown(dst); + ahci_shutdown_pci_disabled(src); + ahci_shutdown_pci_disabled(dst); g_free(uri); } @@ -1182,7 +1194,7 @@ static void ahci_migrate_simple(uint8_t cmd_read, uint8_t cmd_write) /* Verify pattern */ g_assert_cmphex(memcmp(tx, rx, bufsize), ==, 0); - ahci_shutdown(src); + ahci_shutdown_pci_disabled(src); ahci_shutdown(dst); g_free(rx); g_free(tx); @@ -1324,7 +1336,7 @@ static void ahci_migrate_halted_io(uint8_t cmd_read, uint8_t cmd_write) g_assert_cmphex(memcmp(tx, rx, bufsize), ==, 0); /* Cleanup and go home. */ - ahci_shutdown(src); + ahci_shutdown_pci_disabled(src); ahci_shutdown(dst); g_free(rx); g_free(tx); @@ -1388,8 +1400,8 @@ static void test_flush_migrate(void) ahci_command_verify(dst, cmd); ahci_command_free(cmd); - ahci_shutdown(src); - ahci_shutdown(dst); + ahci_shutdown_pci_disabled(src); + ahci_shutdown_pci_disabled(dst); g_free(uri); } @@ -1421,6 +1433,7 @@ static void test_reset(void) ahci_set(ahci, AHCI_GHC, AHCI_GHC_HR); stop_ahci_device(ahci); ahci_clean_mem(ahci); + start_ahci_device(ahci); } ahci_shutdown(ahci); @@ -1508,7 +1521,7 @@ static void test_reset_pending_callback(void) stop_ahci_device(ahci); ahci_clean_mem(ahci); - ahci_shutdown(ahci); + ahci_shutdown_pci_disabled(ahci); } static void test_ncq_simple(void) From patchwork Fri Apr 11 04:41:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047546 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 834F8C36010 for ; Fri, 11 Apr 2025 04:42:15 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u36DG-0003GJ-Sc; Fri, 11 Apr 2025 00:41:58 -0400 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 1u36DF-0003FX-3T; Fri, 11 Apr 2025 00:41:57 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u36DD-0001db-FX; Fri, 11 Apr 2025 00:41:56 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-223f4c06e9fso16032885ad.1; Thu, 10 Apr 2025 21:41:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744346513; x=1744951313; 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=/o7YYwGycbMB48G0KCdsMRvKzBvHTyod2rEkRdfLkf8=; b=DQB+r/rWKOcdIDHkzTO4igRwdhmty9EyiWv3tCuW657gRaXLCiFum85rXphTzllYHd SME3In3e9IYX/uoOuScmuG1kzslSLoOYcDE+BtKEQ3pJCXd4t3Ndvfmv4i72lg5/QuA2 OGOHFcWqPlq4hNtE7lx25odpUQDE3QgSxszIFobHtkoRIcZsID994EC5tAgZLWeKB5kQ iVji7y7gm2g59ZsvmsaDsUH6Watuv/77lkK6sneSS3jgbxGOn/FKnnOOVFqv8HWLB4w+ eYcYsALDe7JGGDteM60+xDXJMiZoxRgKnFfSbF/QDsEcldKNdHYVimzJL2U1IVDt8ako uWmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744346513; x=1744951313; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/o7YYwGycbMB48G0KCdsMRvKzBvHTyod2rEkRdfLkf8=; b=V3w4P9MZ2+uUH4MEiKlej8NsRG+OUVBQlr+yfg85NVbdszA71fFbMOHHc4mJhwsH6Z SwG4krHDVaGiGYDsFY+v7ENmABsfrk7WPdei4GbX1hpiMWWI96Oc+AjsvYeB9m3QLxmZ oPPsUNyGGr2zYFfOH9G63ei7AnJLPX9E7+FV2UGyrsp4The4ER71s/u4skmDi9L1NKOE j28q4scx5eSQsephgTj+8iDadzSkSrpewuJV8Qv0dJMAmNetBE7KgyPS81NY9CZujeAb UHgYKUJ0PgL0n05gKZdLMtQE13dEOCU1i9cWQT+YDr1gfFEZ2GyExiSFN3G89JQhcDHc +RYw== X-Forwarded-Encrypted: i=1; AJvYcCVsi/hNAUHHIamX3CatvbcJpEjld9GiEPERKf0gtv5pUFHYs/HBF0hDgkixHtNscKsyKLtifhsE1xQ4@nongnu.org X-Gm-Message-State: AOJu0YzEkq65X7vNzP/byBPRh/RD9i3JQZM7ym7/i9jNOyFH/TDmPpMb hA07cGGWfD/oyCUZKzSSAbqRbHK647xOk7uPuf1Ggbo7kADvo+LF7hDILA== X-Gm-Gg: ASbGncs7fLMAMGNw9E+fBve87r8fyyT/COUy/lQWOBsS+lT9p1ePhfP/bnKaeZrhJTF ncVp4RMPuR2OHSDFQh2cVsptc0uq26lNX2M3BCWuZCpgxPFT7SMYO9dGLNoZNkLJ7DqNsnaO7iC vLH5rvobhbNjq2bABJFPKlpfa1UVSmRU+IB5lHzKCUXaQTPyCu/4pbmL/TLu1B0Aq4cYAIMRrAA l86LWkb1+Ukjz28zAFYdCk0SSzYzn+gBkB3VZACdAlHixB2LCD4yi196+i2W4VqoZgyDXeSFCUV YBXTAyuWo3/J08srisJU2lo5iT99JI1f4IvZDiSHErp6 X-Google-Smtp-Source: AGHT+IHYXRuD6gS2i4nIEW4pB5fxlGMlDpC30/K47GG6gftAxLtfSwWNG2fMF7M7Wq2DhJCz/vQw8A== X-Received: by 2002:a17:902:d4cb:b0:21f:1348:10e6 with SMTP id d9443c01a7336-22bea05db99mr19802225ad.13.1744346513353; Thu, 10 Apr 2025 21:41:53 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7c971e4sm39672745ad.136.2025.04.10.21.41.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:41:52 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-D?= =?utf-8?q?aud=C3=A9?= , qemu-block@nongnu.org Subject: [PATCH v4 3/7] tests/qtest/libquos/virtio: unmap pci bar when disabling device Date: Fri, 11 Apr 2025 14:41:25 +1000 Message-ID: <20250411044130.201724-4-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411044130.201724-1-npiggin@gmail.com> References: <20250411044130.201724-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=npiggin@gmail.com; helo=mail-pl1-x631.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=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Unmap the virtio-pci bar in qvirtio_pci_disable_device() to keep iomap/iounmap balanced. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Reviewed-by: Akihiko Odaki Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/virtio-pci.h | 1 + tests/qtest/libqos/virtio-pci.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/qtest/libqos/virtio-pci.h b/tests/qtest/libqos/virtio-pci.h index f5115cacba2..efdf904b254 100644 --- a/tests/qtest/libqos/virtio-pci.h +++ b/tests/qtest/libqos/virtio-pci.h @@ -26,6 +26,7 @@ typedef struct QVirtioPCIDevice { uint64_t config_msix_addr; uint32_t config_msix_data; + bool enabled; int bar_idx; /* VIRTIO 1.0 */ diff --git a/tests/qtest/libqos/virtio-pci.c b/tests/qtest/libqos/virtio-pci.c index 002bf8b8c2d..cb52a7c3f2e 100644 --- a/tests/qtest/libqos/virtio-pci.c +++ b/tests/qtest/libqos/virtio-pci.c @@ -300,13 +300,22 @@ static const QVirtioPCIMSIXOps qvirtio_pci_msix_ops_legacy = { void qvirtio_pci_device_enable(QVirtioPCIDevice *d) { + g_assert(!d->enabled); + d->enabled = true; qpci_device_enable(d->pdev); d->bar = qpci_iomap(d->pdev, d->bar_idx, NULL); } void qvirtio_pci_device_disable(QVirtioPCIDevice *d) { - qpci_iounmap(d->pdev, d->bar); + /* + * Test for "enabled" device state because some paths can call + * qvirtio_pci_disable_device() on devices that have not been enabled. + */ + if (d->enabled) { + qpci_iounmap(d->pdev, d->bar); + d->enabled = false; + } } void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci, From patchwork Fri Apr 11 04:41:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047549 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7EF75C36010 for ; Fri, 11 Apr 2025 04:43:08 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u36DL-0003PK-WA; Fri, 11 Apr 2025 00:42:04 -0400 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 1u36DJ-0003KC-Uv; Fri, 11 Apr 2025 00:42:01 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u36DI-0001eP-5P; Fri, 11 Apr 2025 00:42:01 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2279915e06eso16770205ad.1; Thu, 10 Apr 2025 21:41:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744346518; x=1744951318; 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=6Rm33TSnC22jP6DTQXcfoa4b7xZArhvwABkl1UW9Q7U=; b=EnjrPqv701Fxhy8G32sSkANOXpJ9sm0DtRaVJEkrMr/o73JK3pkjiPuP2gRDMRWlNh ZnefD8QadFmwsJbhn0ZfMbyD3BpEhqBYVN9lmVQeW0IZc5Dzg/BnPmmTjKAwfR9cp346 HSXG4oISblqT+hLOLv8QMgPNGC8fBbkQNOeAFghG6PU/0+yCxzQs/U1/b2lfe8LB0yRd BhJy4bL+lTl1+sySBTXHF+l+8SeTMZyl28zBZeuWH5xpF5B9+MxssUE/f2nhleCKMfXK v+UpDGhHort5Ia7e2poMOElMqwGxWynTrjVIz8hvDszUlI08lP8QWuKkSnLr7rW5LcDM tvGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744346518; x=1744951318; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6Rm33TSnC22jP6DTQXcfoa4b7xZArhvwABkl1UW9Q7U=; b=ssMepefkY3hjZFOJHBAQ86l5BGEse983zRsGb8yPWVTBCYC2PxBE3LB5its/HKvWe9 6mPSxsM3yi+UfwHNMqGYW+rem/B/g9lntcmFFn++9fqRRiaAub/3r2HKuksFrWqeMuwi 1jyT3mygc8VuELEUtSFkykD7THv0HH/M4+/QyBKbmyVZm3bH/WIELCrGPDNMupht8Vls XayyW1I/NrN4ICCXJPD7MHvSJB/roayWmTqPvPTntKMhi8ganmzfQhY0e7gB+Y/R/dhv HY9qnPsL5scwywV7GkO+muLk5tcL0GEioUB7DG3veuAeVQo1vsNHeShojBG7cHmuv5ZW +88Q== X-Forwarded-Encrypted: i=1; AJvYcCV6WDb0+1prVq9JJRyCzzSnjHxOmPYLTymdGm6xDlJIlEfXzavRDBpWEVd3LSt+Hbx73U9jUDm6pu3d@nongnu.org X-Gm-Message-State: AOJu0YwBjUZvfugJrk/c8TtHHbYOdm1coeZkscJVNYt9j4+TL7l/aUGT eCpJ603VJ1Sr5O/UNaxWL6UlAZryk63RakImbGq4DtPxpeTHdUau70Bhjg== X-Gm-Gg: ASbGncszLRhop5zu1owEn5ayDne4VXMOjrQE1lfEQBgtfLqNex3Aigjgv9ikRsCsdbP VcMrd1xkxh7NHdpJ5+o8C4JO/kH4vjFXFrRG7wTph8qHhTibJhrCbenBzsEoZCSs1FyKRLR5NIT nL7ojsQvnETC/dPo3MuWOU6kqJiNckEnnOwoTjvzpdkQntrELXF+fSW/cLwT9ZKRSqo7cF13Ib0 K0iYQFg8pwmHcsCpNESSOgzzzCY/k8fZU/t4kh0d2/svOH/3CbzpeIcQwLU6g76Ln/E9s3TO7eC WoBNqIt5DRSCc7UcFSvcI1yaDC8+dhSxUOuX7H1C+amf X-Google-Smtp-Source: AGHT+IHdaSVvqODpivLgLLZowwJQUWVs5cNTCHezD3lkJIv78SBBnb8CAf63yepUCJzAWOHdqZnhzg== X-Received: by 2002:a17:902:ef03:b0:21f:2ded:76ea with SMTP id d9443c01a7336-22bea4effefmr21097465ad.36.1744346518250; Thu, 10 Apr 2025 21:41:58 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7c971e4sm39672745ad.136.2025.04.10.21.41.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:41:57 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-D?= =?utf-8?q?aud=C3=A9?= , qemu-block@nongnu.org Subject: [PATCH v4 4/7] tests/qtest/libquos/pci: Add migration fixup helper for pci devices Date: Fri, 11 Apr 2025 14:41:26 +1000 Message-ID: <20250411044130.201724-5-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411044130.201724-1-npiggin@gmail.com> References: <20250411044130.201724-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=npiggin@gmail.com; helo=mail-pl1-x635.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=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Migration tests can create new QPCI devices for the destination machine which may need to take on some state of the source machine after destination is complete. Add a migration fixup helper and call it from ahci migration tests. This is currently a noop and will be used subsequently. Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 1 + tests/qtest/ahci-test.c | 1 + tests/qtest/libqos/pci.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index 83896145235..fd195ac4e6f 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -122,6 +122,7 @@ void qpci_memwrite(QPCIDevice *bus, QPCIBar token, uint64_t off, const void *buf, size_t len); QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr); void qpci_iounmap(QPCIDevice *dev, QPCIBar addr); +void qpci_migrate_fixup(QPCIDevice *to, QPCIDevice *from); QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr); void qpci_unplug_acpi_device_test(QTestState *qs, const char *id, uint8_t slot); diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c index 02c9d54f898..6fd6063b971 100644 --- a/tests/qtest/ahci-test.c +++ b/tests/qtest/ahci-test.c @@ -137,6 +137,7 @@ static void ahci_migrate(AHCIQState *from, AHCIQState *to, const char *uri) memcpy(to, from, sizeof(AHCIQState)); to->parent = tmp; to->dev = dev; + qpci_migrate_fixup(to->dev, from->dev); tmp = from->parent; dev = from->dev; diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index a59197b9922..14581178c79 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -586,6 +586,10 @@ QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr) return bar; } +void qpci_migrate_fixup(QPCIDevice *to, QPCIDevice *from) +{ +} + void add_qpci_address(QOSGraphEdgeOptions *opts, QPCIAddress *addr) { g_assert(addr); From patchwork Fri Apr 11 04:41:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047547 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 27956C36010 for ; Fri, 11 Apr 2025 04:42:50 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u36DT-0003RI-B1; Fri, 11 Apr 2025 00:42:13 -0400 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 1u36DP-0003QV-0g; Fri, 11 Apr 2025 00:42:07 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u36DN-0001fU-B9; Fri, 11 Apr 2025 00:42:06 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-22928d629faso15956525ad.3; Thu, 10 Apr 2025 21:42:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744346523; x=1744951323; 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=xDeAZLdMZEZbIzS8jBS1ynoCpqyQ1zcOuidUzgg27yA=; b=XAml7ngNIDV8shbkq1wpZvWnVMoJHiOFTdfT7f/hH41w0yB9QS3ZyZ8RNR9YC+IROa dYdiV9zp/BfOVodGJLFbEbPSLtYKWoB+3Ng89u8DZm046QQ/N6EZM0MaZ+8SS9a8xjm0 8Cu9HBqe3q/eXGc4C0Jo5cvhz3e8HZF/aqShIFgnBk5eiJUYuE6ash7/Wlr5a+RH4Pvk 7iPFTj95tTbCGCDs5V6J02fofwTaFrhsH/JjsK1guquP0z+V4LWy66ILvNTjwG+8Fw7e 0eMZ/g9BrtGn3Px0RCzm9Y+ypNBrQrt50oNc3zPRJpLr4r+f32Nlghq4hoSfu3qcabE2 M9Cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744346523; x=1744951323; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xDeAZLdMZEZbIzS8jBS1ynoCpqyQ1zcOuidUzgg27yA=; b=fF8dLT3UT6sjcD3Nbb5V1DOsYqcyDueRhPUtlNv+Zw02zRiHDX/KQm9TEnomsvERpp DB+w7XjwYqYGx7ppZraSICdZPaI4dDLaD1+sexqm3r2MG5KfFOLHuOYOTEgzgbLcbd3p vtbCIYbk8XankoAr8y+FfjN4kB7OLr43RncZwo8+66X6Lz7nJGjbB2yujWwDMKLArmts VOe5wn13bxfbExdzOMH50+FVUTQ3naqS1A4O4unHgIv99ftykbBnyyILUp/os13sSiKl qpd+hBa/XU9IOJBO591Ab0RlwRdrvWe+jfuA3fomAEX0jVUanjT//IzfDD/l+C5dK2Mf 8+GQ== X-Forwarded-Encrypted: i=1; AJvYcCVHlAy2OkGgNe8/DLHYx9CBFw6xZgRuCk1BgCWvheQA9AnFy1eXSaQE1E1cAKPwbf/EebUB3RZr7T7E@nongnu.org X-Gm-Message-State: AOJu0YzfJzNpu9q6uMh6IPP3nRht7+FLQck1zCG36vmyZVVWuAspq/bt K59I6raIpwJ8olvAwLjRjTEIB3+bwl7iGlBvhA3mnlnI2XVcy8niusm+nw== X-Gm-Gg: ASbGncsx+xTIuyEpJ1N3tibs9+DtuNye+iW5LwV+GR3ax/Ywcl3ssgbnwVgeS0maGR/ G3Eyf06z5/ufdJvAKLspTg6UWWBOIm4XlCn4JVfi6Zzg/Uf6K6Z8OnoqhSaHNksKb51Og4bdDRK Zdlr5vKAR/DTNrcPUQO+uYdQwFGXSIlf2ip13YmVmx2Wxm5LpYP6Jo4s/XVPef7pV5ymxFCYzx3 TNoH/1BwR+LW2nzdiRBQamJkpMNS6wIwMiMN+uulUN1dyqpqZUg5uUHqbgwDii1boTHv+SpWbvo BEBNUAREAoib6w7qUCx87G1J0847ZgD/jHC7ESmw0uwZSlUJ/HFP+xs= X-Google-Smtp-Source: AGHT+IGO2MMSl5/kghcY/caUEPyovyxUPFpIUbSaX/elFVTmpTaa2oE/6N1x1RwKI8JMJ89Ar2q0JA== X-Received: by 2002:a17:902:e54a:b0:225:b718:4dff with SMTP id d9443c01a7336-22bea4fdd91mr22322215ad.53.1744346522989; Thu, 10 Apr 2025 21:42:02 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7c971e4sm39672745ad.136.2025.04.10.21.41.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:42:02 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-D?= =?utf-8?q?aud=C3=A9?= , qemu-block@nongnu.org Subject: [PATCH v4 5/7] qtest/libqos/pci: Enforce balanced iomap/unmap Date: Fri, 11 Apr 2025 14:41:27 +1000 Message-ID: <20250411044130.201724-6-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411044130.201724-1-npiggin@gmail.com> References: <20250411044130.201724-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=npiggin@gmail.com; helo=mail-pl1-x62e.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=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Add assertions to ensure a BAR is not mapped twice, and that only previously mapped BARs are unmapped. This can help catch bugs and fragile coding. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Reviewed-by: Akihiko Odaki Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 9 +++++++ tests/qtest/libqos/pci.c | 51 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index fd195ac4e6f..5c7ebad4270 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -61,10 +61,19 @@ struct QPCIBar { bool is_io; }; +/* + * hw/pci permits 7 (PCI_NUM_REGIONS) regions, the last for PCI_ROM_SLOT. + * libqos does not implement PCI_ROM_SLOT at the moment, and as such it + * permits 6. + */ +#define QPCI_NUM_REGIONS 6 + struct QPCIDevice { QPCIBus *bus; int devfn; + bool bars_mapped[QPCI_NUM_REGIONS]; + QPCIBar bars[QPCI_NUM_REGIONS]; bool msix_enabled; QPCIBar msix_table_bar, msix_pba_bar; uint64_t msix_table_off, msix_pba_off; diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index 14581178c79..02d88acd500 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -93,12 +93,17 @@ QPCIDevice *qpci_device_find(QPCIBus *bus, int devfn) void qpci_device_init(QPCIDevice *dev, QPCIBus *bus, QPCIAddress *addr) { uint16_t vendor_id, device_id; + int i; qpci_device_set(dev, bus, addr->devfn); vendor_id = qpci_config_readw(dev, PCI_VENDOR_ID); device_id = qpci_config_readw(dev, PCI_DEVICE_ID); g_assert(!addr->vendor_id || vendor_id == addr->vendor_id); g_assert(!addr->device_id || device_id == addr->device_id); + + for (i = 0; i < QPCI_NUM_REGIONS; i++) { + g_assert(!dev->bars_mapped[i]); + } } static uint8_t qpci_find_resource_reserve_capability(QPCIDevice *dev) @@ -515,21 +520,31 @@ void qpci_memwrite(QPCIDevice *dev, QPCIBar token, uint64_t off, dev->bus->memwrite(dev->bus, token.addr + off, buf, len); } -QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr) +static uint8_t qpci_bar_reg(int barno) { - QPCIBus *bus = dev->bus; static const int bar_reg_map[] = { PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_5, }; + + g_assert(barno >= 0 && barno <= QPCI_NUM_REGIONS); + + return bar_reg_map[barno]; +} + +QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr) +{ + QPCIBus *bus = dev->bus; QPCIBar bar; int bar_reg; uint32_t addr, size; uint32_t io_type; uint64_t loc; - g_assert(barno >= 0 && barno <= 5); - bar_reg = bar_reg_map[barno]; + g_assert(barno >= 0 && barno <= QPCI_NUM_REGIONS); + g_assert(!dev->bars_mapped[barno]); + + bar_reg = qpci_bar_reg(barno); qpci_config_writel(dev, bar_reg, 0xFFFFFFFF); addr = qpci_config_readl(dev, bar_reg); @@ -572,12 +587,34 @@ QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr) } bar.addr = loc; + + dev->bars_mapped[barno] = true; + dev->bars[barno] = bar; + return bar; } void qpci_iounmap(QPCIDevice *dev, QPCIBar bar) { - /* FIXME */ + int bar_reg; + int i; + + g_assert(bar.addr); + + for (i = 0; i < QPCI_NUM_REGIONS; i++) { + if (!dev->bars_mapped[i]) { + continue; + } + if (dev->bars[i].addr == bar.addr) { + dev->bars_mapped[i] = false; + memset(&dev->bars_mapped[i], 0, sizeof(dev->bars_mapped[i])); + bar_reg = qpci_bar_reg(i); + qpci_config_writel(dev, bar_reg, 0xFFFFFFFF); + /* FIXME: the address space is leaked */ + return; + } + } + g_assert_not_reached(); /* device was not iomap()ed */ } QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr) @@ -588,6 +625,10 @@ QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr) void qpci_migrate_fixup(QPCIDevice *to, QPCIDevice *from) { + memcpy(to->bars_mapped, from->bars_mapped, sizeof(from->bars_mapped)); + memset(from->bars_mapped, 0, sizeof(from->bars_mapped)); + memcpy(to->bars, from->bars, sizeof(from->bars)); + memset(from->bars, 0, sizeof(from->bars)); } void add_qpci_address(QOSGraphEdgeOptions *opts, QPCIAddress *addr) From patchwork Fri Apr 11 04:41:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047550 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1A138C369A2 for ; Fri, 11 Apr 2025 04:43:12 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u36DX-0003Xk-9e; Fri, 11 Apr 2025 00:42:15 -0400 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 1u36DT-0003Rl-D0; Fri, 11 Apr 2025 00:42:13 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u36DR-0001gY-RO; Fri, 11 Apr 2025 00:42:11 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-227d6b530d8so15726585ad.3; Thu, 10 Apr 2025 21:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744346528; x=1744951328; 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=2cWVx1L0woS82QKvU4U4iEBvVwH0DB4IYMt1yOjho04=; b=R4Dw5aJZAQUMSeGYsM8eREWbNlEl5lyimIkLufr4KVECs/x8LHMlo94L2PeHKdJQwr GEMcjst2SjPRHBfhtNK8f9m8h7sbuhQQrgmcc7OLPzwUgC8Ef+pl9qA73yCtboliqr4G +L3MNu4EP80xbGpQgud6piBdXygGMfDp0RrsSuW8xUrgx9PVGWusDdVkhx/7eU+R7ZOL rSQjK+BLFE6I1R57tqHc62SL40jTTy7vGqzK+zxFNkP+FtBZLhu8lc+jDxQk/rKs48lO LBkbUSW4ott1oxboSI88rUE4NLrupfBLzjQRK1YJfW10lI7edIWkz2b048I+vcANE6hT gENg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744346528; x=1744951328; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2cWVx1L0woS82QKvU4U4iEBvVwH0DB4IYMt1yOjho04=; b=Q6Ho2nEW3s9mLT81s24GKWrlzWLtKTPe7PgWOzp9yTLq1RKFZtGHVM7o9JdEhGNTmu gQG8nHwqor/SVC2PxLPjg8o8O4ZaqpLASwb8rch73IRNZYfV5WT1vp0uFtrs1AF5gQ8J VGyY7r5vzWkR2L69CDclknlG+KQIq7hOzemFC3cNp2O0qSU+JaDn7jIgHo4NTbQ34+Fs 32OcqsXgyMZL5sLFoGVY2Xbg3ZWWon88xbeUMluQn2nRfjW4qB847QNrgoa1HdiZc1uk lp3BO14PvI1XUZtr0jB6MhfYOOTFd6d9XjzzmWOS81YXnvT8YWylh+RXNHID12afBHAE jpkQ== X-Forwarded-Encrypted: i=1; AJvYcCWhaY1ofdoq3vsGDw5ZJDnIZ4woyE+Lqja+qdcd/985IIiiTHMMw7Tlkg2A0jfnfm+IL68I0GZ5zoMI@nongnu.org X-Gm-Message-State: AOJu0YzmZtLLQ3kCum/fjob2F7d2iwyk19qoYRp26yITXFEmmABdBMf3 3G/dsFLS8b001jgkM3bYXBGKHJiclqtuk9FpYgBzYOHDNUp5pbvIaSjV8w== X-Gm-Gg: ASbGncuZz+bhxNRS5r99hJqPrzDTqiiP2b/2NXezSkw0VIg8JMmcyHwktGVdpW4KeV9 gjdvb0LPmy9XHGJGNsiadvYG6gJpDUcaZEfbgQdWJPwtH8+xYkqBvxn5IOeJLPP1WSb8hceiBUV 0RaaqFi0WUJFcrwk3N1YTs3pTo9ZOhtlJfBDXaPm6OCWW9DhzJRGU4Rn+CKAT1CCm8G6AsC/NPY v/tNUeYL9kXV3v8SJll6wJVOJrFNLrwzbh7dsV7XElAJEpXUgaY3WMGWdK+zheyG6CG1gE4f+gY noJP2BJY5swdGM+kzLnoO2YuE7Pl1GJ7j263VMZrCMrL X-Google-Smtp-Source: AGHT+IGtcmZCX7jmNC79i/P2dbOn1HjNSrHk2RiHVwewma4209dyW3AzvopyySFuksCOIsR9K62fRw== X-Received: by 2002:a17:902:da91:b0:220:f7bb:842 with SMTP id d9443c01a7336-22bea4efafamr18183435ad.42.1744346527825; Thu, 10 Apr 2025 21:42:07 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7c971e4sm39672745ad.136.2025.04.10.21.42.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:42:07 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-D?= =?utf-8?q?aud=C3=A9?= , qemu-block@nongnu.org Subject: [PATCH v4 6/7] qtest/libqos/pci: Fix qpci_msix_enable sharing bar0 Date: Fri, 11 Apr 2025 14:41:28 +1000 Message-ID: <20250411044130.201724-7-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411044130.201724-1-npiggin@gmail.com> References: <20250411044130.201724-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=npiggin@gmail.com; helo=mail-pl1-x633.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=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Devices where the MSI-X addresses are shared with other MMIO on BAR0 can not use msi_enable because it unmaps and remaps BAR0, which interferes with device MMIO mappings. xhci-nec is one such device we would like to test with msix. Use the BAR iomap tracking structure introduced in the previous change to have qpci_misx_enable() use existing iomaps if msix bars are already mapped. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Reviewed-by: Akihiko Odaki Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 1 + tests/qtest/libqos/pci.c | 40 ++++++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index 5c7ebad4270..d334d9c0837 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -75,6 +75,7 @@ struct QPCIDevice bool bars_mapped[QPCI_NUM_REGIONS]; QPCIBar bars[QPCI_NUM_REGIONS]; bool msix_enabled; + bool msix_table_bar_iomap, msix_pba_bar_iomap; QPCIBar msix_table_bar, msix_pba_bar; uint64_t msix_table_off, msix_pba_off; }; diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index 02d88acd500..72adf81ddd6 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -288,15 +288,21 @@ void qpci_msix_enable(QPCIDevice *dev) table = qpci_config_readl(dev, addr + PCI_MSIX_TABLE); bir_table = table & PCI_MSIX_FLAGS_BIRMASK; - dev->msix_table_bar = qpci_iomap(dev, bir_table, NULL); + if (dev->bars_mapped[bir_table]) { + dev->msix_table_bar = dev->bars[bir_table]; + } else { + dev->msix_table_bar_iomap = true; + dev->msix_table_bar = qpci_iomap(dev, bir_table, NULL); + } dev->msix_table_off = table & ~PCI_MSIX_FLAGS_BIRMASK; table = qpci_config_readl(dev, addr + PCI_MSIX_PBA); bir_pba = table & PCI_MSIX_FLAGS_BIRMASK; - if (bir_pba != bir_table) { - dev->msix_pba_bar = qpci_iomap(dev, bir_pba, NULL); + if (dev->bars_mapped[bir_pba]) { + dev->msix_pba_bar = dev->bars[bir_pba]; } else { - dev->msix_pba_bar = dev->msix_table_bar; + dev->msix_pba_bar_iomap = true; + dev->msix_pba_bar = qpci_iomap(dev, bir_pba, NULL); } dev->msix_pba_off = table & ~PCI_MSIX_FLAGS_BIRMASK; @@ -307,6 +313,7 @@ void qpci_msix_disable(QPCIDevice *dev) { uint8_t addr; uint16_t val; + uint32_t table; g_assert(dev->msix_enabled); addr = qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); @@ -315,10 +322,31 @@ void qpci_msix_disable(QPCIDevice *dev) qpci_config_writew(dev, addr + PCI_MSIX_FLAGS, val & ~PCI_MSIX_FLAGS_ENABLE); - if (dev->msix_pba_bar.addr != dev->msix_table_bar.addr) { + if (dev->msix_pba_bar_iomap) { + dev->msix_pba_bar_iomap = false; qpci_iounmap(dev, dev->msix_pba_bar); + } else { + /* + * If we had reused an existing iomap, ensure it is still mapped + * otherwise it would be a bug if it were unmapped before msix is + * disabled. A refcounting iomap implementation could avoid this + * issue entirely, but let's wait until that's needed. + */ + uint8_t bir_pba; + table = qpci_config_readl(dev, addr + PCI_MSIX_PBA); + bir_pba = table & PCI_MSIX_FLAGS_BIRMASK; + g_assert(dev->bars_mapped[bir_pba]); + } + + if (dev->msix_table_bar_iomap) { + dev->msix_table_bar_iomap = false; + qpci_iounmap(dev, dev->msix_table_bar); + } else { + uint8_t bir_table; + table = qpci_config_readl(dev, addr + PCI_MSIX_TABLE); + bir_table = table & PCI_MSIX_FLAGS_BIRMASK; + g_assert(dev->bars_mapped[bir_table]); } - qpci_iounmap(dev, dev->msix_table_bar); dev->msix_enabled = 0; dev->msix_table_off = 0; From patchwork Fri Apr 11 04:41:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047551 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 679DDC36010 for ; Fri, 11 Apr 2025 04:43:39 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u36Dh-0003di-H9; Fri, 11 Apr 2025 00:42:25 -0400 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 1u36DY-0003aE-Hu; Fri, 11 Apr 2025 00:42:17 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u36DW-0001hf-Pq; Fri, 11 Apr 2025 00:42:16 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-22403cbb47fso16553865ad.0; Thu, 10 Apr 2025 21:42:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744346533; x=1744951333; 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=xKyqrN482MxUi8aGlGxTp85Ez/bPRUp+V1nk5qGRW08=; b=ecEi1JF/UIDxxUQjvy7yqTolPWXJaOL7ciOKAOwxILMmItyAx/1pI0ShJgrIRRdNk8 Ao9xUYOmYWFsdQNx5hdvbKkYkmqilhcadpP34hDriSbZiIgAVQod+ayntowa38eeKD8c /N6nhSbdSAzFbD0K71f8o5wwFWlRbP0gtj8OLBMUBuqjWEr5EfVpvI17NIp4Odk5Zuua B4AVGI/ujdawlxPfp7PBTni6mQ4sBH0SPdenrLwuX7TyA56ak9xeoQKTYCsJHxxR+tA4 BzfJVa3Rr0g7rblnmJoq+xt7FMMypZUJrfpSv+DKBkq65F4XyGKY5N+JVgPouDKW7p/9 IcNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744346533; x=1744951333; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xKyqrN482MxUi8aGlGxTp85Ez/bPRUp+V1nk5qGRW08=; b=BdE/VPLJP/Kvru4pDmdoJwFpfCDjCBTKeyA+HE56hGOlJ2ntvK5R2XXm2oebM5/MZd bMjveOYmyNL6FMILG3MPSeW9RdbqYt8J070YZd82hb3Wjw6CMWT3X4lPSh4G4xXe/ic6 CprGrtOHJkVoMa6zodoN1FYfzWEU/RBkLd6JsuDyZPuPJ+1B/SlGZEFLE9GLxUJuriEa WYszpb1XEkU/wpdl9tfIDt882+NDvaKEesSUHHkn+4wTEq/GXK14zbeTmkvigwI0YTvE m2mbuNh0aDWUr7EshgcogK739X4yg6FAxWiUhQD0xE5NLCmR9Coa2eG38jf2z7lDk9NV SW7A== X-Forwarded-Encrypted: i=1; AJvYcCUw5qHzA4OcDTItcErWKR0jAh/A/ygDjezSomhRKoU2e2qSwqifmuXNPPj4g2QaUrP5X6bRNRscnqir@nongnu.org X-Gm-Message-State: AOJu0Yznc1NZBdP3iHOvyMwM/IOMoMAttfmIqLH9I2ABrg4j3hK7DR3F u57uEBwize6WjbIyhR500Eo/nrVqExXurkwwmlqbd1cXkcjds3fawWaP/w== X-Gm-Gg: ASbGncvXs6oCbvGMPC8rKwLYb5b6PWwgOwZ1Tev6jy3qrNEX+SkO2R9Umq742vTdzSy XkDs6RnjXHMGRjdoeT7m7vOSYPYwMXYQ1aSK2ATWKeVU1RttC+BCSdTdupXerWIPemHDp8QiLMr trL+yKY5Rhg+SpX4PqBE1/wVALYbTnxkPnMNkBIyBVio5AiX6YLFvmpwTQNE5yZ/ECXn8JKrKln GNWw/1z2yoS/UStNCI6eOYGReZdtwfpdGqk7bPCDtXlu6dg3VU+3q5buMkLaWQrNnVS4XIeqg/z 8/eocwYYv/UDp9pINwoKoTH8YLi9S+VxwddggyevKxre X-Google-Smtp-Source: AGHT+IG3tB7DxXSlgCT5ZkTIi1LG6Zl0zvamMoMbxjbGyFqZFeTIG8R1dRNqvfmmiy6phegym0XUpg== X-Received: by 2002:a17:903:2385:b0:227:e74a:a066 with SMTP id d9443c01a7336-22bea4c755cmr24707665ad.28.1744346532796; Thu, 10 Apr 2025 21:42:12 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7c971e4sm39672745ad.136.2025.04.10.21.42.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:42:12 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-D?= =?utf-8?q?aud=C3=A9?= , qemu-block@nongnu.org Subject: [PATCH v4 7/7] qtest/libqos/pci: Factor msix entry helpers into pci common code Date: Fri, 11 Apr 2025 14:41:29 +1000 Message-ID: <20250411044130.201724-8-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411044130.201724-1-npiggin@gmail.com> References: <20250411044130.201724-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=npiggin@gmail.com; helo=mail-pl1-x629.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=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Setting msix entry address and data and masking is moved into common code helpers from virtio tests. For now that remains the only user, but there are changes under development to enable msix vectors for msix, e1000e, and xhci tests, which can make use of them. Reviewed-by: Akihiko Odaki Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 3 ++ tests/qtest/libqos/pci.c | 53 +++++++++++++++++++++++++++++++++ tests/qtest/libqos/virtio-pci.c | 48 ++++------------------------- 3 files changed, 61 insertions(+), 43 deletions(-) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index d334d9c0837..c63342d8c72 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -100,8 +100,11 @@ void qpci_device_enable(QPCIDevice *dev); uint8_t qpci_find_capability(QPCIDevice *dev, uint8_t id, uint8_t start_addr); void qpci_msix_enable(QPCIDevice *dev); void qpci_msix_disable(QPCIDevice *dev); +void qpci_msix_set_entry(QPCIDevice *dev, uint16_t entry, + uint64_t guest_addr, uint32_t data); bool qpci_msix_pending(QPCIDevice *dev, uint16_t entry); bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry); +void qpci_msix_set_masked(QPCIDevice *dev, uint16_t entry, bool masked); uint16_t qpci_msix_table_size(QPCIDevice *dev); uint8_t qpci_config_readb(QPCIDevice *dev, uint8_t offset); diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index 72adf81ddd6..4627f324200 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -353,6 +353,25 @@ void qpci_msix_disable(QPCIDevice *dev) dev->msix_pba_off = 0; } +void qpci_msix_set_entry(QPCIDevice *dev, uint16_t entry, + uint64_t guest_addr, uint32_t data) +{ + uint64_t vector_off = dev->msix_table_off + entry * PCI_MSIX_ENTRY_SIZE; + + g_assert(dev->msix_enabled); + g_assert_cmpint(entry, >=, 0); + g_assert_cmpint(entry, <, qpci_msix_table_size(dev)); + + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_LOWER_ADDR, guest_addr & ~0UL); + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_UPPER_ADDR, + (guest_addr >> 32) & ~0UL); + + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_DATA, data); +} + bool qpci_msix_pending(QPCIDevice *dev, uint16_t entry) { uint32_t pba_entry; @@ -360,6 +379,9 @@ bool qpci_msix_pending(QPCIDevice *dev, uint16_t entry) uint64_t off = (entry / 32) * PCI_MSIX_ENTRY_SIZE / 4; g_assert(dev->msix_enabled); + g_assert_cmpint(entry, >=, 0); + g_assert_cmpint(entry, <, qpci_msix_table_size(dev)); + pba_entry = qpci_io_readl(dev, dev->msix_pba_bar, dev->msix_pba_off + off); return (pba_entry & (1 << bit_n)) != 0; } @@ -371,6 +393,9 @@ bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry) uint64_t vector_off = dev->msix_table_off + entry * PCI_MSIX_ENTRY_SIZE; g_assert(dev->msix_enabled); + g_assert_cmpint(entry, >=, 0); + g_assert_cmpint(entry, <, qpci_msix_table_size(dev)); + addr = qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); g_assert_cmphex(addr, !=, 0); val = qpci_config_readw(dev, addr + PCI_MSIX_FLAGS); @@ -384,6 +409,34 @@ bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry) } } +void qpci_msix_set_masked(QPCIDevice *dev, uint16_t entry, bool masked) +{ + uint8_t addr; + uint16_t val; + uint64_t vector_off = dev->msix_table_off + entry * PCI_MSIX_ENTRY_SIZE; + + g_assert(dev->msix_enabled); + g_assert_cmpint(entry, >=, 0); + g_assert_cmpint(entry, <, qpci_msix_table_size(dev)); + + addr = qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); + g_assert_cmphex(addr, !=, 0); + val = qpci_config_readw(dev, addr + PCI_MSIX_FLAGS); + g_assert(!(val & PCI_MSIX_FLAGS_MASKALL)); + + val = qpci_io_readl(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_VECTOR_CTRL); + if (masked && !(val & PCI_MSIX_ENTRY_CTRL_MASKBIT)) { + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_VECTOR_CTRL, + val | PCI_MSIX_ENTRY_CTRL_MASKBIT); + } else if (!masked && (val & PCI_MSIX_ENTRY_CTRL_MASKBIT)) { + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_VECTOR_CTRL, + val & ~PCI_MSIX_ENTRY_CTRL_MASKBIT); + } +} + uint16_t qpci_msix_table_size(QPCIDevice *dev) { uint8_t addr; diff --git a/tests/qtest/libqos/virtio-pci.c b/tests/qtest/libqos/virtio-pci.c index cb52a7c3f2e..8dfe0ff310d 100644 --- a/tests/qtest/libqos/virtio-pci.c +++ b/tests/qtest/libqos/virtio-pci.c @@ -321,64 +321,26 @@ void qvirtio_pci_device_disable(QVirtioPCIDevice *d) void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci, QGuestAllocator *alloc, uint16_t entry) { - uint32_t control; - uint64_t off; - g_assert(d->pdev->msix_enabled); - off = d->pdev->msix_table_off + (entry * 16); - - g_assert_cmpint(entry, >=, 0); - g_assert_cmpint(entry, <, qpci_msix_table_size(d->pdev)); vqpci->msix_entry = entry; - vqpci->msix_addr = guest_alloc(alloc, 4); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_LOWER_ADDR, vqpci->msix_addr & ~0UL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_UPPER_ADDR, - (vqpci->msix_addr >> 32) & ~0UL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_DATA, vqpci->msix_data); - - control = qpci_io_readl(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_VECTOR_CTRL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_VECTOR_CTRL, - control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT); + qpci_msix_set_entry(d->pdev, entry, vqpci->msix_addr, vqpci->msix_data); + qpci_msix_set_masked(d->pdev, entry, false); d->msix_ops->set_queue_vector(d, vqpci->vq.index, entry); } void qvirtio_pci_set_msix_configuration_vector(QVirtioPCIDevice *d, QGuestAllocator *alloc, uint16_t entry) { - uint32_t control; - uint64_t off; - g_assert(d->pdev->msix_enabled); - off = d->pdev->msix_table_off + (entry * 16); - - g_assert_cmpint(entry, >=, 0); - g_assert_cmpint(entry, <, qpci_msix_table_size(d->pdev)); d->config_msix_entry = entry; - d->config_msix_data = 0x12345678; d->config_msix_addr = guest_alloc(alloc, 4); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_LOWER_ADDR, d->config_msix_addr & ~0UL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_UPPER_ADDR, - (d->config_msix_addr >> 32) & ~0UL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_DATA, d->config_msix_data); - - control = qpci_io_readl(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_VECTOR_CTRL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_VECTOR_CTRL, - control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT); - + qpci_msix_set_entry(d->pdev, entry, d->config_msix_addr, + d->config_msix_data); + qpci_msix_set_masked(d->pdev, entry, false); d->msix_ops->set_config_vector(d, entry); }