Project

General

Profile

Feature #341 » 9026-aio-support.patch

Wido den Hollander, 08/19/2010 05:41 AM

View differences:

libvirt-0.7.5/src/conf/domain_conf.h 2010-08-19 12:39:41.231262056 +0200
VIR_DOMAIN_DISK_CACHE_LAST
};
enum virDomainDiskAIO {
VIR_DOMAIN_DISK_AIO_DEFAULT,
VIR_DOMAIN_DISK_AIO_NATIVE,
VIR_DOMAIN_DISK_AIO_THREADS,
VIR_DOMAIN_DISK_AIO_LAST
};
/* Stores the virtual disk configuration */
typedef struct _virDomainDiskDef virDomainDiskDef;
typedef virDomainDiskDef *virDomainDiskDefPtr;
......
char *driverType;
char *serial;
int cachemode;
int aiomode;
unsigned int readonly : 1;
unsigned int shared : 1;
struct {
......
VIR_ENUM_DECL(virDomainDiskDevice)
VIR_ENUM_DECL(virDomainDiskBus)
VIR_ENUM_DECL(virDomainDiskCache)
VIR_ENUM_DECL(virDomainDiskAIO)
VIR_ENUM_DECL(virDomainFS)
VIR_ENUM_DECL(virDomainNet)
VIR_ENUM_DECL(virDomainChrTarget)
-- libvirt-0.7.5.orig/src/conf/domain_conf.c.orig 2010-08-19 12:33:18.131262003 +0200
++ libvirt-0.7.5/src/conf/domain_conf.c 2010-08-19 12:38:47.111262042 +0200
......
"writethrough",
"writeback")
VIR_ENUM_IMPL(virDomainDiskAIO, VIR_DOMAIN_DISK_AIO_LAST,
"default",
"native",
"threads")
VIR_ENUM_IMPL(virDomainFS, VIR_DOMAIN_FS_TYPE_LAST,
"mount",
"block",
......
char *target = NULL;
char *bus = NULL;
char *cachetag = NULL;
char *aiotag = NULL;
char *devaddr = NULL;
virStorageEncryptionPtr encryption = NULL;
char *serial = NULL;
......
driverName = virXMLPropString(cur, "name");
driverType = virXMLPropString(cur, "type");
cachetag = virXMLPropString(cur, "cache");
aiotag = virXMLPropString(cur, "aio");
} else if (xmlStrEqual(cur->name, BAD_CAST "readonly")) {
def->readonly = 1;
} else if (xmlStrEqual(cur->name, BAD_CAST "shareable")) {
......
goto error;
}
if (aiotag &&
(def->aiomode = virDomainDiskAIOTypeFromString(aiotag)) < 0) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
_("unknown disk aio mode '%s'"), aiotag);
goto error;
}
if (devaddr &&
sscanf(devaddr, "%x:%x:%x",
&def->pci_addr.domain,
......
VIR_FREE(driverType);
VIR_FREE(driverName);
VIR_FREE(cachetag);
VIR_FREE(aiotag);
VIR_FREE(devaddr);
VIR_FREE(serial);
virStorageEncryptionFree(encryption);
......
const char *device = virDomainDiskDeviceTypeToString(def->device);
const char *bus = virDomainDiskBusTypeToString(def->bus);
const char *cachemode = virDomainDiskCacheTypeToString(def->cachemode);
const char *aiomode = virDomainDiskAIOTypeToString(def->aiomode);
if (!type) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
......
return -1;
}
if (!aiomode) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
_("unexpected disk aio mode %d"), def->aiomode);
return -1;
}
virBufferVSprintf(buf,
" <disk type='%s' device='%s'>\n",
type, device);
......
virBufferVSprintf(buf, " type='%s'", def->driverType);
if (def->cachemode)
virBufferVSprintf(buf, " cache='%s'", cachemode);
if (def->aiomode)
virBufferVSprintf(buf, " aio='%s'", aiomode);
virBufferVSprintf(buf, "/>\n");
}
-- libvirt-0.7.5.orig/src/qemu/qemu_conf.h.orig 2010-08-19 12:40:20.451262050 +0200
++ libvirt-0.7.5/src/qemu/qemu_conf.h 2010-08-19 12:43:37.921262056 +0200
......
QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP = (1 << 10), /* New migration syntax after merge to QEMU with TCP transport */
QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC = (1 << 11), /* New migration syntax after merge to QEMU with EXEC transport */
QEMUD_CMD_FLAG_DRIVE_CACHE_V2 = (1 << 12), /* Is the cache= flag wanting new v2 values */
QEMUD_CMD_FLAG_DRIVE_AIO = (1 << 30), /* Is -drive aio= avail */
QEMUD_CMD_FLAG_KVM = (1 << 13), /* Whether KVM is compiled in */
QEMUD_CMD_FLAG_DRIVE_FORMAT = (1 << 14), /* Is -drive format= avail */
QEMUD_CMD_FLAG_VGA = (1 << 15), /* Is -vga avail */
-- libvirt-0.7.5.orig/src/qemu/qemu_conf.c.orig 2010-08-19 12:40:12.261262041 +0200
++ libvirt-0.7.5/src/qemu/qemu_conf.c 2010-08-19 12:43:08.681262078 +0200
......
"writethrough",
"writeback");
VIR_ENUM_DECL(qemuDiskAIO)
VIR_ENUM_IMPL(qemuDiskAIO, VIR_DOMAIN_DISK_AIO_LAST,
"default",
"native",
"threads");
VIR_ENUM_DECL(qemuVideo)
VIR_ENUM_IMPL(qemuVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
......
flags |= QEMUD_CMD_FLAG_DRIVE_CACHE_V2;
if (strstr(help, "format="))
flags |= QEMUD_CMD_FLAG_DRIVE_FORMAT;
if (strstr(help, "aio=threads|native"))
flags |= QEMUD_CMD_FLAG_DRIVE_AIO;
}
if (strstr(help, "-vga") && !strstr(help, "-std-vga"))
flags |= QEMUD_CMD_FLAG_VGA;
......
virBufferAddLit(&opt, ",cache=off");
}
if (disk->aiomode && (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_AIO)) {
const char * mode = qemuDiskAIOTypeToString(disk->aiomode);
virBufferVSprintf(&opt, ",aio=%s", mode);
}
if (virBufferError(&opt)) {
virBufferFreeAndReset(&opt);
goto no_memory;
(3-3/5)