]> xenbits.xensource.com Git - qemu-xen-3.3-testing.git/commitdiff
Improve DMA transfers by increasing the size of DMA buffers.
authorIan Jackson <iwj@mariner.uk.xensource.com>
Wed, 26 Mar 2008 16:09:35 +0000 (16:09 +0000)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Mon, 12 May 2008 11:16:24 +0000 (12:16 +0100)
This involves a new constant IDE_DMA_BUF_SIZE which is separate from
MAX_MULT_SECTORS.

Cross-ported from xen-unstable
 17267:f4a92f0db20fda98a633c149e3396c005a759a77

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
hw/ide.c

index 56a1cda92e55cc99be4878f290903922239c7275..b73dba27b6fb6768c676e76c371567f9ee0dd316 100644 (file)
--- a/hw/ide.c
+++ b/hw/ide.c
 /* set to 1 set disable mult support */
 #define MAX_MULT_SECTORS 16
 
+#define IDE_DMA_BUF_SIZE 131072
+
+#if (IDE_DMA_BUF_SIZE < MAX_MULT_SECTORS * 512)
+#error "IDE_DMA_BUF_SIZE must be bigger or equal to MAX_MULT_SECTORS * 512"
+#endif
+
 /* ATAPI defines */
 
 #define ATAPI_PACKET_SIZE 12
@@ -920,8 +926,8 @@ static void ide_read_dma_cb(void *opaque, int ret)
 
     /* launch next transfer */
     n = s->nsector;
-    if (n > MAX_MULT_SECTORS)
-        n = MAX_MULT_SECTORS;
+    if (n > IDE_DMA_BUF_SIZE / 512)
+        n = IDE_DMA_BUF_SIZE / 512;
     s->io_buffer_index = 0;
     s->io_buffer_size = n * 512;
 #ifdef DEBUG_AIO
@@ -1028,8 +1034,8 @@ static void ide_write_dma_cb(void *opaque, int ret)
 
     /* launch next transfer */
     n = s->nsector;
-    if (n > MAX_MULT_SECTORS)
-        n = MAX_MULT_SECTORS;
+    if (n > IDE_DMA_BUF_SIZE / 512)
+        n = IDE_DMA_BUF_SIZE / 512;
     s->io_buffer_index = 0;
     s->io_buffer_size = n * 512;
 
@@ -1323,8 +1329,8 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret)
         data_offset = 16;
     } else {
         n = s->packet_transfer_size >> 11;
-        if (n > (MAX_MULT_SECTORS / 4))
-            n = (MAX_MULT_SECTORS / 4);
+        if (n > (IDE_DMA_BUF_SIZE / 2048))
+            n = (IDE_DMA_BUF_SIZE / 2048);
         s->io_buffer_size = n * 2048;
         data_offset = 0;
     }
@@ -2557,7 +2563,7 @@ static void ide_init2(IDEState *ide_state,
 
     for(i = 0; i < 2; i++) {
         s = ide_state + i;
-        s->io_buffer = qemu_memalign(512, MAX_MULT_SECTORS*512 + 4);
+        s->io_buffer = qemu_memalign(512, IDE_DMA_BUF_SIZE + 4);
         if (i == 0)
             s->bs = hd0;
         else