From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44825) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XUlNd-0006HW-4V for qemu-devel@nongnu.org; Thu, 18 Sep 2014 19:44:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XUlNT-0003jW-JH for qemu-devel@nongnu.org; Thu, 18 Sep 2014 19:44:53 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51537) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XUlNT-0003fn-Ai for qemu-devel@nongnu.org; Thu, 18 Sep 2014 19:44:43 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s8INibXp010575 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Thu, 18 Sep 2014 19:44:37 -0400 From: John Snow Date: Thu, 18 Sep 2014 19:43:36 -0400 Message-Id: <1411083819-9284-13-git-send-email-jsnow@redhat.com> In-Reply-To: <1411083819-9284-1-git-send-email-jsnow@redhat.com> References: <1411083819-9284-1-git-send-email-jsnow@redhat.com> Subject: [Qemu-devel] [PATCH 12/15] qtest/ahci: Enforce zero-leaks for guest mem usage List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, mst@redhat.com, armbru@redhat.com, stefanha@redhat.com, pbonzini@redhat.com, John Snow The purpose of this patch is to aid in debugging the new malloc-pc interface for guest memory, by enabling the enforcing of no guest memory blocks in use at exit time. Signed-off-by: John Snow --- tests/ahci-test.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/tests/ahci-test.c b/tests/ahci-test.c index dcc0748..3f92618 100644 --- a/tests/ahci-test.c +++ b/tests/ahci-test.c @@ -436,6 +436,7 @@ static void ahci_test_msicap(AHCIState *ahci, uint8_t offset); static void ahci_test_pmcap(AHCIState *ahci, uint8_t offset); static void get_command_header(AHCIState *ahci, uint8_t px, uint8_t cx, AHCICommand *cmd); +static void destroy_command(AHCIState *ahci, uint8_t px, uint8_t cx); /*** Utilities ***/ @@ -506,7 +507,9 @@ static void qtest_boot(const char *cmdline_fmt, ...) qtest_start(cmdline); qtest_irq_intercept_in(global_qtest, "ioapic"); - guest_malloc = pc_alloc_init(); + /* Enforce 0 leaks. */ + guest_malloc = pc_alloc_init_flags(PC_ALLOC_LEAK_ASSERT | + PC_ALLOC_PARANOID); g_free(cmdline); } @@ -516,8 +519,10 @@ static void qtest_boot(const char *cmdline_fmt, ...) */ static void qtest_shutdown(void) { - g_free(guest_malloc); - guest_malloc = NULL; + if (guest_malloc) { + pc_alloc_uninit(guest_malloc); + guest_malloc = NULL; + } qtest_end(); } @@ -547,6 +552,20 @@ static AHCIState *ahci_boot(void) */ static void ahci_shutdown(AHCIState *ahci) { + uint8_t px, cx; + + for (px = 0; px < 32; ++px) { + if (ahci->port[px].fb) { + guest_free(guest_malloc, ahci->port[px].fb); + } + if (ahci->port[px].clb) { + for (cx = 0; cx < 32; cx++) { + destroy_command(ahci, px, cx); + } + guest_free(guest_malloc, ahci->port[px].clb); + } + } + free_ahci_device(ahci->dev); g_free(ahci); qtest_shutdown(); @@ -1676,6 +1695,8 @@ static void ahci_test_identify(AHCIState *ahci) string_bswap16(&buff[23], 8); rc = memcmp(&buff[23], "version ", 8); g_assert_cmphex(rc, ==, 0); + + guest_free(guest_malloc, data_ptr); } /******************************************************************************/ -- 1.9.3