]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_monitor: search memballoon QOM device path using alias
authorPavel Hrdina <phrdina@redhat.com>
Mon, 25 Jul 2016 15:07:38 +0000 (17:07 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Mon, 25 Jul 2016 15:07:38 +0000 (17:07 +0200)
Commit 4a585a88 introduced searching QOM device path by alias, let's use it for
memballoon too.  This may speedup the search because in most cases we will find
the correct QOM device path directly by using alias without the need for the
recursion code.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
src/qemu/qemu_driver.c
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_process.c

index d5ba3b803900b405d102769beef5941f8ac1641a..0501003e2ebd793201b6304afdf5fad7058c14a1 100644 (file)
@@ -2455,7 +2455,7 @@ static int qemuDomainSetMemoryStatsPeriod(virDomainPtr dom, int period,
         }
 
         qemuDomainObjEnterMonitor(driver, vm);
-        r = qemuMonitorSetMemoryStatsPeriod(priv->mon, period);
+        r = qemuMonitorSetMemoryStatsPeriod(priv->mon, def->memballoon, period);
         if (qemuDomainObjExitMonitor(driver, vm) < 0)
             goto endjob;
         if (r < 0) {
@@ -11003,7 +11003,8 @@ qemuDomainMemoryStats(virDomainPtr dom,
     if (vm->def->memballoon &&
         vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO) {
         qemuDomainObjEnterMonitor(driver, vm);
-        ret = qemuMonitorGetMemoryStats(qemuDomainGetMonitor(vm), stats, nr_stats);
+        ret = qemuMonitorGetMemoryStats(qemuDomainGetMonitor(vm),
+                                        vm->def->memballoon, stats, nr_stats);
         if (qemuDomainObjExitMonitor(driver, vm) < 0)
             ret = -1;
 
index 1fac4de5bec840e7349f6769bd54b2949e77fe67..58c04d53184c0dce853fce777d800fa83994be2e 100644 (file)
@@ -1068,11 +1068,12 @@ qemuMonitorSetOptions(qemuMonitorPtr mon, virJSONValuePtr options)
  * This feature was added to QEMU 1.5.
  */
 static void
-qemuMonitorInitBalloonObjectPath(qemuMonitorPtr mon)
+qemuMonitorInitBalloonObjectPath(qemuMonitorPtr mon,
+                                 virDomainMemballoonDefPtr balloon)
 {
     ssize_t i, nprops = 0;
-    int flp_ret = 0;
     char *path = NULL;
+    const char *name;
     qemuMonitorJSONListPathPtr *bprops = NULL;
 
     if (mon->balloonpath) {
@@ -1084,16 +1085,20 @@ qemuMonitorInitBalloonObjectPath(qemuMonitorPtr mon)
     }
     mon->ballooninit = true;
 
-    flp_ret = qemuMonitorJSONFindLinkPath(mon, "virtio-balloon-pci", NULL, &path);
-    if (flp_ret == -2) {
-        /* pci object was not found retry search for ccw object */
-        if (qemuMonitorJSONFindLinkPath(mon, "virtio-balloon-ccw",
-                                        NULL, &path) < 0)
-            return;
-    } else if (flp_ret < 0) {
+    switch (balloon->info.type) {
+    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
+        name = "virtio-balloon-pci";
+        break;
+    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
+        name = "virtio-balloon-ccw";
+        break;
+    default:
         return;
     }
 
+    if (qemuMonitorJSONFindLinkPath(mon, name, balloon->info.alias, &path) < 0)
+        return;
+
     nprops = qemuMonitorJSONGetObjectListPaths(mon, path, &bprops);
     if (nprops < 0)
         goto cleanup;
@@ -1718,6 +1723,7 @@ qemuMonitorGetBalloonInfo(qemuMonitorPtr mon,
 
 int
 qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
+                          virDomainMemballoonDefPtr balloon,
                           virDomainMemoryStatPtr stats,
                           unsigned int nr_stats)
 {
@@ -1726,7 +1732,7 @@ qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
     QEMU_CHECK_MONITOR(mon);
 
     if (mon->json) {
-        qemuMonitorInitBalloonObjectPath(mon);
+        qemuMonitorInitBalloonObjectPath(mon, balloon);
         return qemuMonitorJSONGetMemoryStats(mon, mon->balloonpath,
                                              stats, nr_stats);
     } else {
@@ -1744,6 +1750,7 @@ qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
  */
 int
 qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
+                                virDomainMemballoonDefPtr balloon,
                                 int period)
 {
     int ret = -1;
@@ -1758,7 +1765,7 @@ qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
     if (period < 0)
         return -1;
 
-    qemuMonitorInitBalloonObjectPath(mon);
+    qemuMonitorInitBalloonObjectPath(mon, balloon);
     if (mon->balloonpath) {
         ret = qemuMonitorJSONSetMemoryStatsPeriod(mon, mon->balloonpath,
                                                   period);
index cb4cca8b2fe2f4292019df60f46f9c141e927431..ae0954daeb6776aed6e9fd8854500f0308b3d74a 100644 (file)
@@ -397,9 +397,11 @@ int qemuMonitorGetVirtType(qemuMonitorPtr mon,
 int qemuMonitorGetBalloonInfo(qemuMonitorPtr mon,
                               unsigned long long *currmem);
 int qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
+                              virDomainMemballoonDefPtr balloon,
                               virDomainMemoryStatPtr stats,
                               unsigned int nr_stats);
 int qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
+                                    virDomainMemballoonDefPtr balloon,
                                     int period);
 
 int qemuMonitorBlockIOStatusToError(const char *status);
index 4adb14e6cd5f3df0960504ce50943c80a977ab77..c7639c1bb8dad86fcd533d6c234bb2e56212b5a6 100644 (file)
@@ -4268,19 +4268,17 @@ qemuProcessSetupBalloon(virQEMUDriverPtr driver,
 {
     unsigned long long balloon = vm->def->mem.cur_balloon;
     qemuDomainObjPrivatePtr priv = vm->privateData;
-    int period;
     int ret = -1;
 
     if (!virDomainDefHasMemballoon(vm->def))
         return 0;
 
-    period = vm->def->memballoon->period;
-
     if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
         goto cleanup;
 
-    if (period)
-        qemuMonitorSetMemoryStatsPeriod(priv->mon, period);
+    if (vm->def->memballoon->period)
+        qemuMonitorSetMemoryStatsPeriod(priv->mon, vm->def->memballoon,
+                                        vm->def->memballoon->period);
     if (qemuMonitorSetBalloon(priv->mon, balloon) < 0)
         goto cleanup;
 
@@ -6022,7 +6020,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
             vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO &&
             vm->def->memballoon->period) {
             qemuDomainObjEnterMonitor(driver, vm);
-            qemuMonitorSetMemoryStatsPeriod(priv->mon,
+            qemuMonitorSetMemoryStatsPeriod(priv->mon, vm->def->memballoon,
                                             vm->def->memballoon->period);
             if (qemuDomainObjExitMonitor(driver, vm) < 0)
                 goto error;