|
|
c1c534 |
From 6532e10f6ddec18ab70f58dc660062d369b82304 Mon Sep 17 00:00:00 2001
|
|
|
c1c534 |
Message-Id: <6532e10f6ddec18ab70f58dc660062d369b82304@dist-git>
|
|
|
c1c534 |
From: Martin Kletzander <mkletzan@redhat.com>
|
|
|
c1c534 |
Date: Wed, 31 Jan 2018 16:32:17 +0100
|
|
|
c1c534 |
Subject: [PATCH] conf: Sort cache banks in capabilities XML
|
|
|
c1c534 |
|
|
|
c1c534 |
https://bugzilla.redhat.com/show_bug.cgi?id=1289368
|
|
|
c1c534 |
|
|
|
c1c534 |
Because the cache banks are initialized based on the order in which their
|
|
|
c1c534 |
respective directories exist on the filesystem, they can appear in different
|
|
|
c1c534 |
order. This is here mainly for tests because the cache directory might have
|
|
|
c1c534 |
different order of children nodes and tests would fail otherwise. It should not
|
|
|
c1c534 |
be the case with sysfs, but one can never be sure. And this does not take
|
|
|
c1c534 |
almost any extra time, mainly because it gets initialized once per driver.
|
|
|
c1c534 |
|
|
|
c1c534 |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
c1c534 |
Reviewed-by: John Ferlan <jferlan@redhat.com>
|
|
|
c1c534 |
(cherry picked from commit b4698edcb0a459332b24410f59698005af37eecb)
|
|
|
c1c534 |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
c1c534 |
---
|
|
|
c1c534 |
src/conf/capabilities.c | 23 +++++++++++++++++++++++
|
|
|
c1c534 |
1 file changed, 23 insertions(+)
|
|
|
c1c534 |
|
|
|
c1c534 |
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
|
|
|
c1c534 |
index 9920a675ac..1f7d8cdb31 100644
|
|
|
c1c534 |
--- a/src/conf/capabilities.c
|
|
|
c1c534 |
+++ b/src/conf/capabilities.c
|
|
|
c1c534 |
@@ -1561,6 +1561,23 @@ virCapsHostCacheBankFree(virCapsHostCacheBankPtr ptr)
|
|
|
c1c534 |
VIR_FREE(ptr);
|
|
|
c1c534 |
}
|
|
|
c1c534 |
|
|
|
c1c534 |
+
|
|
|
c1c534 |
+static int
|
|
|
c1c534 |
+virCapsHostCacheBankSorter(const void *a,
|
|
|
c1c534 |
+ const void *b)
|
|
|
c1c534 |
+{
|
|
|
c1c534 |
+ virCapsHostCacheBankPtr ca = *(virCapsHostCacheBankPtr *)a;
|
|
|
c1c534 |
+ virCapsHostCacheBankPtr cb = *(virCapsHostCacheBankPtr *)b;
|
|
|
c1c534 |
+
|
|
|
c1c534 |
+ if (ca->level < cb->level)
|
|
|
c1c534 |
+ return -1;
|
|
|
c1c534 |
+ if (ca->level > cb->level)
|
|
|
c1c534 |
+ return 1;
|
|
|
c1c534 |
+
|
|
|
c1c534 |
+ return ca->id - cb->id;
|
|
|
c1c534 |
+}
|
|
|
c1c534 |
+
|
|
|
c1c534 |
+
|
|
|
c1c534 |
int
|
|
|
c1c534 |
virCapabilitiesInitCaches(virCapsPtr caps)
|
|
|
c1c534 |
{
|
|
|
c1c534 |
@@ -1700,6 +1717,12 @@ virCapabilitiesInitCaches(virCapsPtr caps)
|
|
|
c1c534 |
goto cleanup;
|
|
|
c1c534 |
}
|
|
|
c1c534 |
|
|
|
c1c534 |
+ /* Sort the array in order for the tests to be predictable. This way we can
|
|
|
c1c534 |
+ * still traverse the directory instead of guessing names (in case there is
|
|
|
c1c534 |
+ * 'index1' and 'index3' but no 'index2'). */
|
|
|
c1c534 |
+ qsort(caps->host.caches, caps->host.ncaches,
|
|
|
c1c534 |
+ sizeof(*caps->host.caches), virCapsHostCacheBankSorter);
|
|
|
c1c534 |
+
|
|
|
c1c534 |
ret = 0;
|
|
|
c1c534 |
cleanup:
|
|
|
c1c534 |
VIR_FREE(type);
|
|
|
c1c534 |
--
|
|
|
c1c534 |
2.16.1
|
|
|
c1c534 |
|