From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50002) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ya5ej-0005Ch-IP for qemu-devel@nongnu.org; Mon, 23 Mar 2015 12:56:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ya5ei-000381-DX for qemu-devel@nongnu.org; Mon, 23 Mar 2015 12:56:49 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54573) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ya5ei-00037j-6T for qemu-devel@nongnu.org; Mon, 23 Mar 2015 12:56:48 -0400 From: John Snow Date: Mon, 23 Mar 2015 12:56:38 -0400 Message-Id: <1427129798-21590-5-git-send-email-jsnow@redhat.com> In-Reply-To: <1427129798-21590-1-git-send-email-jsnow@redhat.com> References: <1427129798-21590-1-git-send-email-jsnow@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 4/4] ahci-test: improve rw buffer patterns List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, jsnow@redhat.com My pattern was cyclical every 256 bytes, so it missed a fairly obvious failure case. Add some rand() pepper into the test pattern, and for large patterns that exceed 256 sectors, start writing an ID per-sector so that we never generate identical sector patterns. Signed-off-by: John Snow Reviewed-by: Stefan Hajnoczi Tested-by: Andreas F=C3=A4rber Message-id: 1426811056-2202-5-git-send-email-jsnow@redhat.com --- tests/ahci-test.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/tests/ahci-test.c b/tests/ahci-test.c index 169e83b..ea62e24 100644 --- a/tests/ahci-test.c +++ b/tests/ahci-test.c @@ -68,6 +68,32 @@ static void string_bswap16(uint16_t *s, size_t bytes) } } =20 +static void generate_pattern(void *buffer, size_t len, size_t cycle_len) +{ + int i, j; + unsigned char *tx =3D (unsigned char *)buffer; + unsigned char p; + size_t *sx; + + /* Write an indicative pattern that varies and is unique per-cycle *= / + p =3D rand() % 256; + for (i =3D j =3D 0; i < len; i++, j++) { + tx[i] =3D p; + if (j % cycle_len =3D=3D 0) { + p =3D rand() % 256; + } + } + + /* force uniqueness by writing an id per-cycle */ + for (i =3D 0; i < len / cycle_len; i++) { + j =3D i * cycle_len; + if (j + sizeof(*sx) <=3D len) { + sx =3D (size_t *)&tx[j]; + *sx =3D i; + } + } +} + /*** Test Setup & Teardown ***/ =20 /** @@ -736,7 +762,6 @@ static void ahci_test_io_rw_simple(AHCIQState *ahci, = unsigned bufsize, { uint64_t ptr; uint8_t port; - unsigned i; unsigned char *tx =3D g_malloc(bufsize); unsigned char *rx =3D g_malloc0(bufsize); =20 @@ -752,9 +777,7 @@ static void ahci_test_io_rw_simple(AHCIQState *ahci, = unsigned bufsize, g_assert(ptr); =20 /* Write some indicative pattern to our buffer. */ - for (i =3D 0; i < bufsize; i++) { - tx[i] =3D (bufsize - i); - } + generate_pattern(tx, bufsize, AHCI_SECTOR_SIZE); memwrite(ptr, tx, bufsize); =20 /* Write this buffer to disk, then read it back to the DMA buffer. *= / @@ -865,7 +888,6 @@ static void test_dma_fragmented(void) size_t bufsize =3D 4096; unsigned char *tx =3D g_malloc(bufsize); unsigned char *rx =3D g_malloc0(bufsize); - unsigned i; uint64_t ptr; =20 ahci =3D ahci_boot_and_enable(); @@ -873,9 +895,7 @@ static void test_dma_fragmented(void) ahci_port_clear(ahci, px); =20 /* create pattern */ - for (i =3D 0; i < bufsize; i++) { - tx[i] =3D (bufsize - i); - } + generate_pattern(tx, bufsize, AHCI_SECTOR_SIZE); =20 /* Create a DMA buffer in guest memory, and write our pattern to it.= */ ptr =3D guest_alloc(ahci->parent->alloc, bufsize); --=20 2.1.0