0a7476
From 893e9283b1ff2334309ab96e6bdf1ac2d325ad22 Mon Sep 17 00:00:00 2001
0a7476
Message-Id: <893e9283b1ff2334309ab96e6bdf1ac2d325ad22@dist-git>
0a7476
From: Martin Kletzander <mkletzan@redhat.com>
0a7476
Date: Mon, 15 Apr 2019 17:33:03 +0200
0a7476
Subject: [PATCH] resctrl: Set MBA defaults properly
0a7476
MIME-Version: 1.0
0a7476
Content-Type: text/plain; charset=UTF-8
0a7476
Content-Transfer-Encoding: 8bit
0a7476
0a7476
Similarly to CAT, when you set some values in an group, remove the group and
0a7476
recreate it, the previous values will be kept there.  In order to not get values
0a7476
from a previous setting (a previous VM, for example), we need to set them to
0a7476
sensible defaults.  The same way we do that for CAT, just set the same values as
0a7476
the default group has.
0a7476
0a7476
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
0a7476
(cherry picked from commit ceb6725d945490a7153cf8b10ad3cd972d3f1c16)
0a7476
0a7476
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1468650
0a7476
0a7476
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
0a7476
Message-Id: <25defb79bad13f027d7125e70f2cc6b09f817474.1555342313.git.phrdina@redhat.com>
0a7476
Reviewed-by: Ján Tomko <jtomko@redhat.com>
0a7476
---
0a7476
 src/util/virresctrl.c | 39 +++++++++++++++++++++++++++++++++++++++
0a7476
 1 file changed, 39 insertions(+)
0a7476
0a7476
diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c
0a7476
index f5e4bef7dc..92953dadf9 100644
0a7476
--- a/src/util/virresctrl.c
0a7476
+++ b/src/util/virresctrl.c
0a7476
@@ -1829,6 +1829,42 @@ virResctrlAllocMemoryBandwidth(virResctrlInfoPtr resctrl,
0a7476
 }
0a7476
 
0a7476
 
0a7476
+static int
0a7476
+virResctrlAllocCopyMemBW(virResctrlAllocPtr dst,
0a7476
+                         virResctrlAllocPtr src)
0a7476
+{
0a7476
+    size_t i = 0;
0a7476
+    virResctrlAllocMemBWPtr dst_bw = NULL;
0a7476
+    virResctrlAllocMemBWPtr src_bw = src->mem_bw;
0a7476
+
0a7476
+    if (!src->mem_bw)
0a7476
+        return 0;
0a7476
+
0a7476
+    if (!dst->mem_bw &&
0a7476
+        VIR_ALLOC(dst->mem_bw) < 0)
0a7476
+        return -1;
0a7476
+
0a7476
+    dst_bw = dst->mem_bw;
0a7476
+
0a7476
+    if (src_bw->nbandwidths > dst_bw->nbandwidths &&
0a7476
+        VIR_EXPAND_N(dst_bw->bandwidths, dst_bw->nbandwidths,
0a7476
+                     src_bw->nbandwidths - dst_bw->nbandwidths) < 0)
0a7476
+        return -1;
0a7476
+
0a7476
+    for (i = 0; i < src_bw->nbandwidths; i++) {
0a7476
+        if (dst_bw->bandwidths[i]) {
0a7476
+            *dst_bw->bandwidths[i] = 123;
0a7476
+            continue;
0a7476
+        }
0a7476
+        if (VIR_ALLOC(dst_bw->bandwidths[i]) < 0)
0a7476
+            return -1;
0a7476
+        *dst_bw->bandwidths[i] = *src_bw->bandwidths[i];
0a7476
+    }
0a7476
+
0a7476
+    return 0;
0a7476
+}
0a7476
+
0a7476
+
0a7476
 static int
0a7476
 virResctrlAllocCopyMasks(virResctrlAllocPtr dst,
0a7476
                          virResctrlAllocPtr src)
0a7476
@@ -1896,6 +1932,9 @@ virResctrlAllocAssign(virResctrlInfoPtr resctrl,
0a7476
     if (virResctrlAllocCopyMasks(alloc, alloc_default) < 0)
0a7476
         goto cleanup;
0a7476
 
0a7476
+    if (virResctrlAllocCopyMemBW(alloc, alloc_default) < 0)
0a7476
+        goto cleanup;
0a7476
+
0a7476
     for (level = 0; level < alloc->nlevels; level++) {
0a7476
         virResctrlAllocPerLevelPtr a_level = alloc->levels[level];
0a7476
         virResctrlAllocPerLevelPtr f_level = NULL;
0a7476
-- 
0a7476
2.21.0
0a7476