From c7033a8f11ee90fa06f09a8730e71251b708bb0a Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 20 Mar 2008 17:47:33 +0000 Subject: [PATCH] ioemu: improve DMA transfers by increasing the size of DMA buffers. Signed-off-by: Samuel Thibault --- tools/ioemu/hw/ide.c | 23 ++++++++++++++++------- tools/ioemu/hw/scsi-disk.c | 5 +++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/tools/ioemu/hw/ide.c b/tools/ioemu/hw/ide.c index c71c9039a5..7cb0f66797 100644 --- a/tools/ioemu/hw/ide.c +++ b/tools/ioemu/hw/ide.c @@ -189,6 +189,15 @@ /* set to 1 set disable mult support */ #define MAX_MULT_SECTORS 16 +#ifdef CONFIG_STUBDOM +#include +#define IDE_DMA_BUF_SIZE (BLKIF_MAX_SEGMENTS_PER_REQUEST * TARGET_PAGE_SIZE) +#else +#define IDE_DMA_BUF_SIZE 131072 +#endif +#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 */ @@ -932,8 +941,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 @@ -1041,8 +1050,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; @@ -1336,8 +1345,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; } @@ -2305,7 +2314,7 @@ static void ide_init2(IDEState *ide_state, for(i = 0; i < 2; i++) { s = ide_state + i; - s->io_buffer = qemu_memalign(getpagesize(), MAX_MULT_SECTORS*512 + 4); + s->io_buffer = qemu_memalign(getpagesize(), IDE_DMA_BUF_SIZE + 4); if (i == 0) s->bs = hd0; else diff --git a/tools/ioemu/hw/scsi-disk.c b/tools/ioemu/hw/scsi-disk.c index acbe75fc98..9de1fe83a5 100644 --- a/tools/ioemu/hw/scsi-disk.c +++ b/tools/ioemu/hw/scsi-disk.c @@ -34,9 +34,10 @@ do { fprintf(stderr, "scsi-disk: " fmt , ##args); } while (0) #define SENSE_ILLEGAL_REQUEST 5 #ifdef CONFIG_STUBDOM -#define SCSI_DMA_BUF_SIZE 32768 +#include +#define SCSI_DMA_BUF_SIZE (BLKIF_MAX_SEGMENTS_PER_REQUEST * TARGET_PAGE_SIZE) #else -#define SCSI_DMA_BUF_SIZE 65536 +#define SCSI_DMA_BUF_SIZE 131072 #endif typedef struct SCSIRequest { -- 2.39.5