Index: virt-manager-0.9.5/src/virtManager/addhardware.py =================================================================== --- virt-manager-0.9.5.orig/src/virtManager/addhardware.py +++ virt-manager-0.9.5/src/virtManager/addhardware.py @@ -1167,6 +1167,19 @@ class vmmAddHardware(vmmGObjectUI): if controller is not None: logging.debug("Adding controller:\n%s", self._dev.vmm_controller.get_xml_config()) + + # If vm is active, Try to hotplug the device and modify persistent + # config in one go + if self.vm.is_active(): + try: + self.vm.attach_device_flags(self._dev, 3) + return (False, None) + except Exception, e: + logging.debug("Could not hotplug device and modify persistent " + "config at the same time: %s" % str(e)) + logging.debug("Trying the operations seperately ...") + + # Try hotplug then modify persistent config # Hotplug device attach_err = False try: Index: virt-manager-0.9.5/src/virtManager/details.py =================================================================== --- virt-manager-0.9.5.orig/src/virtManager/details.py +++ virt-manager-0.9.5/src/virtManager/details.py @@ -2466,6 +2466,17 @@ class vmmDetails(vmmGObjectUI): text1=(_("Are you sure you want to remove this device?"))): return + # If vm is running, try to hot remove the device and modify + # persistent config in one go + if self.vm.is_active(): + try: + self.vm.detach_device_flags(dev_type, dev_id_info, 3) + return + except Exception, e: + logging.debug("Could not hot remove device and modify " + "persistent config at the same time: %s" % str(e)) + logging.debug("Trying the operations seperately ...") + # Define the change try: self.vm.remove_device(dev_id_info) Index: virt-manager-0.9.5/src/virtManager/domain.py =================================================================== --- virt-manager-0.9.5.orig/src/virtManager/domain.py +++ virt-manager-0.9.5/src/virtManager/domain.py @@ -797,6 +797,10 @@ class vmmDomain(vmmLibvirtObject): devxml = devobj.get_xml_config() self._backend.attachDevice(devxml) + def attach_device_flags(self, devobj, flags): + xml = devobj.get_xml_config() + self._backend.attachDeviceFlags(xml, flags) + def detach_device(self, devobj): """ Hotunplug device from running guest @@ -815,6 +819,10 @@ class vmmDomain(vmmLibvirtObject): xml = devobj.get_xml_config() self._backend.updateDeviceFlags(xml, flags) + def detach_device_flags(self, devtype, dev_id_info, flags): + xml = self._get_device_xml(devtype, dev_id_info) + self._backend.detachDeviceFlags(xml, flags) + def hotplug_vcpus(self, vcpus): vcpus = int(vcpus) if vcpus != self.vcpu_count():