From 2c37f47985768d3b979225b28aeda160f368441a Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 15 May 2008 16:05:41 +0000 Subject: [PATCH] Support paravirt disk configuration for xenner guests --- ChangeLog | 11 ++++++ src/qemu_conf.c | 8 +++-- src/qemu_conf.h | 1 + src/util.c | 20 ++++------- .../qemuxml2argv-disk-xenvbd.args | 1 + .../qemuxml2argv-disk-xenvbd.xml | 35 +++++++++++++++++++ tests/qemuxml2argvtest.c | 1 + tests/qemuxml2xmltest.c | 1 + 8 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-xenvbd.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-xenvbd.xml diff --git a/ChangeLog b/ChangeLog index f7ed3ca362..cf5d9c02ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Thu May 15 11:57:08 EST 2008 Daniel P. Berrange + + Support paravirt disk configuration for xenner guests + * src/qemu_conf.c, src/qemu_conf.h: Add support for 'xen' disk + bus and 'xvd' disk device names for Xenner + * src/util.c: Support parsing 'xvd' disk names + * tests/qemuxml2argv-disk-xenvbd.{args,xml}: Test case data + files for xvd disks. + * tests/qemuxml2argvtest.c, tests/qemuxml2xmltest.c: Add + test case for xvd disk / xen bus type + Thu May 15 09:12:08 CEST 2008 Jim Meyering Avoid using STREQLEN with a literal; use STRPREFIX instead diff --git a/src/qemu_conf.c b/src/qemu_conf.c index 8ae0960cd0..ed0fa90227 100644 --- a/src/qemu_conf.c +++ b/src/qemu_conf.c @@ -667,7 +667,8 @@ static int qemudParseDiskXML(virConnectPtr conn, if ((!device || STREQ((const char *)device, "disk")) && !STRPREFIX((const char *)target, "hd") && !STRPREFIX((const char *)target, "sd") && - !STRPREFIX((const char *)target, "vd")) { + !STRPREFIX((const char *)target, "vd") && + !STRPREFIX((const char *)target, "xvd")) { qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("Invalid harddisk device name: %s"), target); goto error; @@ -707,6 +708,8 @@ static int qemudParseDiskXML(virConnectPtr conn, disk->bus = QEMUD_DISK_BUS_SCSI; else if (STREQ((const char *)bus, "virtio")) disk->bus = QEMUD_DISK_BUS_VIRTIO; + else if (STREQ((const char *)bus, "xen")) + disk->bus = QEMUD_DISK_BUS_XEN; else { qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("Invalid bus type: %s"), bus); @@ -1435,7 +1438,8 @@ static const char *qemudBusIdToName(int busId, int qemuIF) { const char *busnames[] = { "ide", (qemuIF ? "floppy" : "fdc"), "scsi", - "virtio" }; + "virtio", + "xen"}; verify_true(ARRAY_CARDINALITY(busnames) == QEMUD_DISK_BUS_LAST); return busnames[busId]; diff --git a/src/qemu_conf.h b/src/qemu_conf.h index 2c416288d2..183b16de45 100644 --- a/src/qemu_conf.h +++ b/src/qemu_conf.h @@ -61,6 +61,7 @@ enum qemud_vm_disk_bus { QEMUD_DISK_BUS_FDC, QEMUD_DISK_BUS_SCSI, QEMUD_DISK_BUS_VIRTIO, + QEMUD_DISK_BUS_XEN, QEMUD_DISK_BUS_LAST }; diff --git a/src/util.c b/src/util.c index bdb6dea6c9..87a46cb1cf 100644 --- a/src/util.c +++ b/src/util.c @@ -778,25 +778,19 @@ virParseMacAddr(const char* str, unsigned char *addr) int virDiskNameToIndex(const char *name) { const char *ptr = NULL; int idx = 0; + static char const* const drive_prefix[] = {"fd", "hd", "vd", "sd", "xvd"}; + unsigned int i; - if (strlen(name) < 3) - return -1; - - switch (*name) { - case 'f': - case 'h': - case 'v': - case 's': + for (i = 0; i < ARRAY_CARDINALITY(drive_prefix); i++) { + if (STRPREFIX(name, drive_prefix[i])) { + ptr = name + strlen(drive_prefix[i]); break; - default: - return 0; + } } - if (*(name + 1) != 'd') + if (!ptr) return -1; - ptr = name+2; - while (*ptr) { idx = idx * 26; diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-xenvbd.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-xenvbd.args new file mode 100644 index 0000000000..5f5d9ecef0 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-xenvbd.args @@ -0,0 +1 @@ +/usr/bin/qemu -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -drive file=/dev/HostVG/QEMUGuest1,if=ide,index=0,boot=on -drive file=/dev/HostVG/QEMUGuest2,if=ide,media=cdrom,index=2 -drive file=/tmp/data.img,if=xen,index=0 -drive file=/tmp/logs.img,if=xen,index=6 -net none -serial none -parallel none -usb \ No newline at end of file diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-xenvbd.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-xenvbd.xml new file mode 100644 index 0000000000..c42404a5cf --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-xenvbd.xml @@ -0,0 +1,35 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219200 + 219200 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu + + + + + + + + + + + + + + + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 2dabae7027..30009e7533 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -153,6 +153,7 @@ main(int argc, char **argv) DO_TEST("disk-floppy", 0); DO_TEST("disk-many", 0); DO_TEST("disk-virtio", 1); + DO_TEST("disk-xenvbd", 1); DO_TEST("graphics-vnc", 0); DO_TEST("graphics-sdl", 0); DO_TEST("input-usbmouse", 0); diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 76b46bdbcd..fda89b4e44 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -102,6 +102,7 @@ main(int argc, char **argv) DO_TEST("disk-cdrom"); DO_TEST("disk-floppy"); DO_TEST("disk-many"); + DO_TEST("disk-xenvbd"); DO_TEST("graphics-vnc"); DO_TEST("graphics-sdl"); DO_TEST("input-usbmouse"); -- 2.39.5