- 17 8月, 2009 1 次提交
-
-
由 Chris Lalancette 提交于
Implement a compressed save image format for qemu. While ideally we would have the choice between compressed/non-compressed available to the libvirt API, unfortunately there is no "flags" parameter to the virDomainSave() API. Therefore, implement this as a qemu.conf option. gzip, bzip2, and lzma are implemented, and it should be very easy to implement additional compression methods. One open question is if/how we should detect the compression binaries. One way to do it is to do compile-time setting of the paths (via configure.in), but that doesn't seem like a great thing to do. My preferred solution is not to detect at all; when we go to run the commands that need them, if they aren't available, or aren't available in one of the standard paths, then we'll fail. That's also the solution implemented in this patch. In the future, we'll have a more robust (managed) save/restore API, at which time we can expose this functionality properly in the API. V2: get rid of redundant dd command and just use >> to append data. V3: Add back the missing pieces for the enum and bumping the save version. V4: Make the compressed field in the save_header an int. Implement LZMA compression. Signed-off-by: NChris Lalancette <clalance@redhat.com>
-
- 14 8月, 2009 6 次提交
-
-
由 Mark McLoughlin 提交于
If a PCI device reset causes other devices to be reset, allow it so long as those other devices are note assigned to another active domain. Note, we need to take the driver lock qemudNodeDeviceReset() because the check function will iterate over the domain list. * src/qemu_conf.c: add qemuCheckPciHostDevice() to iterate over active domains checking whether the affected device is assigned * src/pci.[ch]: add pciDeviceEquals() helper
-
由 Mark McLoughlin 提交于
When using a Secondary Bus Reset, all devices on the bus are reset. Extend the pciResetDevice() API so that a 'check' callback can be supplied which will verify that it is safe to reset the other devices on the bus. The virDomainObjPtr parameter is needed so that when the check function iterates over the domain list, it can avoid double locking. * src/pci.[ch]: add a 'check' callback to pciResetDevice(), re-work pciIterDevices() to pass the check function to the iter functions, use the check function in the bus iterator, return the first unsafe device from pciBusCheckOtherDevices() and include its details in the bus reset error message. * src/qemu_driver.c, src/xen_uninified.c: just pass NULL as the check function for now
-
由 Mark McLoughlin 提交于
Currently, if we are unable to reset a PCI device we return a fairly generic 'No PCI reset capability available' error message. Fix that by returning an error from the individual reset messages and using that error to construct the higher level error mesage. * src/pci.c: set errors in pciTryPowerManagementReset() and pciTrySecondaryBusReset() on failure; use those error messages in pciResetDevice(), or explain that no reset support is available
-
由 Mark McLoughlin 提交于
When the guest shuts down, we should attempt to restore all PCI host devices to a sane state. In the case of managed hostdevs, we should reset and re-attach the devices. In the case of unmanaged hostdevs, we should just reset them. Note, KVM will already reset assigned devices when the guest shuts down using whatever means it can, so we are only doing it to cover the cases the kernel can't handle. * src/qemu_driver.c: add qemuDomainReAttachHostDevices() and call it from qemudShutdownVMDaemon()
-
由 Mark McLoughlin 提交于
Attaching a host PCI device to a qemu guest is done with a straightforward 'pci_add auto host host=XX:XX.X' command. Like with NIC and disk hotplug, we need to retain the guest PCI address assigned by qemu so that we can use it for hot-unplug. Identifying a device for detach is done using the host PCI address. Managed mode is handled by detaching/resetting the device before attaching it to the guest and re-attaching it after detaching it from the guest. * src/qemu_driver.c: add qemudDomainAttachHostPciDevice() and qemudDomainDetachHostPciDevice() * src/domain_conf.h: add somewhere to store the guest PCI address * src/domain_conf.c: handle formatting and parsing the guest PCI address
-
由 Mark McLoughlin 提交于
Re-factor the hostdev hotplug code so that we can easily add PCI hostdev hotplug to qemudDomainAttachHostDevice(). * src/qemu_driver.c: rename qemudDomainAttachHostDevice() to qemudDomainAttachHostUsbDevice(); make qemudDomainAttachHostDevice() handle all hostdev types * src/libvirt_private.syms: export a couple of hostdev related ToString() functions
-
- 11 8月, 2009 2 次提交
-
-
由 Chris Lalancette 提交于
As of qemu 0.10.6, qemu now honors the -S flag on incoming migration. That means that when the migration completes, we have to issue a 'cont' command to get the VM running again. We do it unconditionally since it won't hurt on older qemu. Signed-off-by: NChris Lalancette <clalance@redhat.com>
-
由 Chris Lalancette 提交于
When doing a restore, we were forgetting to update the state file for the VM. That means that if you do a save/restore, then shut down libvirtd, then start it back up, you'll see the state of the guest as "paused", even though it is really running. We were just forgetting a "virDomainSaveStatus" call in the restor path. Signed-off-by: NChris Lalancette <clalance@redhat.com>
-
- 10 8月, 2009 1 次提交
-
-
由 Mark McLoughlin 提交于
If we're running qemu unprivileged, we need to chown any supplied kernel or initrd before spawning it. * src/qemu_driver.c: rename qemuDomainSetDiskOwnership() to qemuDomainSetFileOwnership(), pass it a path string instead of a disk definition and use it for chowning the kernel/initrd in qemuDomainSetAllDeviceOwnership()
-
- 02 8月, 2009 5 次提交
-
-
由 Chris Lalancette 提交于
Signed-off-by: NChris Lalancette <clalance@redhat.com>
-
由 Chris Lalancette 提交于
Signed-off-by: NChris Lalancette <clalance@redhat.com>
-
由 Chris Lalancette 提交于
Signed-off-by: NChris Lalancette <clalance@redhat.com>
-
由 Chris Lalancette 提交于
Signed-off-by: NChris Lalancette <clalance@redhat.com>
-
由 Chris Lalancette 提交于
Fix up qemudDomainMigratePrepare2 to use virGetHostname instead of gethostname. Besides the fact that virGetHostname is far more clever, there was a latent bug in the handling that could cause a buffer overflow on a very long hostname. Signed-off-by: NChris Lalancette <clalance@redhat.com>
-
- 01 8月, 2009 2 次提交
-
-
由 Daniel P. Berrange 提交于
* src/qemu_driver.c: Check that monitor device is not NULL before runing a command to protect against bugs in caller
-
由 Daniel P. Berrange 提交于
* src/qemu_driver.c: Add check that QEMU is active before attemting to shutdown. Fix error code for check in destroy method
-
- 31 7月, 2009 1 次提交
-
-
由 Daniel P. Berrange 提交于
* src/util.c: Don't drop capabilities until after the PID file has been written. Kill off child if writing the PID file fails * src/qemu_driver.c: Remove bogus trailing '/' in state dir
-
- 29 7月, 2009 1 次提交
-
-
由 Ryota Ozaki 提交于
* src/qemu_driver.c: fix qemudOpenMonitorUnix() to retry on ENOENT instead of EACCES which is the error one receive when the socket error hasn't shown up yet
-
- 27 7月, 2009 11 次提交
-
-
由 Daniel P. Berrange 提交于
* src/qemu_driver.c: implement missing features in qemudDomainGetVcpus for 'cpu' and 'cpuTime' fields
-
由 Mark McLoughlin 提交于
In order to hotplug a network/bridge backed NIC, we need to first create the tap file descriptor, add the tap interface to the bridge and then pass the file descriptor to the qemu process using the 'getfd' monitor command. Once the tapfd has been accepted, we create the network backend using host_net_add, supplying the name assigned to the tapfd. If this fails, we need to close the tapfd in qemu using the 'closefd' monitor command. If the version of qemu does not support the getfd/closefd monitor commands we detect "unknown command" in the getfd reply and fail the attach operation. * src/qemu_driver.c: add support for tapfd based hotplug in qemudDomainAttachNetDevice()
-
由 Mark McLoughlin 提交于
Add qemudMonitorCommandWithFd() which allows a file descriptor to be sent to qemu over a unix monitor socket using SCM_RIGHTS. See the unix(7) and cmsg(3) man pages. * src/qemu_conf.c: add a scm_fd param to qemudMonitorCommandExtra(), add qemudMonitorCommandWithFd(), implement SCM_RIGHTS support in qemudMonitorSendUnix()
-
由 Mark McLoughlin 提交于
Switch from using write() to using sendmsg() on QEMU's monitor socket so that we can add support for SCM_RIGHTS. * src/qemu_driver.c: add sendmsg() based qemudMonitorSendUnix() and use it when the monitor fd is a unix socket
-
由 Mark McLoughlin 提交于
Add a little helper function to write the monitor command followed by carriage return in a single write. This doesn't make any real difference, but allows us to more easily switch to using sendmsg() when using the monitor over a unix socket. * src/qemu_conf.c: split qemudMonitorSend() out
-
由 Mark McLoughlin 提交于
In subsequent patches we're going to have a file descriptor to close too, so centralize the error handling cleanups to make things easier. * src/qemu_conf.c: in qemudDomainAttachNetDevice() consolidate the error handling cleanups together
-
由 Mark McLoughlin 提交于
With hotplug, we're going to want to pass a tapfd name rather than an actual file descriptor, so prepare the way by passing a string tapfd to qemuBuildHostNetStr(). * src/qemu_conf.h: qemuBuildHostNetStr() takes a string tapfd now * src/qemu_conf.c: pass qemuBuildHostNetStr() a string rather than an actual file descriptor * src/qemu_driver.c: update qemudDomainAttachNetDevice() for change
-
由 Mark McLoughlin 提交于
By probing for qemu machine types, we increased the time of a GetCapabilities call from 100us to a whopping 60ms. This patch takes the approach of only probing for machine types when the mtime of the emulator binary changed since the last time the capabilities were generated. * src/capabilities.h: cache the emulator binary mtime * src/qemu_conf.c: add qemudGetOldMachines() to copy the machine types from the old caps struct if the mtime for the binary hasn't changed * src/qemu_conf.h, src/qemu_driver.c: pass the old caps pointer to qemudCapsInit()
-
由 Mark McLoughlin 提交于
Not all possible emulators are actually in the capabilities, so if we don't find the supplied emulator we should probe it directly for machine types. * src/qemu_driver.c: add qemudCanonicalizeMachineDirect() to directly probe an emulator for the canonical machine type
-
由 Mark McLoughlin 提交于
In qemu-0.11 there is a 'pc-0.10' machine type which allows you to run guests with a machine which is compatible with the pc machine in qemu-0.10 - e.g. using the original PCI class for virtio-blk and virtio-console and disabling MSI support in virtio-net. The idea here is that we don't want to suprise guests by changing the hardware when qemu is updated. I've just posted some patches for qemu-0.11 which allows libvirt to canonicalize the 'pc' machine alias to the latest machine version. This patches makes us use that so that when a guest is configured to use the 'pc' machine type, we resolve that to 'pc-0.11' machine and save that in the guest XML. See also: https://fedoraproject.org/wiki/Features/KVM_Stable_Guest_ABI * src/qemu_conf.c: add qemudCanonicalizeMachine() to canonicalize the machine type according to the machine aliases in capabilities * src/qemu_driver.c: parse aliases in qemudParseMachineTypesStr()
-
由 Cole Robinson 提交于
Do the check in libvirt.c, to save drivers from the burden. This changes behavior slightly in the qemu driver: we no longer explictly error if passed an empty string. An error will still be thrown when the device lookup fails.
-
- 24 7月, 2009 5 次提交
-
-
由 Daniel P. Berrange 提交于
* qemud/libvirtd_qemu.aug, qemud/test_libvirtd_qemu.aug, src/qemu.conf: Add 'cgroups_controllers' and 'cgroups_device_acl' parameters * src/qemu_conf.h, src/qemu_conf.c: Load & parse configuration params for cgroups * src/qemu_driver.c: Only use cgroups controllers that are activated, and use configured device whitelist instead of default, if set.
-
由 Daniel P. Berrange 提交于
* src/qemu_driver.c: Set a restrictive block device whitelist for all QEMU guests. Update whitelist when hotplugging disks. * src/cgroup.h, src/cgroup.c: Add some more convenience methods for dealing with block device whitelists.
-
由 Daniel P. Berrange 提交于
* src/qemu_driver.c: Add driver methods qemuGetSchedulerType, qemuGetSchedulerParameters, qemuSetSchedulerParameters * src/lxc_driver.c: Fix to use unsigned long long consistently for schedular parameters * src/cgroup.h, src/cgroup.c: Fix cpu_shares to take unsigned long long * src/util.c, src/util.h, src/libvirt_private.syms: Add a virStrToDouble helper * src/virsh.c: Fix handling of --set arg to schedinfo command to honour the designated data type of each schedular tunable as declared by the driver
-
由 Daniel P. Berrange 提交于
* src/qemu_driver.c: Place guest in cgroup upon startup. Remove cgroup upon shutdown
-
由 Laine Stump 提交于
* src/datatypes.c src/domain_conf.c src/interface_conf.c src/lxc_driver.c src/qemu_driver.c src/storage_backend.c src/virsh.c: add bare %s format string to printf-derivatives called with no format string
-
- 22 7月, 2009 5 次提交
-
-
由 Nguyen Anh Quynh 提交于
* include/libvirt/libvirt.h include/libvirt/libvirt.h.in: adds the new flag VIR_MEMORY_PHYSICAL for virDomainMemoryPeek * src/libvirt.c: update the front-end checking * src/qemu_driver.c: extend the QEmu driver
-
由 Mark McLoughlin 提交于
qemu network devices are hot-unplugged in two stages - first the PCI NIC is removed using 'pci_del <pci_addr>' and then the backend is removed using 'host_net_remove <vlan> <name>'. In order to perform these operations we need to have retained the PCI address, backend name and vlan number. * src/qemu_driver.c: add qemudDomainDetachNetDevice()
-
由 Mark McLoughlin 提交于
When we pci_add a NIC, we need to retain the PCI address assigned by qemu for using during detach. * src/qemu_driver.c: use qemudParsePciAddReply() to pull the PCI address from the pci_add reply * src/domain_conf.c: handle storing and parsing the PCI address in the domain state XML file
-
由 Mark McLoughlin 提交于
The current code for parsing pci_add replies ignores the the domain and bus numbers. Re-write the code to rectify that. Also, since pci_add is used for NIC hotplug as well ask disk hotplug, re-factor the code into a separate function. * src/qemu_driver.c: add qemudParsePciAddReply() function which can handle parsing domain and bus numbers
-
由 Mark McLoughlin 提交于
If we fail to pci_add a NIC, we should remove the network backend and leave things the way we found them. To do that, we pre-allocate a host_net_remove monitor command and issue that if the pci_add fails. If the remove fails, we just log a warning. We can only do this if we have a name for the network backend and we know the vlan number its associated with. * src/qemu_driver.c: host_net_remove the network backend if the pci_add fails
-