[libvirt] [PATCH] qemu: Fix detection of drive readonly option

So far, readonly=on option is used when qemu supports -device. However, there are qemu versions which support readonly option with -drive although they don't have support for -device. --- src/qemu/qemu_conf.c | 12 ++- src/qemu/qemu_conf.h | 1 + tests/qemuhelpdata/kvm-83-rhel56 | 141 ++++++++++++++++++++ tests/qemuhelptest.c | 26 ++++ ...qemuxml2argv-disk-drive-readonly-no-device.args | 1 + .../qemuxml2argv-disk-drive-readonly-no-device.xml | 31 +++++ tests/qemuxml2argvtest.c | 5 +- 7 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 tests/qemuhelpdata/kvm-83-rhel56 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.xml diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index e2c67a3..00e89a1 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1187,6 +1187,8 @@ static unsigned long long qemudComputeCmdFlags(const char *help, flags |= QEMUD_CMD_FLAG_DRIVE_CACHE_V2; if (strstr(help, "format=")) flags |= QEMUD_CMD_FLAG_DRIVE_FORMAT; + if (strstr(help, "readonly=")) + flags |= QEMUD_CMD_FLAG_DRIVE_READONLY; } if (strstr(help, "-vga") && !strstr(help, "-std-vga")) flags |= QEMUD_CMD_FLAG_VGA; @@ -1202,8 +1204,14 @@ static unsigned long long qemudComputeCmdFlags(const char *help, flags |= QEMUD_CMD_FLAG_CHARDEV; if (strstr(help, "-balloon")) flags |= QEMUD_CMD_FLAG_BALLOON; - if (strstr(help, "-device")) + if (strstr(help, "-device")) { flags |= QEMUD_CMD_FLAG_DEVICE; + /* + * When -device was introduced, qemu already supported drive's + * readonly option but didn't advertise that. + */ + flags |= QEMUD_CMD_FLAG_DRIVE_READONLY; + } if (strstr(help, "-nodefconfig")) flags |= QEMUD_CMD_FLAG_NODEFCONFIG; /* The trailing ' ' is important to avoid a bogus match */ @@ -2688,7 +2696,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, disk->bus != VIR_DOMAIN_DISK_BUS_IDE) virBufferAddLit(&opt, ",boot=on"); if (disk->readonly && - qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) + qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_READONLY) virBufferAddLit(&opt, ",readonly=on"); if (disk->driverType && *disk->driverType != '\0' && disk->type != VIR_DOMAIN_DISK_TYPE_DIR && diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 005031d..530dcdb 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -96,6 +96,7 @@ enum qemud_cmd_flags { QEMUD_CMD_FLAG_FSDEV = (1LL << 40), /* -fstype filesystem passthrough */ QEMUD_CMD_FLAG_NESTING = (1LL << 41), /* -enable-nesting (SVM/VMX) */ QEMUD_CMD_FLAG_NAME_PROCESS = (1LL << 42), /* Is -name process= available */ + QEMUD_CMD_FLAG_DRIVE_READONLY = (1LL << 43), /* -drive readonly=on|off */ }; /* Main driver state */ diff --git a/tests/qemuhelpdata/kvm-83-rhel56 b/tests/qemuhelpdata/kvm-83-rhel56 new file mode 100644 index 0000000..b2cefa9 --- /dev/null +++ b/tests/qemuhelpdata/kvm-83-rhel56 @@ -0,0 +1,141 @@ +QEMU PC emulator version 0.9.1 (kvm-83-maint-snapshot-20090205), Copyright (c) 2003-2008 Fabrice Bellard +usage: qemu [options] [disk_image] + +'disk_image' is a raw hard image image for IDE hard disk 0 + +Standard options: +-M machine select emulated machine (-M ? for list) +-cpu cpu select CPU (-cpu ? for list) +-fda/-fdb file use 'file' as floppy disk 0/1 image +-hda/-hdb file use 'file' as IDE hard disk 0/1 image +-hdc/-hdd file use 'file' as IDE hard disk 2/3 image +-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master) +-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i] + [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off] + [,cache=writethrough|writeback|none|unsafe][,format=f][,serial=s] + [,boot=on|off][,readonly=on|off] + use 'file' as a drive image +-mtdblock file use 'file' as on-board Flash memory image +-sd file use 'file' as SecureDigital card image +-pflash file use 'file' as a parallel flash image +-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n) +-snapshot write to temporary files instead of disk image files +-no-frame open SDL window without a frame and window decorations +-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt) +-no-quit disable SDL window close capability +-no-fd-bootchk disable boot signature checking for floppy disks +-m megs set virtual RAM size to megs MB [default=128] +-smp n set the number of CPUs to 'n' [default=1] +-nographic disable graphical output and redirect serial I/Os to console +-portrait rotate graphical output 90 deg left (only PXA LCD) +-k language use keyboard layout (for example "fr" for French) +-audio-help print list of audio drivers and their options +-soundhw c1,... enable audio support + and only specified sound cards (comma separated list) + use -soundhw ? to get the list of supported cards + use -soundhw all to enable all of them +-vga [std|cirrus] + select video card type +-localtime set the real time clock to local time [default=utc] +-full-screen start in full screen +-win2k-hack use it when installing Windows 2000 to avoid a disk full bug +-rtc-td-hack use it to fix time drift in Windows ACPI HAL +-usb enable the USB driver (will be the default soon) +-usbdevice name add the host or guest USB device 'name' +-name string set the name of the guest +-uuid %08x-%04x-%04x-%04x-%012x specify machine UUID +-notify event enable async-notifications for event +-qxl <num>[,ram=megs] + use 'num' qxl display devices, each with RAM size of 'megs' MB + [default=64] +-spice <args> use spice +-spice-help show spice usage + +Network options: +-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str] + create a new Network Interface Card and connect it to VLAN 'n' +-net user[,vlan=n][,name=str][,hostname=host] + connect the user mode network stack to VLAN 'n' and send + hostname 'host' to DHCP clients +-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile] + connect the host TAP network interface to VLAN 'n' and use the + network scripts 'file' (default=/etc/qemu-ifup) + and 'dfile' (default=/etc/qemu-ifdown); + use '[down]script=no' to disable script execution; + use 'fd=h' to connect to an already opened TAP interface +-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port] + connect the vlan 'n' to another VLAN using a socket connection +-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port] + connect the vlan 'n' to multicast maddr and port +-net none use it alone to have zero network devices; if no -net option + is provided, the default is '-net nic -net user' + +-tftp dir allow tftp access to files in dir [-net user] +-bootp file advertise file in BOOTP replies +-redir [tcp|udp]:host-port:[guest-host]:guest-port + redirect TCP or UDP connections from host to guest [-net user] + +Linux boot specific: +-kernel bzImage use 'bzImage' as kernel image +-append cmdline use 'cmdline' as kernel command line +-initrd file use 'file' as initial ram disk + +Debug/Expert options: +-monitor dev redirect the monitor to char device 'dev' +-vmchannel di:DI,dev redirect the hypercall device with device id DI, to char device 'dev' +-serial dev redirect the serial port to char device 'dev' +-parallel dev redirect the parallel port to char device 'dev' +-pidfile file Write PID to 'file' +-S freeze CPU at startup (use 'c' to start execution) +-s wait gdb connection to port +-p port set gdb connection port [default=1234] +-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items) +-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS + translation (t=none or lba) (usually qemu can guess them) +-L path set the directory for the BIOS, VGA BIOS and keymaps +-no-kvm disable KVM hardware virtualization +-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC +-no-kvm-pit disable KVM kernel mode PIT +-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection +-pcidevice host=bus:dev.func[,dma=none][,name=string] + expose a PCI device to the guest OS. + dma=none: don't perform any dma translations (default is to use an iommu) + 'string' is used in log output. +-no-acpi disable ACPI +-no-hpet disable HPET +-balloon none disable balloon device +-balloon virtio + enable virtio balloon device (default) +-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...] + ACPI table description +-smbios file=binary + Load SMBIOS entry from binary file +-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d] + Specify SMBIOS type 0 fields +-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str] + [,uuid=uuid][,sku=str][,family=str] + Specify SMBIOS type 1 fields +-no-reboot exit instead of rebooting +-no-shutdown stop before shutdown +-loadvm [tag|id] start right away with a saved state (loadvm in monitor) +-vnc display start a VNC server on display +-daemonize daemonize QEMU after initializing +-tdf inject timer interrupts that got lost +-kvm-shadow-memory megs set the amount of shadow pages to be allocated +-mem-path set the path to hugetlbfs/tmpfs mounted directory, also + enables allocation of guest memory with huge pages +-mem-prealloc toggles preallocation of -mem-path backed physical memory + at startup. Default is enabled. +-option-rom rom load a file, rom, into the option ROM space +-clock force the use of the given methods for timer alarm. + To see what timers are available use -clock ? +-startdate select initial date of the clock +-icount [N|auto] + Enable virtual instruction counter with 2^N clock ticks per instruction + +During emulation, the following keys are useful: +ctrl-alt-f toggle full screen +ctrl-alt-n switch to virtual console 'n' +ctrl-alt toggle mouse and keyboard grab + +When using -nographic, press 'ctrl-a h' to get some help. diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c index d4453db..97531ff 100644 --- a/tests/qemuhelptest.c +++ b/tests/qemuhelptest.c @@ -130,6 +130,30 @@ mymain(int argc, char **argv) QEMUD_CMD_FLAG_MEM_PATH | QEMUD_CMD_FLAG_TDF, 9001, 1, 74); + DO_TEST("kvm-83-rhel56", + QEMUD_CMD_FLAG_VNC_COLON | + QEMUD_CMD_FLAG_NO_REBOOT | + QEMUD_CMD_FLAG_DRIVE | + QEMUD_CMD_FLAG_DRIVE_BOOT | + QEMUD_CMD_FLAG_NAME | + QEMUD_CMD_FLAG_UUID | + QEMUD_CMD_FLAG_VNET_HDR | + QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | + QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | + QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | + QEMUD_CMD_FLAG_KVM | + QEMUD_CMD_FLAG_DRIVE_FORMAT | + QEMUD_CMD_FLAG_DRIVE_SERIAL | + QEMUD_CMD_FLAG_VGA | + QEMUD_CMD_FLAG_PCIDEVICE | + QEMUD_CMD_FLAG_MEM_PATH | + QEMUD_CMD_FLAG_BALLOON | + QEMUD_CMD_FLAG_RTC_TD_HACK | + QEMUD_CMD_FLAG_NO_HPET | + QEMUD_CMD_FLAG_NO_KVM_PIT | + QEMUD_CMD_FLAG_TDF | + QEMUD_CMD_FLAG_DRIVE_READONLY, + 9001, 1, 83); DO_TEST("qemu-0.10.5", QEMUD_CMD_FLAG_KQEMU | QEMUD_CMD_FLAG_VNC_COLON | @@ -238,6 +262,7 @@ mymain(int argc, char **argv) QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | QEMUD_CMD_FLAG_DRIVE_FORMAT | QEMUD_CMD_FLAG_DRIVE_SERIAL | + QEMUD_CMD_FLAG_DRIVE_READONLY | QEMUD_CMD_FLAG_VGA | QEMUD_CMD_FLAG_0_10 | QEMUD_CMD_FLAG_ENABLE_KVM | @@ -267,6 +292,7 @@ mymain(int argc, char **argv) QEMUD_CMD_FLAG_KVM | QEMUD_CMD_FLAG_DRIVE_FORMAT | QEMUD_CMD_FLAG_DRIVE_SERIAL | + QEMUD_CMD_FLAG_DRIVE_READONLY | QEMUD_CMD_FLAG_VGA | QEMUD_CMD_FLAG_0_10 | QEMUD_CMD_FLAG_PCIDEVICE | diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args new file mode 100644 index 0000000..fb99a7c --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args @@ -0,0 +1 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -drive file=/dev/HostVG/QEMUGuest1,if=ide,bus=0,unit=0 -drive file=/dev/sr0,if=ide,media=cdrom,bus=1,unit=0,readonly=on -net none -serial none -parallel none -usb diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.xml new file mode 100644 index 0000000..1f193c9 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.xml @@ -0,0 +1,31 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory>219200</memory> + <currentMemory>219200</currentMemory> + <vcpu>1</vcpu> + <os> + <type arch='i686' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu</emulator> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' unit='0'/> + </disk> + <disk type='block' device='cdrom'> + <source dev='/dev/sr0'/> + <target dev='hdc' bus='ide'/> + <readonly/> + <address type='drive' controller='0' bus='1' unit='0'/> + </disk> + <controller type='ide' index='0'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 4eb3cc6..f719f12 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -276,7 +276,10 @@ mymain(int argc, char **argv) DO_TEST("disk-drive-fat", QEMUD_CMD_FLAG_DRIVE | QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); DO_TEST("disk-drive-readonly-disk", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_NODEFCONFIG, false); + QEMUD_CMD_FLAG_DRIVE_READONLY | QEMUD_CMD_FLAG_DEVICE | + QEMUD_CMD_FLAG_NODEFCONFIG, false); + DO_TEST("disk-drive-readonly-no-device", QEMUD_CMD_FLAG_DRIVE | + QEMUD_CMD_FLAG_DRIVE_READONLY | QEMUD_CMD_FLAG_NODEFCONFIG, false); DO_TEST("disk-drive-fmt-qcow", QEMUD_CMD_FLAG_DRIVE | QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); DO_TEST("disk-drive-shared", QEMUD_CMD_FLAG_DRIVE | -- 1.7.3.2

On 10/25/2010 07:47 AM, Jiri Denemark wrote:
So far, readonly=on option is used when qemu supports -device. However, there are qemu versions which support readonly option with -drive although they don't have support for -device. --- src/qemu/qemu_conf.c | 12 ++- src/qemu/qemu_conf.h | 1 + tests/qemuhelpdata/kvm-83-rhel56 | 141 ++++++++++++++++++++ tests/qemuhelptest.c | 26 ++++ ...qemuxml2argv-disk-drive-readonly-no-device.args | 1 + .../qemuxml2argv-disk-drive-readonly-no-device.xml | 31 +++++ tests/qemuxml2argvtest.c | 5 +- 7 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 tests/qemuhelpdata/kvm-83-rhel56 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.xml
ACK.
+++ b/src/qemu/qemu_conf.h @@ -96,6 +96,7 @@ enum qemud_cmd_flags { QEMUD_CMD_FLAG_FSDEV = (1LL<< 40), /* -fstype filesystem passthrough */ QEMUD_CMD_FLAG_NESTING = (1LL<< 41), /* -enable-nesting (SVM/VMX) */ QEMUD_CMD_FLAG_NAME_PROCESS = (1LL<< 42), /* Is -name process= available */ + QEMUD_CMD_FLAG_DRIVE_READONLY = (1LL<< 43), /* -drive readonly=on|off */
It feels like we're burning through these flag bits rather quickly: 15 flags added since January of this year. While it doesn't affect your patch, it means that at the current pace we have less than 18 months before we have to add a second flag variable. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

src/qemu/qemu_conf.c | 12 ++- src/qemu/qemu_conf.h | 1 + tests/qemuhelpdata/kvm-83-rhel56 | 141 ++++++++++++++++++++ tests/qemuhelptest.c | 26 ++++ ...qemuxml2argv-disk-drive-readonly-no-device.args | 1 + .../qemuxml2argv-disk-drive-readonly-no-device.xml | 31 +++++ tests/qemuxml2argvtest.c | 5 +- 7 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 tests/qemuhelpdata/kvm-83-rhel56 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.xml
ACK.
Thanks, pushed. Jirka

On Mon, Oct 25, 2010 at 03:56:58PM -0600, Eric Blake wrote:
On 10/25/2010 07:47 AM, Jiri Denemark wrote:
So far, readonly=on option is used when qemu supports -device. However, there are qemu versions which support readonly option with -drive although they don't have support for -device. --- src/qemu/qemu_conf.c | 12 ++- src/qemu/qemu_conf.h | 1 + tests/qemuhelpdata/kvm-83-rhel56 | 141 ++++++++++++++++++++ tests/qemuhelptest.c | 26 ++++ ...qemuxml2argv-disk-drive-readonly-no-device.args | 1 + .../qemuxml2argv-disk-drive-readonly-no-device.xml | 31 +++++ tests/qemuxml2argvtest.c | 5 +- 7 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 tests/qemuhelpdata/kvm-83-rhel56 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-readonly-no-device.xml
ACK.
+++ b/src/qemu/qemu_conf.h @@ -96,6 +96,7 @@ enum qemud_cmd_flags { QEMUD_CMD_FLAG_FSDEV = (1LL<< 40), /* -fstype filesystem passthrough */ QEMUD_CMD_FLAG_NESTING = (1LL<< 41), /* -enable-nesting (SVM/VMX) */ QEMUD_CMD_FLAG_NAME_PROCESS = (1LL<< 42), /* Is -name process= available */ + QEMUD_CMD_FLAG_DRIVE_READONLY = (1LL<< 43), /* -drive readonly=on|off */
It feels like we're burning through these flag bits rather quickly: 15 flags added since January of this year. While it doesn't affect your patch, it means that at the current pace we have less than 18 months before we have to add a second flag variable.
This isn't a problem. This is an internal ABI only, so we can change the way we represent this anytime we like. There is a bigger problem in this area. We run 'qemu -help' every time we do any operation on the guest that requires these flags to be known. This is bad because the 'qemu' binary may not be the same qemu binary that we originally booted the guest with (ie RPM package upgrade). We can thus detect the wrong flags potentially. What I think we should do is define a bitset type 'virBitset'. Change this to a plain enum, instead of a flag based enum, thus giving us 2^64 entries. We can then have APIs like virBitsetIsSet(num). The virBitset data should be stored in the virDomainObjPtr instance at the time of guest booting. We also need to persist it in the XML state file /var/lib/libvirt/qemu/$guest.xml, as named enum entries, and reload this at libvirtd restart. I'm not likely to have any time to implement this in the forseeable future though. Hopefully someone can do it before we use up the last 20 flags :-) Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

On Tue, Oct 26, 2010 at 10:36:15AM +0100, Daniel P. Berrange wrote:
On Mon, Oct 25, 2010 at 03:56:58PM -0600, Eric Blake wrote:
It feels like we're burning through these flag bits rather quickly: 15 flags added since January of this year. While it doesn't affect your patch, it means that at the current pace we have less than 18 months before we have to add a second flag variable.
This isn't a problem. This is an internal ABI only, so we can change the way we represent this anytime we like.
There is a bigger problem in this area. We run 'qemu -help' every time we do any operation on the guest that requires these flags to be known. This is bad because the 'qemu' binary may not be the same qemu binary that we originally booted the guest with (ie RPM package upgrade). We can thus detect the wrong flags potentially.
What I think we should do is define a bitset type 'virBitset'. Change this to a plain enum, instead of a flag based enum, thus giving us 2^64 entries. We can then have APIs like virBitsetIsSet(num). The virBitset data should be stored in the virDomainObjPtr instance at the time of guest booting. We also need to persist it in the XML state file /var/lib/libvirt/qemu/$guest.xml, as named enum entries, and reload this at libvirtd restart.
I'm not likely to have any time to implement this in the forseeable future though. Hopefully someone can do it before we use up the last 20 flags :-)
Any chance this could end up in http://libvirt.org/todo.html in an "Internals" section ? Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/

On 10/26/2010 07:59 AM, Daniel Veillard wrote:
There is a bigger problem in this area. We run 'qemu -help' every time we do any operation on the guest that requires these flags to be known. This is bad because the 'qemu' binary may not be the same qemu binary that we originally booted the guest with (ie RPM package upgrade). We can thus detect the wrong flags potentially.
Any chance this could end up in http://libvirt.org/todo.html in an "Internals" section ?
Now that todo is generated, the way to do that is by filing a BZ. I created: https://bugzilla.redhat.com/show_bug.cgi?id=646931 -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Oct 26, 2010 at 11:33:20AM -0600, Eric Blake wrote:
On 10/26/2010 07:59 AM, Daniel Veillard wrote:
There is a bigger problem in this area. We run 'qemu -help' every time we do any operation on the guest that requires these flags to be known. This is bad because the 'qemu' binary may not be the same qemu binary that we originally booted the guest with (ie RPM package upgrade). We can thus detect the wrong flags potentially.
Any chance this could end up in http://libvirt.org/todo.html in an "Internals" section ?
Now that todo is generated, the way to do that is by filing a BZ. I created:
You also need to make it block one of the libvirtTodoXXXX bugs for it to appear in the right section. I've done that now Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
participants (4)
-
Daniel P. Berrange
-
Daniel Veillard
-
Eric Blake
-
Jiri Denemark