]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: process: Handle all failure values for dimms in qemuProcessHandleAcpiOstInfo
authorPeter Krempa <pkrempa@redhat.com>
Tue, 22 Jan 2019 11:14:39 +0000 (12:14 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 23 Jan 2019 09:30:09 +0000 (10:30 +0100)
Hanlde all the possible failure codes as per ACPI standard documented in
the function header.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1660410

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_process.c

index 08e3156c3794b1a006e5be64c301fc6b9a66afa8..8120201eb65fe1db43a1e9ed577e69f5ece347b5 100644 (file)
@@ -1403,14 +1403,20 @@ qemuProcessHandleAcpiOstInfo(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
               "slotType='%s' slot='%s' source=%u status=%u",
               NULLSTR(alias), vm, vm->def->name, slotType, slot, source, status);
 
-    /* handle memory unplug failure */
-    if (STREQ(slotType, "DIMM") && alias && status == 1) {
-        qemuDomainSignalDeviceRemoval(vm, alias,
-                                      QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS_GUEST_REJECTED);
+    if (!alias)
+        goto cleanup;
+
+    if (STREQ(slotType, "DIMM")) {
+        if ((source == 0x003 || source == 0x103) &&
+            (status == 0x01 || (status >= 0x80 && status <= 0x83))) {
+            qemuDomainSignalDeviceRemoval(vm, alias,
+                                          QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS_GUEST_REJECTED);
 
-        event = virDomainEventDeviceRemovalFailedNewFromObj(vm, alias);
+            event = virDomainEventDeviceRemovalFailedNewFromObj(vm, alias);
+        }
     }
 
+ cleanup:
     virObjectUnlock(vm);
     virObjectEventStateQueue(driver->domainEventState, event);