]> git.ipfire.org Git - thirdparty/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)
committerCole Robinson <crobinso@redhat.com>
Thu, 23 Jun 2016 19:53:59 +0000 (15:53 -0400)
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.

(cherry picked from commit 833ae6b4356934e7b779c4be01bd2bf051930dde)

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 57e2056ca9cb3521ce22b4de18abeb99fc1a6bd1..94a357f13f33b48f8d6075cf2b2de0b1e0b44bb6 100644 (file)
@@ -321,6 +321,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
               "qxl-vga.vram64_size_mb", /* 215 */
               "chardev-logfile",
               "debug-threads",
+              "device-tray-moved-event",
     );
 
 
@@ -1493,6 +1494,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 caf3d1be7be3bcc2530579611d12762e24812627..c942be554cc943d0106fb16f46ea548240500ad1 100644 (file)
@@ -351,6 +351,7 @@ typedef enum {
     QEMU_CAPS_QXL_VGA_VRAM64, /* -device qxl-vga.vram64_size_mb */
     QEMU_CAPS_CHARDEV_LOGFILE, /* -chardev logfile=xxxx */
     QEMU_CAPS_NAME_DEBUG_THREADS, /* Is -name debug-threads= available */
+    QEMU_CAPS_DEVICE_TRAY_MOVED, /* DEVICE_TRAY_MOVED event */
 
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
index a58dd57a66b04f7453badbfc3d62ab5f810dc4b6..40d568362e4b113f4012b995791d510f72169518 100644 (file)
@@ -202,6 +202,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 2e452ea1ef44fc4679d463ed5548f99def10023e..5fdc7919428a1938476548289c3e35e9327f5fdc 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 5ad56aa2d4e5ef7f3981484c8cdf9b7ef278fbe5..9402e68cca728f3813b4b83c54b19c4147d29365 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 d0341fdf0d7f56fb5d1a77916410e02857726a77..1944dc3b7d1d68bce76b4559f7c81d401b8c4135 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 93ea687e8925eda4f45bf6125407501b4ad0e4e0..d9d35cec70c4b88b05dc58f55d6f025bd6bc0ce0 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 c25b076a0639aa229b219b98ba6c3d5ca60c851c..1a52a6f061a61edd26d4d3fd956e59ebdc2cca65 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 30b70e9791aab6a7007fb043000f74743d1ededc..973bdf54cac41048ab735a826f8800f554cc2c8b 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 59d0323869ca2662ec19d3ef394197bfa2f8d5f4..254eb2a9a86942745cb86c9f94c032a5dffb5430 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 efbf9af6e4f23e941f5586b5c8214a4f7af6acb4..bb76ddb5450274686237f51031557387382d4c73 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 5fd3bcea68114a81fa972419785ee1da5046bb2d..0734fbd6d63fec0ec4b223b903cb2046919a2f00 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 549759c0b113fbee48a9980fae16c507e3b5533a..7c9eb133030d6af45cc7749bfafeb926e4dfabad 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>