[PATCH 0/2] DEVICE_UNPLUG_GUEST_ERROR support

Daniel Henrique Barboza danielhb413 at gmail.com
Mon Nov 1 00:27:35 UTC 2021


Hi,

This small series adds support to a new QMP event called
DEVICE_UNPLUG_GUEST_SUPPORT introduced recently in upstream QEMU.
This event is emitted when a device removal error is detected in the guest
side. Libvirt can use this event to to abort the removal operation
immediately instead of waiting for the operation to timeout.

Upstream QEMU is emitting this event in the following cases:

- memory removal errors in ACPI and pseries guests
- CPU removal errors in pseries guests

Adding support to DEVICE_UNPLUG_GUEST_ERROR will allow Libvirt to
detect all device removal errors that QEMU might add in the future.

The patches were tested using a common scenario where CPU removal will
fail everytime in a pseries guest:

- start a pseries guest with 1 CPU
- add one CPU
- offline vcpu0 in the guest kernel
- try to remove the recently added CPU (vcpu1). The kernel will refuse the
unplug because vcpu1 is the last online CPU

This test case will cause 'setvcpus' to hang until the timeout is fired:

[danielhb at ltc-boston118 build]$ sudo ./run tools/virsh setvcpus f34 1
error: Timed out during operation: vcpu unplug request timed out. Unplug result must be manually inspected in the domain

With this series applied, 'setvcpus' will report the error as soon as
the DEVICE_UNPLUG_GUEST_ERROR event is received:

[danielhb at ltc-boston118 build]$ sudo ./run tools/virsh setvcpus f34 1
error: operation failed: unplug of device was rejected by the guest                                  


I haven't add any documentation because I didn't find a good place to
document this change, and I'm not sure if this is necessary either since
this doesn't change user ABI. If this requires a doc change please let
me know.



Daniel Henrique Barboza (2):
  tests: update QEMU and domain ppc64 capabilities for qemu 6.2
  qemu: add DEVICE_UNPLUG_GUEST_ERROR event support

 src/qemu/qemu_monitor.c                       |    12 +
 src/qemu/qemu_monitor.h                       |     9 +
 src/qemu/qemu_monitor_json.c                  |    19 +
 src/qemu/qemu_process.c                       |    37 +
 tests/domaincapsdata/qemu_6.2.0.ppc64.xml     |   138 +
 .../caps_6.2.0.ppc64.replies                  | 31062 ++++++++++++++++
 .../qemucapabilitiesdata/caps_6.2.0.ppc64.xml |  1167 +
 ...default-video-type-ppc64.ppc64-latest.args |    13 +-
 ...ault-cpu-kvm-pseries-2.7.ppc64-latest.args |    13 +-
 ...ault-cpu-kvm-pseries-3.1.ppc64-latest.args |    13 +-
 ...ault-cpu-kvm-pseries-4.2.ppc64-latest.args |    13 +-
 ...ault-cpu-tcg-pseries-2.7.ppc64-latest.args |    13 +-
 ...ault-cpu-tcg-pseries-3.1.ppc64-latest.args |    13 +-
 ...ault-cpu-tcg-pseries-4.2.ppc64-latest.args |    13 +-
 .../ppc64-pseries-graphics.ppc64-latest.args  |    29 +-
 .../ppc64-pseries-headless.ppc64-latest.args  |    23 +-
 .../ppc64-tpmproxy-single.ppc64-latest.args   |    11 +-
 .../ppc64-tpmproxy-with-tpm.ppc64-latest.args |    13 +-
 .../tpm-emulator-spapr.ppc64-latest.args      |    19 +-
 19 files changed, 32531 insertions(+), 99 deletions(-)
 create mode 100644 tests/domaincapsdata/qemu_6.2.0.ppc64.xml
 create mode 100644 tests/qemucapabilitiesdata/caps_6.2.0.ppc64.replies
 create mode 100644 tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml

-- 
2.31.1




More information about the libvir-list mailing list