On 2025/05/02 12:04, Nicholas Piggin wrote:
ahci-test double-maps the hba bar in the pending_callback test.
Unmap it first, to keep iomaps balanced.

Cc: Michael S. Tsirkin <m...@redhat.com>
Cc: Marcel Apfelbaum <marcel.apfelb...@gmail.com>
Cc: Akihiko Odaki <akihiko.od...@daynix.com>
Reviewed-by: Akihiko Odaki <akihiko.od...@daynix.com>
Reviewed-by: Fabiano Rosas <faro...@suse.de>
Signed-off-by: Nicholas Piggin <npig...@gmail.com>
---
  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 e8aabfc13f5..36caa7b2999 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);

This stop_ahci_device() call is unnecessary since ahci_shutdown() follows.

      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.


Reply via email to