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 <mst@redhat.com>
> Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
> Cc: Akihiko Odaki <akihiko.odaki@daynix.com>
> Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
> Reviewed-by: Fabiano Rosas <farosas@suse.de>
> Signed-off-by: Nicholas Piggin <npiggin@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.