]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: hotplug: Skip waiting for tray opening if qemu doesn't notify us
authorPeter Krempa <pkrempa@redhat.com>
Fri, 29 Apr 2016 11:49:13 +0000 (13:49 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 2 May 2016 06:49:34 +0000 (08:49 +0200)
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.

13 files changed:
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_hotplug.c
tests/qemucapabilitiesdata/caps_1.2.2-1.caps
tests/qemucapabilitiesdata/caps_1.3.1-1.caps
tests/qemucapabilitiesdata/caps_1.4.2-1.caps
tests/qemucapabilitiesdata/caps_1.5.3-1.caps
tests/qemucapabilitiesdata/caps_1.6.0-1.caps
tests/qemucapabilitiesdata/caps_1.6.50-1.caps
tests/qemucapabilitiesdata/caps_2.1.1-1.caps
tests/qemucapabilitiesdata/caps_2.4.0-1.caps
tests/qemucapabilitiesdata/caps_2.5.0-1.caps
tests/qemucapabilitiesdata/caps_2.6.0-1.caps

index de5478879d1b931e1caf815ab8b076fd9a28280c..677b06fb41c193c047ae59ac619acaf8adea8c25 100644 (file)
@@ -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[] = {
index 83b8be314a297de1c30c88fbe3c875cd13b203d2..705dfb11c4c6c2b2f0ce3f20aaabbdbead81c88f 100644 (file)
@@ -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;
index ad4e7ab76e249bb1cf2ac1c5e8ec4f142e4e508c..6e30dc1292be3adb3d864c296152ad923a4d1f1a 100644 (file)
@@ -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)
index 9ea36a660b4aa4e5e2a4c59988083c05bfdf5a0d..ca9d4f5ebbae9319706ce688a9ae3dfec4cad616 100644 (file)
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index 8c237eff3439a758a37d2a64f71d3a692a366898..de4ee0156a7771df64aae497bf5fcc58242c291f 100644 (file)
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index fe98a57c1e73ab9e71d0fa8f9ea55123c40d6e3f..1dcf2fa67c3367dcef3b134c64a45c5dcf45beb6 100644 (file)
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index 6e9ec3e8884f758c903422da73911e5c0e692967..67ea419d1f436a4d8c99225ee35f83fbc3a49d8c 100644 (file)
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index da371a4953ad10aa0ca924c9f0789c5a69a3ecfe..fb91111a61f4e0be8fa600f78e88770f54f2f981 100644 (file)
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index 1e2fb6ac00d3534076007ff6c479a98257dc2be6..60dbe52fa0f59460194e083425651b135e97522e 100644 (file)
     <flag name='virtio-net'/>
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index 8175743fd2b0f259c82c15c1c0df91390843f681..922167439092a7b0e26ae9be3d6396d0272060ce 100644 (file)
     <flag name='qxl.vram64_size_mb'/>
     <flag name='qxl-vga.vram64_size_mb'/>
     <flag name='debug-threads'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index 2cdf961eabfa445ab9c4b195e44fd9e513e81700..d52f7f3a5a6d82156e50ba9c49a0942c27ea92cf 100644 (file)
     <flag name='qxl-vga.vram64_size_mb'/>
     <flag name='debug-threads'/>
     <flag name='pxb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index ecaa165f7fa3ffff0367cdf113b6458292e35822..e9750e42a1b07821c3b3d7a794661eb033d77b7f 100644 (file)
     <flag name='qxl-vga.vram64_size_mb'/>
     <flag name='debug-threads'/>
     <flag name='pxb'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>
index e243f8a92f0bcb9269725a9ff5c3b589e332a0b9..208f06364b696d5d48f76bfc5d4449c65371640e 100644 (file)
     <flag name='secret'/>
     <flag name='pxb'/>
     <flag name='pxb-pcie'/>
+    <flag name='device-tray-moved-event'/>
   </qemuCaps>