[libvirt] [PATCH 2/2] qemu: hotplug: Skip waiting for tray opening if qemu doesn't notify us

Peter Krempa pkrempa at redhat.com
Fri Apr 29 12:02:49 UTC 2016


If qemu doesn't support DEVICE_TRAY_MOVED event the code that attempts
to change media would attempt to re-eject the tray even if it wouldn't
be notified when the tray opened. Add a capability bit and skip retrying
for old qemus.
---
 src/qemu/qemu_capabilities.c                  | 2 ++
 src/qemu/qemu_capabilities.h                  | 1 +
 src/qemu/qemu_hotplug.c                       | 9 +++++++++
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemucapabilitiesdata/caps_2.1.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_2.4.0-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_2.5.0-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_2.6.0-1.caps  | 1 +
 13 files changed, 22 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index de54788..677b06f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -325,6 +325,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
               "pxb",

               "pxb-pcie", /* 220 */
+              "device-tray-moved-event",
     );


@@ -1498,6 +1499,7 @@ struct virQEMUCapsStringFlags virQEMUCapsEvents[] = {
     { "DEVICE_DELETED", QEMU_CAPS_DEVICE_DEL_EVENT },
     { "MIGRATION", QEMU_CAPS_MIGRATION_EVENT },
     { "VSERPORT_CHANGE", QEMU_CAPS_VSERPORT_CHANGE },
+    { "DEVICE_TRAY_MOVED", QEMU_CAPS_DEVICE_TRAY_MOVED },
 };

 struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 83b8be3..705dfb1 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -356,6 +356,7 @@ typedef enum {

     /* 220 */
     QEMU_CAPS_DEVICE_PXB_PCIE, /* -device pxb-pcie */
+    QEMU_CAPS_DEVICE_TRAY_MOVED, /* DEVICE_TRAY_MOVED event */

     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index ad4e7ab..6e30dc1 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -203,6 +203,15 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
         if (qemuDomainObjExitMonitor(driver, vm) < 0)
             goto cleanup;

+        /* skip all retrying if qemu doesn't notify us on tray change */
+        if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_TRAY_MOVED)) {
+            if (rc == 0)
+                break;
+
+            if (rc < 0)
+                goto error;
+        }
+
         if (rc < 0) {
             /* we've already tried, error out */
             if (ejectRetry)
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index 9ea36a6..ca9d4f5 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -113,4 +113,5 @@
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index 8c237ef..de4ee01 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -128,4 +128,5 @@
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index fe98a57..1dcf2fa 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -129,4 +129,5 @@
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index 6e9ec3e..67ea419 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -138,4 +138,5 @@
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index da371a4..fb91111 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -144,4 +144,5 @@
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index 1e2fb6a..60dbe52 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -144,4 +144,5 @@
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_2.1.1-1.caps b/tests/qemucapabilitiesdata/caps_2.1.1-1.caps
index 8175743..9221674 100644
--- a/tests/qemucapabilitiesdata/caps_2.1.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_2.1.1-1.caps
@@ -162,4 +162,5 @@
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
     <flag name='debug-threads'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_2.4.0-1.caps b/tests/qemucapabilitiesdata/caps_2.4.0-1.caps
index 2cdf961..d52f7f3 100644
--- a/tests/qemucapabilitiesdata/caps_2.4.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_2.4.0-1.caps
@@ -174,4 +174,5 @@
     <flag name='qxl-vga.vram64_size_mb'/>
     <flag name='debug-threads'/>
     <flag name='pxb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_2.5.0-1.caps b/tests/qemucapabilitiesdata/caps_2.5.0-1.caps
index ecaa165..e9750e4 100644
--- a/tests/qemucapabilitiesdata/caps_2.5.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_2.5.0-1.caps
@@ -175,4 +175,5 @@
     <flag name='qxl-vga.vram64_size_mb'/>
     <flag name='debug-threads'/>
     <flag name='pxb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-1.caps b/tests/qemucapabilitiesdata/caps_2.6.0-1.caps
index e243f8a..208f063 100644
--- a/tests/qemucapabilitiesdata/caps_2.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_2.6.0-1.caps
@@ -180,4 +180,5 @@
     <flag name='secret'/>
     <flag name='pxb'/>
     <flag name='pxb-pcie'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
-- 
2.8.1




More information about the libvir-list mailing list