[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 58/69] qtest/ahci: add fragmented dma test
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 58/69] qtest/ahci: add fragmented dma test |
Date: |
Fri, 27 Feb 2015 18:18:56 +0000 |
From: John Snow <address@hidden>
Test what happens when we try to use extremely short PRDTs
to accomplish a small data transfer.
Signed-off-by: John Snow <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
tests/ahci-test.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/tests/ahci-test.c b/tests/ahci-test.c
index 21f20f7..cf0b98b 100644
--- a/tests/ahci-test.c
+++ b/tests/ahci-test.c
@@ -851,6 +851,63 @@ static void test_identify(void)
ahci_shutdown(ahci);
}
+/**
+ * Fragmented DMA test: Perform a standard 4K DMA read/write
+ * test, but make sure the physical regions are fragmented to
+ * be very small, each just 32 bytes, to see how AHCI performs
+ * with chunks defined to be much less than a sector.
+ */
+static void test_dma_fragmented(void)
+{
+ AHCIQState *ahci;
+ AHCICommand *cmd;
+ uint8_t px;
+ size_t bufsize = 4096;
+ unsigned char *tx = g_malloc(bufsize);
+ unsigned char *rx = g_malloc0(bufsize);
+ unsigned i;
+ uint64_t ptr;
+
+ ahci = ahci_boot_and_enable();
+ px = ahci_port_select(ahci);
+ ahci_port_clear(ahci, px);
+
+ /* create pattern */
+ for (i = 0; i < bufsize; i++) {
+ tx[i] = (bufsize - i);
+ }
+
+ /* Create a DMA buffer in guest memory, and write our pattern to it. */
+ ptr = guest_alloc(ahci->parent->alloc, bufsize);
+ g_assert(ptr);
+ memwrite(ptr, tx, bufsize);
+
+ cmd = ahci_command_create(CMD_WRITE_DMA);
+ ahci_command_adjust(cmd, 0, ptr, bufsize, 32);
+ ahci_command_commit(ahci, cmd, px);
+ ahci_command_issue(ahci, cmd);
+ ahci_command_verify(ahci, cmd);
+ g_free(cmd);
+
+ cmd = ahci_command_create(CMD_READ_DMA);
+ ahci_command_adjust(cmd, 0, ptr, bufsize, 32);
+ ahci_command_commit(ahci, cmd, px);
+ ahci_command_issue(ahci, cmd);
+ ahci_command_verify(ahci, cmd);
+ g_free(cmd);
+
+ /* Read back the guest's receive buffer into local memory */
+ memread(ptr, rx, bufsize);
+ guest_free(ahci->parent->alloc, ptr);
+
+ g_assert_cmphex(memcmp(tx, rx, bufsize), ==, 0);
+
+ ahci_shutdown(ahci);
+
+ g_free(rx);
+ g_free(tx);
+}
+
/******************************************************************************/
/* AHCI I/O Test Matrix Definitions
*/
@@ -1054,6 +1111,8 @@ int main(int argc, char **argv)
}
}
+ qtest_add_func("/ahci/io/dma/lba28/fragmented", test_dma_fragmented);
+
ret = g_test_run();
/* Cleanup */
--
2.1.0
- [Qemu-devel] [PULL 46/69] ide: commonize io_buffer_index initialization, (continued)
- [Qemu-devel] [PULL 46/69] ide: commonize io_buffer_index initialization, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 47/69] ide: make more functions static, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 48/69] ide: support PIO restart for the ISA controller, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 50/69] ahci: add support for restarting non-queued commands, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 49/69] ahci: Migrate IDEStatus, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 53/69] libqos/ahci: Zero-fill AHCI headers, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 51/69] ahci: Recompute cur_cmd on migrate post load, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 52/69] qtest/ide: Test flush / retry for ISA and PCI, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 56/69] qtest/ahci: Add DMA test variants, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 54/69] qtest/ahci: Add a macro bootup routine, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 58/69] qtest/ahci: add fragmented dma test,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 55/69] libqos/ahci: add ahci command helpers, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 57/69] qtest/ahci: Add PIO and LBA48 tests, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 59/69] qtest/ahci: add qcow2 support to ahci-test, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 61/69] qtest/ahci: Add simple flush test, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 62/69] qtest/ahci: Allow override of default CLI options, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 60/69] qtest/ahci: test different disk sectors, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 63/69] libqtest: add qmp_eventwait, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 64/69] libqtest: add qmp_async, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 65/69] libqos: add blkdebug_prepare_script, Stefan Hajnoczi, 2015/02/27
- [Qemu-devel] [PULL 66/69] qtest/ahci: add flush retry test, Stefan Hajnoczi, 2015/02/27