43fe83
From 9fea9b854c82af06f17830c5e1fb585fdf78fff8 Mon Sep 17 00:00:00 2001
43fe83
Message-Id: <9fea9b854c82af06f17830c5e1fb585fdf78fff8.1381871411.git.jdenemar@redhat.com>
43fe83
From: Michal Privoznik <mprivozn@redhat.com>
43fe83
Date: Wed, 2 Oct 2013 11:04:08 +0200
43fe83
Subject: [PATCH] qemu_hotplug: Allow QoS update in qemuDomainChangeNet
43fe83
43fe83
https://bugzilla.redhat.com/show_bug.cgi?id=1014503
43fe83
43fe83
The qemuDomainChangeNet() is called when 'virsh update-device' is
43fe83
invoked on a NIC. Currently, we fail to update the QoS even though
43fe83
we have routines for that.
43fe83
43fe83
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
43fe83
(cherry picked from commit 9fa10d3901a14997f724fe50ad8a33d7f0d23abe)
43fe83
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
43fe83
---
43fe83
 src/qemu/qemu_hotplug.c | 19 +++++++++++++++++--
43fe83
 1 file changed, 17 insertions(+), 2 deletions(-)
43fe83
43fe83
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
43fe83
index 83e193b..7e884c0 100644
43fe83
--- a/src/qemu/qemu_hotplug.c
43fe83
+++ b/src/qemu/qemu_hotplug.c
43fe83
@@ -1677,6 +1677,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
43fe83
     bool needFilterChange = false;
43fe83
     bool needLinkStateChange = false;
43fe83
     bool needReplaceDevDef = false;
43fe83
+    bool needBandwidthSet = false;
43fe83
     int ret = -1;
43fe83
 
43fe83
     if (!devslot || !(olddev = *devslot)) {
43fe83
@@ -1940,8 +1941,6 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
43fe83
         virDomainNetGetActualDirectMode(olddev) != virDomainNetGetActualDirectMode(olddev) ||
43fe83
         !virNetDevVPortProfileEqual(virDomainNetGetActualVirtPortProfile(olddev),
43fe83
                                     virDomainNetGetActualVirtPortProfile(newdev)) ||
43fe83
-        !virNetDevBandwidthEqual(virDomainNetGetActualBandwidth(olddev),
43fe83
-                                 virDomainNetGetActualBandwidth(newdev)) ||
43fe83
         !virNetDevVlanEqual(virDomainNetGetActualVlan(olddev),
43fe83
                             virDomainNetGetActualVlan(newdev))) {
43fe83
         needReconnect = true;
43fe83
@@ -1950,6 +1949,10 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
43fe83
     if (olddev->linkstate != newdev->linkstate)
43fe83
         needLinkStateChange = true;
43fe83
 
43fe83
+    if (!virNetDevBandwidthEqual(virDomainNetGetActualBandwidth(olddev),
43fe83
+                                 virDomainNetGetActualBandwidth(newdev)))
43fe83
+        needBandwidthSet = true;
43fe83
+
43fe83
     /* FINALLY - actually perform the required actions */
43fe83
 
43fe83
     if (needReconnect) {
43fe83
@@ -1959,6 +1962,18 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
43fe83
         goto cleanup;
43fe83
     }
43fe83
 
43fe83
+    if (needBandwidthSet) {
43fe83
+        if (virNetDevBandwidthSet(newdev->ifname,
43fe83
+                                  virDomainNetGetActualBandwidth(newdev),
43fe83
+                                  false) < 0) {
43fe83
+            virReportError(VIR_ERR_INTERNAL_ERROR,
43fe83
+                           _("cannot set bandwidth limits on %s"),
43fe83
+                           newdev->ifname);
43fe83
+            goto cleanup;
43fe83
+        }
43fe83
+        needReplaceDevDef = true;
43fe83
+    }
43fe83
+
43fe83
     if (needBridgeChange) {
43fe83
         if (qemuDomainChangeNetBridge(dom->conn, vm, olddev, newdev) < 0)
43fe83
             goto cleanup;
43fe83
-- 
43fe83
1.8.3.2
43fe83