[libvirt] [PATCH] Reset the whole stack in testutils
by Martin Kletzander
The memset() was resetting only 30 bytes in the array (size of the
array), but it is array of pointers. Since it is a static array,
let's just reset it by its size.
Found by gcc-7.1:
testutils.c: In function 'virTestRun':
testutils.c:243:13: error: 'memset' used with length equal to number
of elements without multiplication by element size [-Werror=memset-elt-size]
memset(testAllocStack, 0, ARRAY_CARDINALITY(testAllocStack));
^~~~~~
Signed-off-by: Martin Kletzander <mkletzan(a)redhat.com>
---
Pushed as trivial an also under the build-breaker rule.
I'm still getting one more error in config.h that probably needs
fixing in autoconf:
../config.h:2994:48: warning: this use of "defined" may not be portable [-Wexpansion-to-defined]
|| (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
Let me know if you know how I could help with that.
tests/testutils.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/testutils.c b/tests/testutils.c
index 4fb2338bb1de..4b8cf79ef939 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -240,7 +240,7 @@ virTestRun(const char *title,
for (i = start; i < end; i++) {
bool missingFail = false;
# ifdef TEST_OOM_TRACE
- memset(testAllocStack, 0, ARRAY_CARDINALITY(testAllocStack));
+ memset(testAllocStack, 0, sizeof(testAllocStack));
ntestAllocStack = 0;
# endif
virAllocTestOOM(i + 1, 1);
--
2.13.0
7 years, 4 months
[libvirt] libvirt-tck failures after sparse stream support
by Jim Fehlig
Hi Michal,
I noticed some of the libvirt-tck tests fail with 3.4.0 RC2. I bisected the
failure to commit 07c2399c01. The failing tests are 400-vol-download.t,
405-vol-download-all.t, and 410-vol-download-nonblock.t. Looking at the tests,
they all create a pool and vol, write some data to the vol, create an MD5 digest
of a subset of vol data, download the subset of the vol, and finally compare MD5
digest of dowloaded vol vs original. If the digests are different the test
fails. For reference, here is the first test
http://libvirt.org/git/?p=libvirt-tck.git;a=blob;f=scripts/storage/400-vo...
All three tests randomly fail with commit 07c2399c01. When the tests fail, it is
always the case that 'length' was > 0. I.e. I have not seen the tests fail with
offset=0, length=0 or offset=1024*1024, length=0.
Regards,
Jim
7 years, 4 months
[libvirt] [PATCH] bhyveargv2xmltest: Fix call of virDomainDefCheckABIStability
by Michal Privoznik
In 4f0aeed I've expanded the list of arguments for
virDomainDefCheckABIStability() but I forgot to fix
bhyveargv2xmltest.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
Pushed under trivial and build-breaker rules.
tests/bhyveargv2xmltest.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/bhyveargv2xmltest.c b/tests/bhyveargv2xmltest.c
index bde7d0e05..9db3750ac 100644
--- a/tests/bhyveargv2xmltest.c
+++ b/tests/bhyveargv2xmltest.c
@@ -74,7 +74,7 @@ testCompareXMLToArgvFiles(const char *xmlfile,
}
}
- if (vmdef && !virDomainDefCheckABIStability(vmdef, vmdef)) {
+ if (vmdef && !virDomainDefCheckABIStability(vmdef, vmdef, driver.xmlopt)) {
VIR_TEST_DEBUG("ABI stability check failed on %s", xmlfile);
goto fail;
}
--
2.13.0
7 years, 4 months
[libvirt] [PATCH 0/3] Behave better for users of virStream
by Martin Kletzander
So I was playing with one program and I was getting weird behaviour.
It was also mentioned on the list by someone for some other client
they were writing. I found out what we were both missing was callback
removal before/after finish/abort was called. The problem is that was
not intuitive at all. In the docs we only have an example for
blocking streams, there is no mention of the callbacks and the
behaviour that libvirt has. I first wanted to fix the documentation,
but then I realized it should never make sense to have a callback
after stream has ended, so why not behave nicely for callers. Since
they should be removing the callback right before the finish, there
shouldn't even be any error message after they upgrade. To be even
nicer we could make RemoveCallback() not fail when there is no
callback registered (like DomainSuspend() when the domain is already
suspended).
Martin Kletzander (3):
Make virNetClientStreamEventRemoveCallback's errors optional
remote: Consolidate remoteStream{Abort,Finish} functions
virStream: Remove callbacks on Abort/Finish
src/remote/remote_driver.c | 42 +++++++++++-------------------------------
src/rpc/virnetclientstream.c | 10 +++++++---
src/rpc/virnetclientstream.h | 3 ++-
src/util/virfdstream.c | 12 ++++++++++++
4 files changed, 32 insertions(+), 35 deletions(-)
--
2.13.0
7 years, 4 months
[libvirt] [V4 RESEND PATCH] Expose resource control capabilites on cache bank
by taget
From: Eli Qiao <liyong.qiao(a)intel.com>
* This patch amends the cache bank capability as follow:
<cache>
<bank id='0' level='3' type='unified' size='15360' unit='KiB' cpus='0-5'>
<control min='768' unit='KiB' scope='both' max_allocation='4'/>
</bank>
<bank id='1' level='3' type='unified' size='15360' unit='KiB' cpus='6-11'>
<control min='768' unit='KiB' scope='both' max_allocation='4'/>
</bank>
</cache>
For CDP enabled on x86 arch, we will have:
<cache>
<bank id='0' level='3' type='unified' size='15360' unit='KiB' cpus='0-5'>
<control min='768' unit='KiB' scope='code' max_allocation='4'/>
<control min='768' unit='KiB' scope='data' max_allocation='4'/>
</bank>
...
* Added a new testdata directory `linux-resctrl-cdp` to test CDP enabled
case.
* Along with vircaps2xmltest case updated.
P.S. here the scope is from /sys/fs/resctrl/info/L3{"" "code" "data"}, I
keep it capital upper as I need to use a macro to convert from enum to
string easily.
Signed-off-by: Eli Qiao <liyong.qiao(a)intel.com>
---
docs/schemas/capability.rng | 20 ++++
src/conf/capabilities.c | 133 ++++++++++++++++++++-
src/conf/capabilities.h | 10 ++
.../vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus | 1 +
.../linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask | 1 +
.../resctrl/info/L3CODE/min_cbm_bits | 1 +
.../resctrl/info/L3CODE/num_closids | 1 +
.../linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask | 1 +
.../resctrl/info/L3DATA/min_cbm_bits | 1 +
.../resctrl/info/L3DATA/num_closids | 1 +
.../linux-resctrl-cdp/resctrl/manualres/cpus | 1 +
.../linux-resctrl-cdp/resctrl/manualres/schemata | 2 +
.../linux-resctrl-cdp/resctrl/manualres/tasks | 0
.../linux-resctrl-cdp/resctrl/schemata | 2 +
.../linux-resctrl-cdp/resctrl/tasks | 0
tests/vircaps2xmldata/linux-resctrl-cdp/system | 1 +
.../vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml | 55 +++++++++
tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml | 8 +-
tests/vircaps2xmltest.c | 8 ++
19 files changed, 244 insertions(+), 3 deletions(-)
create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus
create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask
create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/min_cbm_bits
create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/num_closids
create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask
create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/min_cbm_bits
create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/num_closids
create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/cpus
create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/schemata
create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/tasks
create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/schemata
create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/tasks
create mode 120000 tests/vircaps2xmldata/linux-resctrl-cdp/system
create mode 100644 tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
diff --git a/docs/schemas/capability.rng b/docs/schemas/capability.rng
index 26f0aa2..927fc18 100644
--- a/docs/schemas/capability.rng
+++ b/docs/schemas/capability.rng
@@ -277,6 +277,26 @@
<attribute name='cpus'>
<ref name='cpuset'/>
</attribute>
+ <zeroOrMore>
+ <element name='control'>
+ <attribute name='min'>
+ <ref name='unsignedInt'/>
+ </attribute>
+ <attribute name='unit'>
+ <ref name='unit'/>
+ </attribute>
+ <attribute name='scope'>
+ <choice>
+ <value>both</value>
+ <value>code</value>
+ <value>data</value>
+ </choice>
+ </attribute>
+ <attribute name='max_allocation'>
+ <ref name='unsignedInt'/>
+ </attribute>
+ </element>
+ </zeroOrMore>
</element>
</oneOrMore>
</element>
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
index d699b08..c4a1fdf 100644
--- a/src/conf/capabilities.c
+++ b/src/conf/capabilities.c
@@ -51,6 +51,7 @@
#define VIR_FROM_THIS VIR_FROM_CAPABILITIES
#define SYSFS_SYSTEM_PATH "/sys/devices/system"
+#define SYSFS_RESCTRL_PATH "/sys/fs/resctrl"
VIR_LOG_INIT("conf.capabilities")
@@ -872,6 +873,9 @@ virCapabilitiesFormatCaches(virBufferPtr buf,
virCapsHostCacheBankPtr *caches)
{
size_t i = 0;
+ size_t j = 0;
+ int indent = virBufferGetIndent(buf, false);
+ virBuffer controlBuf = VIR_BUFFER_INITIALIZER;
if (!ncaches)
return 0;
@@ -893,13 +897,35 @@ virCapabilitiesFormatCaches(virBufferPtr buf,
*/
virBufferAsprintf(buf,
"<bank id='%u' level='%u' type='%s' "
- "size='%llu' unit='%s' cpus='%s'/>\n",
+ "size='%llu' unit='%s' cpus='%s'",
bank->id, bank->level,
virCacheTypeToString(bank->type),
bank->size >> (kilos * 10),
kilos ? "KiB" : "B",
cpus_str);
+ virBufferAdjustIndent(&controlBuf, indent + 4);
+ for (j = 0; j < bank->ncontrols; j++) {
+ bool min_kilos = !(bank->controls[j]->min % 1024);
+ virBufferAsprintf(&controlBuf,
+ "<control min='%llu' unit='%s' "
+ "scope='%s' max_allocation='%u'/>\n",
+ bank->controls[j]->min >> (min_kilos * 10),
+ min_kilos ? "KiB" : "B",
+ virCacheTypeToString(bank->controls[j]->scope),
+ bank->controls[j]->max_allocation);
+ }
+
+ if (virBufferUse(&controlBuf)) {
+ virBufferAddLit(buf, ">\n");
+ virBufferAddBuffer(buf, &controlBuf);
+ virBufferAddLit(buf, "</bank>\n");
+
+ } else {
+ virBufferAddLit(buf, "/>\n");
+ }
+
+ virBufferFreeAndReset(&controlBuf);
VIR_FREE(cpus_str);
}
@@ -1519,13 +1545,102 @@ virCapsHostCacheBankEquals(virCapsHostCacheBankPtr a,
void
virCapsHostCacheBankFree(virCapsHostCacheBankPtr ptr)
{
+ size_t i;
+
if (!ptr)
return;
virBitmapFree(ptr->cpus);
+ for (i = 0; i < ptr->ncontrols; i++)
+ VIR_FREE(ptr->controls[i]);
+ VIR_FREE(ptr->controls);
VIR_FREE(ptr);
}
+/* test which TYPE of cache control supported
+ * -1: don't support
+ * 0: cat
+ * 1: cdp
+ */
+static int
+virCapabilitiesGetCacheControlType(virCapsHostCacheBankPtr bank)
+{
+ int ret = -1;
+ char *path = NULL;
+ if (virAsprintf(&path,
+ SYSFS_RESCTRL_PATH "/info/L%u",
+ bank->level) < 0)
+ return -1;
+
+ if (virFileExists(path)) {
+ ret = 0;
+ } else {
+ VIR_FREE(path);
+ /* for CDP enabled case, CODE and DATA will show together */
+ if (virAsprintf(&path,
+ SYSFS_RESCTRL_PATH "/info/L%uCODE",
+ bank->level) < 0)
+ return -1;
+ if (virFileExists(path))
+ ret = 1;
+ }
+
+ VIR_FREE(path);
+ return ret;
+}
+
+static int
+virCapabilitiesGetCacheControl(virCapsHostCacheBankPtr bank,
+ virCacheType scope)
+{
+ int ret = -1;
+ char *path = NULL;
+ char *cbm_mask = NULL;
+ char *type_upper = NULL;
+ virCapsHostCacheControlPtr control;
+
+ if (VIR_ALLOC(control) < 0)
+ goto cleanup;
+
+ if ((scope > VIR_CACHE_TYPE_BOTH)
+ && (virStringToUpper(&type_upper, virCacheTypeToString(scope)) < 0))
+ goto cleanup;
+
+ if (virFileReadValueUint(&control->max_allocation,
+ SYSFS_RESCTRL_PATH "/info/L%u%s/num_closids",
+ bank->level,
+ type_upper ? type_upper : "") < 0)
+ goto cleanup;
+
+ if (virFileReadValueString(&cbm_mask,
+ SYSFS_RESCTRL_PATH
+ "/info/L%u%s/cbm_mask",
+ bank->level,
+ type_upper ? type_upper: "") < 0)
+ goto cleanup;
+
+ virStringTrimOptionalNewline(cbm_mask);
+
+ /* cbm_mask: cache bit mask, it's in hex, eg: fffff */
+ control->min = bank->size / (strlen(cbm_mask) * 4);
+
+ control->scope = scope;
+
+ if (VIR_APPEND_ELEMENT(bank->controls,
+ bank->ncontrols,
+ control) < 0)
+ goto cleanup;
+
+ ret = 0;
+
+ cleanup:
+ VIR_FREE(path);
+ VIR_FREE(cbm_mask);
+ VIR_FREE(type_upper);
+ VIR_FREE(control);
+ return ret;
+}
+
int
virCapabilitiesInitCaches(virCapsPtr caps)
{
@@ -1534,6 +1649,7 @@ virCapabilitiesInitCaches(virCapsPtr caps)
ssize_t pos = -1;
DIR *dirp = NULL;
int ret = -1;
+ int typeret;
char *path = NULL;
char *type = NULL;
struct dirent *ent = NULL;
@@ -1607,12 +1723,27 @@ virCapabilitiesInitCaches(virCapsPtr caps)
SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0)
goto cleanup;
+ typeret = virCapabilitiesGetCacheControlType(bank);
+
+ if (typeret == 0) {
+ if (virCapabilitiesGetCacheControl(bank,
+ VIR_CACHE_TYPE_BOTH) < 0)
+ goto cleanup;
+ } else if (typeret == 1) {
+ if ((virCapabilitiesGetCacheControl(bank,
+ VIR_CACHE_TYPE_CODE) < 0) ||
+ (virCapabilitiesGetCacheControl(bank,
+ VIR_CACHE_TYPE_DATA) < 0))
+ goto cleanup;
+ }
+
kernel_type = virCacheKernelTypeFromString(type);
if (kernel_type < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown cache type '%s'"), type);
goto cleanup;
}
+
bank->type = kernel_type;
VIR_FREE(type);
diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
index a8cccf7..ee87d59 100644
--- a/src/conf/capabilities.h
+++ b/src/conf/capabilities.h
@@ -148,6 +148,14 @@ typedef enum {
VIR_ENUM_DECL(virCache);
+typedef struct _virCapsHostCacheControl virCapsHostCacheControl;
+typedef virCapsHostCacheControl *virCapsHostCacheControlPtr;
+struct _virCapsHostCacheControl {
+ unsigned long long min; /* minimum cache control size in B */
+ virCacheType scope; /* data, code or both */
+ unsigned int max_allocation; /* max number of supported allocations */
+};
+
typedef struct _virCapsHostCacheBank virCapsHostCacheBank;
typedef virCapsHostCacheBank *virCapsHostCacheBankPtr;
struct _virCapsHostCacheBank {
@@ -156,6 +164,8 @@ struct _virCapsHostCacheBank {
unsigned long long size; /* B */
virCacheType type; /* Data, Instruction or Unified */
virBitmapPtr cpus; /* All CPUs that share this bank */
+ size_t ncontrols;
+ virCapsHostCacheControlPtr *controls;
};
typedef struct _virCapsHost virCapsHost;
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus
new file mode 100644
index 0000000..b3a79aa
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus
@@ -0,0 +1 @@
+ffffff,ffffffff,ffffffff
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask
new file mode 100755
index 0000000..78031da
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask
@@ -0,0 +1 @@
+fffff
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/min_cbm_bits b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/min_cbm_bits
new file mode 100755
index 0000000..d00491f
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/min_cbm_bits
@@ -0,0 +1 @@
+1
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/num_closids b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/num_closids
new file mode 100755
index 0000000..45a4fb7
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/num_closids
@@ -0,0 +1 @@
+8
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask
new file mode 100755
index 0000000..78031da
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask
@@ -0,0 +1 @@
+fffff
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/min_cbm_bits b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/min_cbm_bits
new file mode 100755
index 0000000..d00491f
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/min_cbm_bits
@@ -0,0 +1 @@
+1
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/num_closids b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/num_closids
new file mode 100755
index 0000000..45a4fb7
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/num_closids
@@ -0,0 +1 @@
+8
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/cpus b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/cpus
new file mode 100644
index 0000000..ede4cc2
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/cpus
@@ -0,0 +1 @@
+000000,00000000,00000000
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/schemata b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/schemata
new file mode 100644
index 0000000..a0ef381
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/schemata
@@ -0,0 +1,2 @@
+L3DATA:0=c0000;1=c0000
+L3CODE:0=30000;1=30000
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/tasks b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/tasks
new file mode 100644
index 0000000..e69de29
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/schemata b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/schemata
new file mode 100644
index 0000000..89dc76b
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/schemata
@@ -0,0 +1,2 @@
+L3DATA:0=fffff;1=fffff
+L3CODE:0=fffff;1=fffff
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/tasks b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/tasks
new file mode 100644
index 0000000..e69de29
diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/system b/tests/vircaps2xmldata/linux-resctrl-cdp/system
new file mode 120000
index 0000000..2f3a1d9
--- /dev/null
+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/system
@@ -0,0 +1 @@
+../linux-resctrl/system/
\ No newline at end of file
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
new file mode 100644
index 0000000..c9f460d
--- /dev/null
+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
@@ -0,0 +1,55 @@
+<capabilities>
+
+ <host>
+ <cpu>
+ <arch>x86_64</arch>
+ </cpu>
+ <power_management/>
+ <migration_features>
+ <live/>
+ </migration_features>
+ <topology>
+ <cells num='2'>
+ <cell id='0'>
+ <memory unit='KiB'>1048576</memory>
+ <pages unit='KiB' size='4'>2048</pages>
+ <pages unit='KiB' size='2048'>4096</pages>
+ <pages unit='KiB' size='1048576'>6144</pages>
+ <cpus num='6'>
+ <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
+ <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
+ <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
+ <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
+ <cpu id='4' socket_id='0' core_id='4' siblings='4'/>
+ <cpu id='5' socket_id='0' core_id='5' siblings='5'/>
+ </cpus>
+ </cell>
+ <cell id='1'>
+ <memory unit='KiB'>2097152</memory>
+ <pages unit='KiB' size='4'>4096</pages>
+ <pages unit='KiB' size='2048'>6144</pages>
+ <pages unit='KiB' size='1048576'>8192</pages>
+ <cpus num='6'>
+ <cpu id='6' socket_id='1' core_id='0' siblings='6'/>
+ <cpu id='7' socket_id='1' core_id='1' siblings='7'/>
+ <cpu id='8' socket_id='1' core_id='2' siblings='8'/>
+ <cpu id='9' socket_id='1' core_id='3' siblings='9'/>
+ <cpu id='10' socket_id='1' core_id='4' siblings='10'/>
+ <cpu id='11' socket_id='1' core_id='5' siblings='11'/>
+ </cpus>
+ </cell>
+ </cells>
+ </topology>
+ <cache>
+ <bank id='0' level='3' type='both' size='15360' unit='KiB' cpus='0-5'>
+ <control min='768' unit='KiB' scope='code' max_allocation='8'/>
+ <control min='768' unit='KiB' scope='data' max_allocation='8'/>
+ </bank>
+ <bank id='1' level='3' type='both' size='15360' unit='KiB' cpus='6-11'>
+ <control min='768' unit='KiB' scope='code' max_allocation='8'/>
+ <control min='768' unit='KiB' scope='data' max_allocation='8'/>
+ </bank>
+ </cache>
+ </host>
+
+</capabilities>
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
index 6677791..04a5eb8 100644
--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
@@ -41,8 +41,12 @@
</cells>
</topology>
<cache>
- <bank id='0' level='3' type='both' size='15360' unit='KiB' cpus='0-5'/>
- <bank id='1' level='3' type='both' size='15360' unit='KiB' cpus='6-11'/>
+ <bank id='0' level='3' type='both' size='15360' unit='KiB' cpus='0-5'>
+ <control min='768' unit='KiB' scope='both' max_allocation='4'/>
+ </bank>
+ <bank id='1' level='3' type='both' size='15360' unit='KiB' cpus='6-11'>
+ <control min='768' unit='KiB' scope='both' max_allocation='4'/>
+ </bank>
</cache>
</host>
diff --git a/tests/vircaps2xmltest.c b/tests/vircaps2xmltest.c
index 137598e..ae1cd52 100644
--- a/tests/vircaps2xmltest.c
+++ b/tests/vircaps2xmltest.c
@@ -47,6 +47,7 @@ test_virCapabilities(const void *opaque)
char *capsXML = NULL;
char *path = NULL;
char *dir = NULL;
+ char *resctrl = NULL;
int ret = -1;
/*
@@ -58,7 +59,12 @@ test_virCapabilities(const void *opaque)
data->resctrl ? "/system" : "") < 0)
goto cleanup;
+ if (virAsprintf(&resctrl, "%s/vircaps2xmldata/linux-%s/resctrl",
+ abs_srcdir, data->filename) < 0)
+ goto cleanup;
+
virFileWrapperAddPrefix("/sys/devices/system", dir);
+ virFileWrapperAddPrefix("/sys/fs/resctrl", resctrl);
caps = virCapabilitiesNew(data->arch, data->offlineMigrate, data->liveMigrate);
if (!caps)
@@ -84,6 +90,7 @@ test_virCapabilities(const void *opaque)
cleanup:
VIR_FREE(dir);
+ VIR_FREE(resctrl);
VIR_FREE(path);
VIR_FREE(capsXML);
virObjectUnref(caps);
@@ -112,6 +119,7 @@ mymain(void)
DO_TEST("caches", VIR_ARCH_X86_64);
DO_TEST_FULL("resctrl", VIR_ARCH_X86_64, true, true, true);
+ DO_TEST_FULL("resctrl-cdp", VIR_ARCH_X86_64, true, true, true);
return ret;
}
--
1.9.1
7 years, 4 months
[libvirt] [PATCH v2] virsh: add [--domain DOMAIN] option to domxml-to-native DOMAIN COMMAND
by Daniel Liu
The option allows someone to run domain-to-native on already existing
domain without the need of supplying their XML. It is basically
wrapper around 'virsh dumpxml | virsh domxml-to-native /dev/stdin'.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=835476
---
tools/virsh-domain.c | 52 ++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 40 insertions(+), 12 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index ccb514ef9..929f9c896 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -9848,9 +9848,13 @@ static const vshCmdOptDef opts_domxmltonative[] = {
.flags = VSH_OFLAG_REQ,
.help = N_("target config data type format")
},
+ {.name = "domain",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ_OPT,
+ .help = N_("domain name, id or uuid")
+ },
{.name = "xml",
.type = VSH_OT_DATA,
- .flags = VSH_OFLAG_REQ,
.help = N_("xml data file to export from")
},
{.name = NULL}
@@ -9859,30 +9863,54 @@ static const vshCmdOptDef opts_domxmltonative[] = {
static bool
cmdDomXMLToNative(vshControl *ctl, const vshCmd *cmd)
{
- bool ret = true;
+ bool ret = false;
const char *format = NULL;
- const char *xmlFile = NULL;
- char *configData;
- char *xmlData;
+ const char *domain = NULL;
+ const char *xml = NULL;
+ char *xmlData = NULL;
+ char *configData = NULL;
unsigned int flags = 0;
virshControlPtr priv = ctl->privData;
+ virDomainPtr dom = NULL;
if (vshCommandOptStringReq(ctl, cmd, "format", &format) < 0 ||
- vshCommandOptStringReq(ctl, cmd, "xml", &xmlFile) < 0)
+ vshCommandOptStringReq(ctl, cmd, "xml", &xml) < 0 ||
+ vshCommandOptStringReq(ctl, cmd, "domain", &domain) < 0)
return false;
- if (virFileReadAll(xmlFile, VSH_MAX_XML_FILE, &xmlData) < 0)
+ VSH_EXCLUSIVE_OPTIONS_VAR(domain, xml);
+
+ if (domain) {
+ if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
+ return false;
+ }
+
+ if (dom) {
+ xmlData = virDomainGetXMLDesc(dom, flags);
+ } else if (xml) {
+ if (virFileReadAll(xml, VSH_MAX_XML_FILE, &xmlData) < 0)
+ goto cleanup;
+ }
+
+ if (!xmlData) {
+ vshError(ctl, "%s",
+ _("need either domain (ID, UUID, or name) or domain XML configuration file path"));
return false;
+ }
- configData = virConnectDomainXMLToNative(priv->conn, format, xmlData, flags);
- if (configData != NULL) {
- vshPrint(ctl, "%s", configData);
- VIR_FREE(configData);
+ if (!(configData = virConnectDomainXMLToNative(priv->conn, format, xmlData, flags))) {
+ vshError(ctl, "%s",
+ _("convert from domain XML to native command failed"));
+ goto cleanup;
} else {
- ret = false;
+ vshPrint(ctl, "%s", configData);
+ ret = true;
}
+ cleanup:
+ virshDomainFree(dom);
VIR_FREE(xmlData);
+ VIR_FREE(configData);
return ret;
}
--
2.13.0
7 years, 5 months
[libvirt] [PATCH v2 00/14] Work towards making virNodeDeviceObjPtr private
by John Ferlan
v1: https://www.redhat.com/archives/libvir-list/2017-May/msg00718.html
Changes since v1:
* Adjusted the title of cover letter to more appropriately match what's
being done.
* Added new patch 3 to cover issues I've noted in recent code reviews
where additions to virNodeDevCapType may not be properly 'covered'
in the virNodeDeviceObjHasCap and virNodeDeviceCapMatch helpers. With
the switch, it'll be forced.
* Removed former patch 4 - I'll deal with it later.
* Added patch 13
* Patch 14 is the old patch 13o
There's another 8 or so patches waiting to go, but the "next" one in the
series depends on other things currently on list waiting for review.
John Ferlan (14):
test: Adjust cleanup/error paths for nodedev test APIs
nodedev: Fix locking in virNodeDeviceObjRemove
nodedev: Need to check for vport capable scsi_host for vHBA searches
nodedev: Use switch for virNodeDeviceObjHasCap and
virNodeDeviceCapMatch
nodedev: Use common naming for virnodedeviceobj
nodedev: Cleanup driver code and prototypes
nodedev: Alter param to nodeDeviceUpdateDriverName
nodedev: Alter param to nodeDeviceUpdateCaps
nodedev: Create helper for finding by name in driver
nodedev: Use consistent names for driver variables
nodedev: Introduce virNodeDeviceObjGetDef
nodedev: Remove privateData from virNodeDeviceObj
nodedev: Pass @def by reference to create/assign object
nodedev: Introduce virNodeDeviceObjNew
src/conf/node_device_conf.h | 2 -
src/conf/virnodedeviceobj.c | 252 ++++++++++++++++-----------
src/conf/virnodedeviceobj.h | 4 +-
src/libvirt_private.syms | 1 +
src/node_device/node_device_driver.c | 233 ++++++++++++-------------
src/node_device/node_device_driver.h | 93 +++++++---
src/node_device/node_device_hal.c | 56 +++---
src/node_device/node_device_udev.c | 321 ++++++++++++++++++++---------------
src/test/test_driver.c | 118 +++++++------
9 files changed, 609 insertions(+), 471 deletions(-)
--
2.9.4
7 years, 5 months
[libvirt] [PATCH v3 0/9] Multiple cleanups within interfaceobj and interface driver
by John Ferlan
v2: https://www.redhat.com/archives/libvir-list/2017-May/msg01059.html
v1: https://www.redhat.com/archives/libvir-list/2017-April/msg01225.html
Patches 1-7 were acked in v1 with a request to "show" the next step in
a 9/8 patch to convert to using virObject for virInterfaceObj. v2 added
that, but also added a couple of patches that were unfavorable.
Since I didn't want to push something partial and it was later in the
release cycle, I didn't push 1-7. This series keeps the v1 patch 8 in
tact and adds patch9 which does the virObject conversion and the
virInterfaceObjEndAPI in the same patch (v2 separated those, but it seeems
Peter wasn't favoring that option, so I combined them).
I know this is not 3.4 material, but with a successful review of 8 & 9,
I would push this after 3.4 is cut.
John Ferlan (9):
interface: Consistently use 'obj' for a virInterfaceObjPtr
interface: Remove some unnecessary goto's for Interface tests
interface: Use virInterfaceDefPtr rather than deref from
virInterfaceObjPtr
interface: Make _virInterfaceObj struct private
interface: Make _virInterfaceObjList struct private
interface: Rename some virInterfaceObj* API's
interface: Clean up virInterfaceObjListFindByMACString
interface: Introduce virInterfaceObjNew
interface: Convert virInterfaceObj to use virObjectLockable
po/POTFILES.in | 1 -
src/conf/virinterfaceobj.c | 275 +++++++++++++++++++++++++++++----------------
src/conf/virinterfaceobj.h | 72 ++++++------
src/libvirt_private.syms | 19 ++--
src/test/test_driver.c | 142 ++++++++++++-----------
5 files changed, 292 insertions(+), 217 deletions(-)
--
2.9.4
7 years, 5 months
[libvirt] [PATCH 00/18] Allow virtio devices to use vIOMMU
by Ján Tomko
[Adding Jason to cc - could you please take a look at the documentation
(patches 6 and 8) and point out any device/option combinations that
do not make sense?]
https://bugzilla.redhat.com/show_bug.cgi?id=1283251
Ján Tomko (18):
conf: introduce virDomainControllerDriverFormat
conf: use a separate buffer for the subelements of <controller>
conf: only format <controller> as a pair tag when needed
conf: eliminate monster condition in virDomainControllerDefFormat
virDomainControllerDefFormat: move PCI model and target formatting
conf: add device_iotlb attribute to iommu
qemu: format device-iotlb on intel-iommu command line
qemuxml2xmltest: add virtio-options test
Add virtio-related options to interfaces
add virtio-related options to memballoon
Add virtio-related options to disks
Add virtio-related options to controllers
Add virtio-related options to filesystems
Add virtio-related options to rng devices
Add virtio-related options to video
Add virtio-related options to input devices
qemuxml2argvtest: add virtio-options test case
qemu: format virtio-related options on the command line
docs/formatdomain.html.in | 87 ++++++
docs/schemas/domaincommon.rng | 40 +++
src/conf/domain_conf.c | 314 ++++++++++++++++-----
src/conf/domain_conf.h | 27 ++
src/qemu/qemu_capabilities.c | 15 +-
src/qemu/qemu_capabilities.h | 5 +
src/qemu/qemu_command.c | 69 +++++
tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 3 +
.../qemuxml2argv-intel-iommu-device-iotlb.args | 19 ++
.../qemuxml2argv-intel-iommu-device-iotlb.xml | 31 ++
.../qemuxml2argv-virtio-options.args | 57 ++++
.../qemuxml2argv-virtio-options.xml | 104 +++++++
tests/qemuxml2argvtest.c | 18 ++
.../qemuxml2xmlout-intel-iommu-device-iotlb.xml | 1 +
.../qemuxml2xmlout-s390-defaultconsole.xml | 3 +-
.../qemuxml2xmlout-virtio-options.xml | 104 +++++++
tests/qemuxml2xmltest.c | 2 +
17 files changed, 825 insertions(+), 74 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-device-iotlb.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-device-iotlb.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-options.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-options.xml
create mode 120000 tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu-device-iotlb.xml
create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-options.xml
--
2.10.2
7 years, 5 months