Devel
Threads by month
- ----- 2026 -----
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- 28 participants
- 40117 discussions
26 Nov '16
Hi,
we would like to introduce 3 new elements source,access and allocation in memoryBacking element.
<memoryBacking>
<source type="file|anonymous"/>
<access Mode="shared|private"/>
<allocation mode="immediate|ondemand"/> </memoryBacking>
If allocation is immediate then -mem-prealloc should be added to the qemu commanline.
If source is file then
-object memory-backend-file,id=mem,size=1024M,mem-path=/var/lib/libvirt/qemu -numa node,memdev=mem Should be added to the qemu commandline
If access is shared then the share=on parameter should be added to the memory-backend-file e.g.
-object memory-backend-file,id=mem,size=1024M,mem-path=/var/lib/libvirt/qemu,share=on
Also token memAccess in numa cell is used (if not present, default value from memoryBacking is used)
Jaroslav Safka (3):
Add support for preallocated fd memory
Add support for preallocated fd memory
Add support for preallocated fd memory - doc
docs/formatdomain.html.in | 10 ++
docs/schemas/domaincommon.rng | 30 ++++
src/conf/domain_conf.c | 138 +++++++++++++-----
src/conf/domain_conf.h | 33 +++++
src/qemu/qemu_command.c | 156 ++++++++++++++++-----
src/qemu/qemu_command.h | 4 +
.../qemuxml2argv-fd-memory-no-numa-topology.args | 33 +++++
.../qemuxml2argv-fd-memory-no-numa-topology.xml | 91 ++++++++++++
.../qemuxml2argv-fd-memory-numa-topology.args | 33 +++++
.../qemuxml2argv-fd-memory-numa-topology.xml | 94 +++++++++++++
.../qemuxml2argv-fd-memory-numa-topology2.args | 36 +++++
.../qemuxml2argv-fd-memory-numa-topology2.xml | 95 +++++++++++++
.../qemuxml2argv-fd-memory-numa-topology3.args | 39 ++++++
.../qemuxml2argv-fd-memory-numa-topology3.xml | 96 +++++++++++++
.../qemuxml2argv-memorybacking-set.xml | 32 +++++
.../qemuxml2argv-memorybacking-unset.xml | 32 +++++
tests/qemuxml2argvtest.c | 42 ++++++
.../qemuxml2xmlout-memorybacking-set.xml | 40 ++++++
.../qemuxml2xmlout-memorybacking-unset.xml | 40 ++++++
tests/qemuxml2xmltest.c | 3 +
20 files changed, 1011 insertions(+), 66 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-fd-memory-no-numa-topology.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-fd-memory-no-numa-topology.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-fd-memory-numa-topology.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-fd-memory-numa-topology.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-fd-memory-numa-topology2.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-fd-memory-numa-topology2.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-fd-memory-numa-topology3.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-fd-memory-numa-topology3.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-memorybacking-set.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-memorybacking-unset.xml
create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-memorybacking-set.xml
create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-memorybacking-unset.xml
--
2.7.4
--------------------------------------------------------------
Intel Research and Development Ireland Limited
Registered in Ireland
Registered Office: Collinstown Industrial Park, Leixlip, County Kildare
Registered Number: 308263
This e-mail and any attachments may contain confidential material for the sole
use of the intended recipient(s). Any review or distribution by others is
strictly prohibited. If you are not the intended recipient, please contact the
sender and delete all copies.
2
6
[libvirt] [PATCH] libvirt: qemu: Fix domain termination caused by query-hotpluggable-cpus not enabled
by Boris Fiuczynski 26 Nov '16
by Boris Fiuczynski 26 Nov '16
26 Nov '16
(Re-)Starting libvirt on a system with running qemu domains which earlier
had been successfully started by libvirt results in the error
internal error: unable to execute QEMU command 'query-hotpluggable-cpus':
The feature 'query-hotpluggable-cpus' is not enabled
if the qemu binary does not support the qmp command 'query-hotpluggable-cpus'.
As libvirt tries to reconnect to the running qemu domains it reads in the
capabilities but in qemuProcessReconnect misses to run
virQEMUCapsCacheLookupCopy and not clearing the query-hotpluggable-cpus
capability in virQEMUCapsFilterByMachineType which was introduced with
commit 920bbe5c.
Libvirt therefore issues the qmp command and qemu responds with the error
'The feature 'query-hotpluggable-cpus' is not enabled'.
As a consequence libvirt terminates the running qemu process since it
determines that it cannot reconnect to the domain.
Signed-off-by: Boris Fiuczynski <fiuczy(a)linux.vnet.ibm.com>
Reviewed-by: Marc Hartmayer <mhartmay(a)linux.vnet.ibm.com>
---
Due to the severity of this issue I recommend to backport this fix
into all maintenance releases up to v2.2.0.
src/qemu/qemu_process.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index f8f379a..675f5b5 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3349,8 +3349,7 @@ qemuProcessReconnect(void *opaque)
/* If upgrading from old libvirtd we won't have found any
* caps in the domain status, so re-query them
*/
- if (!priv->qemuCaps &&
- !(priv->qemuCaps = virQEMUCapsCacheLookupCopy(caps,
+ if (!(priv->qemuCaps = virQEMUCapsCacheLookupCopy(caps,
driver->qemuCapsCache,
obj->def->emulator,
obj->def->os.machine)))
--
2.5.5
2
4
[libvirt] [PATCH v5 00/12] Add runnability info to query-cpu-definitions
by Eduardo Habkost 26 Nov '16
by Eduardo Habkost 26 Nov '16
26 Nov '16
This series extends query-cpu-definitions to include an extra
field: "unavailable-features". The new field can be used to find
out reasons that prevent the CPU model from running in the
current host.
This will return information based on the current machine and
accelerator only. In the future we may extend these mechanisms to
allow querying other machines and other accelerators without
restarting QEMU, but it will require some reorganization of
QEMU's main code.
To be able to implement this more cleanly, the series rework some
of the feature/property name code.
This series can be seen in the git branch at:
https://github.com/ehabkost/qemu-hacks.git work/query-cpu-definitions-runnable-info
The series is based on my x86-next branch:
https://github.com/ehabkost/qemu.git x86-next
Changes v4 -> v5:
* New patch: "target-i386: Register aliases for feature names with underscores"
* On patch: "tests: Add test case for x86 feature parsing compatibility":
* Fix typo on commit message
Reported-by: Jonathan Neuschäfer <j.neuschaefer(a)gmx.net>
* Add comment noting that the "[+-]feature" compatibility mode
will be removed soon
* On patch: "target-i386: Make plus_features/minus_features QOM-based":
* Removed feat2prop() call on , as we now have property aliases
for the old names containing underscores
* On patch: "target-i386: Remove underscores from feat_names arrays":
* Remove the feat2prop() call from the alias registration
loop, too
* Commit message update to enumerate all code that uses
feat_names
* On patch: "target-i386: x86_cpu_load_features() function":
* Fix typo on x86_cpu_load_features() comment
Reported-by: Paolo Bonzini <pbonzini(a)redhat.com>
Diff v4 ->v5:
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 4dd3aee..620889f 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -2002,12 +2002,10 @@ static void x86_cpu_parse_featurestr(const char *typename, char *features,
/* Compatibility syntax: */
if (featurestr[0] == '+') {
- feat2prop(featurestr + 1);
plus_features = g_list_append(plus_features,
g_strdup(featurestr + 1));
continue;
} else if (featurestr[0] == '-') {
- feat2prop(featurestr + 1);
minus_features = g_list_append(minus_features,
g_strdup(featurestr + 1));
continue;
@@ -3066,8 +3064,7 @@ static void x86_cpu_enable_xsave_components(X86CPU *cpu)
env->features[FEAT_XSAVE_COMP_HI] = mask >> 32;
}
-/* Load CPUID data based on configureured features
- */
+/* Load CPUID data based on configured features */
static void x86_cpu_load_features(X86CPU *cpu, Error **errp)
{
CPUX86State *env = &cpu->env;
@@ -3443,7 +3440,10 @@ static void x86_cpu_register_feature_bit_props(X86CPU *cpu,
return;
}
- /* Property names should use "-" instead of "_" */
+ /* Property names should use "-" instead of "_".
+ * Old names containing underscores are registered as aliases
+ * using object_property_add_alias()
+ */
assert(!strchr(name, '_'));
/* aliases don't use "|" delimiters anymore, they are registered
* manually using object_property_add_alias() */
@@ -3496,7 +3496,6 @@ static void x86_cpu_initfn(Object *obj)
}
}
- /* Alias for feature properties: */
object_property_add_alias(obj, "sse3", obj, "pni", &error_abort);
object_property_add_alias(obj, "pclmuldq", obj, "pclmulqdq", &error_abort);
object_property_add_alias(obj, "sse4-1", obj, "sse4.1", &error_abort);
@@ -3505,6 +3504,28 @@ static void x86_cpu_initfn(Object *obj)
object_property_add_alias(obj, "ffxsr", obj, "fxsr-opt", &error_abort);
object_property_add_alias(obj, "i64", obj, "lm", &error_abort);
+ object_property_add_alias(obj, "ds_cpl", obj, "ds-cpl", &error_abort);
+ object_property_add_alias(obj, "tsc_adjust", obj, "tsc-adjust", &error_abort);
+ object_property_add_alias(obj, "fxsr_opt", obj, "fxsr-opt", &error_abort);
+ object_property_add_alias(obj, "lahf_lm", obj, "lahf-lm", &error_abort);
+ object_property_add_alias(obj, "cmp_legacy", obj, "cmp-legacy", &error_abort);
+ object_property_add_alias(obj, "nodeid_msr", obj, "nodeid-msr", &error_abort);
+ object_property_add_alias(obj, "perfctr_core", obj, "perfctr-core", &error_abort);
+ object_property_add_alias(obj, "perfctr_nb", obj, "perfctr-nb", &error_abort);
+ object_property_add_alias(obj, "kvm_nopiodelay", obj, "kvm-nopiodelay", &error_abort);
+ object_property_add_alias(obj, "kvm_mmu", obj, "kvm-mmu", &error_abort);
+ object_property_add_alias(obj, "kvm_asyncpf", obj, "kvm-asyncpf", &error_abort);
+ object_property_add_alias(obj, "kvm_steal_time", obj, "kvm-steal-time", &error_abort);
+ object_property_add_alias(obj, "kvm_pv_eoi", obj, "kvm-pv-eoi", &error_abort);
+ object_property_add_alias(obj, "kvm_pv_unhalt", obj, "kvm-pv-unhalt", &error_abort);
+ object_property_add_alias(obj, "svm_lock", obj, "svm-lock", &error_abort);
+ object_property_add_alias(obj, "nrip_save", obj, "nrip-save", &error_abort);
+ object_property_add_alias(obj, "tsc_scale", obj, "tsc-scale", &error_abort);
+ object_property_add_alias(obj, "vmcb_clean", obj, "vmcb-clean", &error_abort);
+ object_property_add_alias(obj, "pause_filter", obj, "pause-filter", &error_abort);
+ object_property_add_alias(obj, "sse4_1", obj, "sse4.1", &error_abort);
+ object_property_add_alias(obj, "sse4_2", obj, "sse4.2", &error_abort);
+
x86_cpu_load_def(cpu, xcc->cpu_def, &error_abort);
}
diff --git a/tests/test-x86-cpuid-compat.c b/tests/test-x86-cpuid-compat.c
index 7cff2b5..260dd27 100644
--- a/tests/test-x86-cpuid-compat.c
+++ b/tests/test-x86-cpuid-compat.c
@@ -81,9 +81,14 @@ static void test_plus_minus(void)
char *path;
/* Rules:
- * "-foo" overrides "+foo"
- * "[+-]foo" overrides "foo=..."
- * "foo_bar" should be translated to "foo-bar"
+ * 1)"-foo" overrides "+foo"
+ * 2) "[+-]foo" overrides "foo=..."
+ * 3) Old feature names with underscores (e.g. "sse4_2")
+ * should keep working
+ *
+ * Note: rules 1 and 2 are planned to be removed soon, but we
+ * need to keep compatibility for a while until we start
+ * warning users about it.
*/
qtest_start("-cpu pentium,-fpu,+fpu,-mce,mce=on,+cx8,cx8=off,+sse4_1,sse4_2=on");
path = get_cpu0_qom_path();
Changes v3 -> v4:
* Removed patch "Define CPUID filtering functions before x86_cpu_list"
* New patch: "tests: Add test case for x86 feature parsing compatibility"
* New patch: "target-i386: Disable VME by default with TCG"
* Disable VME by default on TCG to avoid returning bogus
results for all CPU models in TCG mode
* New patch: "target-i386: Make plus_features/minus_features QOM-based"
* New patch: "target-i386: Remove underscores from property names"
* New patch: "target-i386: Register properties for feature aliases manually"
* New patch: "target-i386: xsave: Add FP and SSE bits to x86_ext_save_areas"
* New patch: "target-i386: x86_cpu_load_features() function"
* On patch: "target-i386: Return runnability information on query-cpu-definitions"
* Added code to handle unsupported XSAVE components cleanly
* Use x86_cpu_load_features() function
Changes v2 -> v3:
* Small documentation reword
* Suggested-by: Markus Armbruster <armbru(a)redhat.com>
* Create a x86_cpu_feature_name() function, to
isolate the code that returns the property name
Changes v1 -> v2:
* Fixed documentation to say "(since 2.7)"
* Removed @runnable field, improved documentation
Example command output:
{ "return": [
{
"unavailable-features": [],
"static": false,
"name": "host"
},
{
"unavailable-features": [],
"static": false,
"name": "qemu64"
},
{
"unavailable-features": [],
"static": false,
"name": "qemu32"
},
{
"unavailable-features": ["npt", "sse4a", "3dnow", "3dnowext", "fxsr-opt", "mmxext"],
"static": false,
"name": "phenom"
},
{
"unavailable-features": [],
"static": false,
"name": "pentium3"
},
{
"unavailable-features": [],
"static": false,
"name": "pentium2"
},
{
"unavailable-features": [],
"static": false,
"name": "pentium"
},
{
"unavailable-features": [],
"static": false,
"name": "n270"
},
{
"unavailable-features": [],
"static": false,
"name": "kvm64"
},
{
"unavailable-features": [],
"static": false,
"name": "kvm32"
},
{
"unavailable-features": [],
"static": false,
"name": "coreduo"
},
{
"unavailable-features": [],
"static": false,
"name": "core2duo"
},
{
"unavailable-features": ["3dnow", "3dnowext", "mmxext"],
"static": false,
"name": "athlon"
},
{
"unavailable-features": [],
"static": false,
"name": "Westmere"
},
{
"unavailable-features": ["xgetbv1", "xsavec", "3dnowprefetch", "smap", "adx", "rdseed", "mpx", "rtm", "hle"],
"static": false,
"name": "Skylake-Client"
},
{
"unavailable-features": [],
"static": false,
"name": "SandyBridge"
},
{
"unavailable-features": [],
"static": false,
"name": "Penryn"
},
{
"unavailable-features": ["tbm", "fma4", "xop", "3dnowprefetch", "misalignsse", "sse4a"],
"static": false,
"name": "Opteron_G5"
},
{
"unavailable-features": ["fma4", "xop", "3dnowprefetch", "misalignsse", "sse4a"],
"static": false,
"name": "Opteron_G4"
},
{
"unavailable-features": ["misalignsse", "sse4a"],
"static": false,
"name": "Opteron_G3"
},
{
"unavailable-features": [],
"static": false,
"name": "Opteron_G2"
},
{
"unavailable-features": [],
"static": false,
"name": "Opteron_G1"
},
{
"unavailable-features": [],
"static": false,
"name": "Nehalem"
},
{
"unavailable-features": [],
"static": false,
"name": "IvyBridge"
},
{
"unavailable-features": ["rtm", "hle"],
"static": false,
"name": "Haswell"
},
{
"unavailable-features": [],
"static": false,
"name": "Haswell-noTSX"
},
{
"unavailable-features": [],
"static": false,
"name": "Conroe"
},
{
"unavailable-features": ["3dnowprefetch", "smap", "adx", "rdseed", "rtm", "hle"],
"static": false,
"name": "Broadwell"
},
{
"unavailable-features": ["3dnowprefetch", "smap", "adx", "rdseed"],
"static": false,
"name": "Broadwell-noTSX"
},
{
"unavailable-features": [],
"static": false,
"name": "486"
}
]}
Cc: David Hildenbrand <dahi(a)linux.vnet.ibm.com>
Cc: Michael Mueller <mimu(a)linux.vnet.ibm.com>
Cc: Christian Borntraeger <borntraeger(a)de.ibm.com>
Cc: Cornelia Huck <cornelia.huck(a)de.ibm.com>
Cc: Jiri Denemark <jdenemar(a)redhat.com>
Cc: libvir-list(a)redhat.com
Eduardo Habkost (12):
tests: Add test case for x86 feature parsing compatibility
target-i386: List CPU models using subclass list
target-i386: Disable VME by default with TCG
target-i386: Register aliases for feature names with underscores
target-i386: Make plus_features/minus_features QOM-based
target-i386: Remove underscores from feat_names arrays
target-i386: Register properties for feature aliases manually
target-i386: xsave: Add FP and SSE bits to x86_ext_save_areas
target-i386: Move warning code outside x86_cpu_filter_features()
target-i386: x86_cpu_load_features() function
qmp: Add runnability information to query-cpu-definitions
target-i386: Return runnability information on query-cpu-definitions
qapi-schema.json | 23 +-
target-i386/cpu-qom.h | 4 +
target-i386/cpu.c | 510 ++++++++++++++++++++++++++----------------
tests/test-x86-cpuid-compat.c | 44 ++++
4 files changed, 388 insertions(+), 193 deletions(-)
--
2.7.4
3
17
26 Nov '16
An errno=ECONNRESET received on a monitor socket reflects that the
guest may have closed the socket.
Today, we just mark it as a 'hangup' and do not trigger
the eof callback.
I've been looking at a slew of such messages in libvirt logs. If
the monitor socket indicated an ECONNRESET, it would possibly make sense
to mark the socket closed so that the "eof" callback may
then be invoked.
Is there a subtle corner case I'm missing here ?
Signed-off-by: Prerna Saxena <saxenap.ltc(a)gmail.com>
---
src/qemu/qemu_monitor.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index a5e14b2..dcafa5a 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -690,10 +690,11 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque)
if (events & VIR_EVENT_HANDLE_HANGUP) {
hangup = true;
+ eof = true;
if (!error) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("End of file from qemu monitor"));
- eof = true;
+
events &= ~VIR_EVENT_HANDLE_HANGUP;
}
}
--
1.8.1.2
2
1
[libvirt] [PATCH 1/1] reset vcpu pin info from config for zero mask
by Konstantin Neumoin 25 Nov '16
by Konstantin Neumoin 25 Nov '16
25 Nov '16
The option for removing vcpu pinning information from config was added
in:
'7ea9778 vcpupin: add vcpupin resetting feature to qemu driver'
and removed in:
'a02a161 qemu: libxl: vcpupin: Don't reset pinning when pinning to all pcpus'
by some reasons.
So, for now there is no way to remove vcpu pinning from config.
This patch returns options for remove vcpu/emulator pinning settings
from both configs if zero mask(mask filled by zeros) was specified.
Signed-off-by: Konstantin Neumoin <kneumoin(a)virtuozzo.com>
---
src/qemu/qemu_driver.c | 74 +++++++++++++++++++++++++++++++++++---------------
1 file changed, 52 insertions(+), 22 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index bec7a38..7aa64a4 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4969,7 +4969,8 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
virQEMUDriverConfigPtr cfg,
virBitmapPtr cpumap)
{
- virBitmapPtr tmpmap = NULL;
+ virBitmapPtr effective_cpumap = NULL;
+ virBitmapPtr allcpu_map = NULL;
virDomainVcpuInfoPtr vcpuinfo;
qemuDomainObjPrivatePtr priv = vm->privateData;
virCgroupPtr cgroup_vcpu = NULL;
@@ -4980,6 +4981,7 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
int eventNparams = 0;
int eventMaxparams = 0;
int ret = -1;
+ int hostcpus = 0;
if (!qemuDomainHasVcpuPids(vm)) {
virReportError(VIR_ERR_OPERATION_INVALID,
@@ -4994,29 +4996,38 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
goto cleanup;
}
- if (!(tmpmap = virBitmapNewCopy(cpumap)))
- goto cleanup;
+ if (vcpuinfo->online) {
+ if (cpumap) {
+ effective_cpumap = cpumap;
+ } else if (def->cpumask) {
+ effective_cpumap = def->cpumask;
+ } else {
+ if ((hostcpus = nodeGetCPUCount(NULL)) < 0)
+ goto cleanup;
- if (!(str = virBitmapFormat(cpumap)))
- goto cleanup;
+ if (!(allcpu_map = virBitmapNew(hostcpus)))
+ goto cleanup;
+ virBitmapSetAll(allcpu_map);
+ effective_cpumap = allcpu_map;
+ }
- if (vcpuinfo->online) {
/* Configure the corresponding cpuset cgroup before set affinity. */
if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_VCPU, vcpu,
false, &cgroup_vcpu) < 0)
goto cleanup;
- if (qemuSetupCgroupCpusetCpus(cgroup_vcpu, cpumap) < 0)
+ if (qemuSetupCgroupCpusetCpus(cgroup_vcpu, effective_cpumap) < 0)
goto cleanup;
}
- if (virProcessSetAffinity(qemuDomainGetVcpuPid(vm, vcpu), cpumap) < 0)
+ if (virProcessSetAffinity(qemuDomainGetVcpuPid(vm, vcpu), effective_cpumap) < 0)
goto cleanup;
}
virBitmapFree(vcpuinfo->cpumask);
- vcpuinfo->cpumask = tmpmap;
- tmpmap = NULL;
+ vcpuinfo->cpumask = NULL;
+ if (cpumap && !(vcpuinfo->cpumask = virBitmapNewCopy(cpumap)))
+ goto cleanup;
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
goto cleanup;
@@ -5026,6 +5037,9 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
goto cleanup;
}
+ if (!(str = virBitmapFormat(effective_cpumap)))
+ goto cleanup;
+
if (virTypedParamsAddString(&eventParams, &eventNparams,
&eventMaxparams, paramField, str) < 0)
goto cleanup;
@@ -5035,7 +5049,7 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
ret = 0;
cleanup:
- virBitmapFree(tmpmap);
+ virBitmapFree(allcpu_map);
virCgroupFree(&cgroup_vcpu);
VIR_FREE(str);
qemuDomainEventQueue(driver, event);
@@ -5089,9 +5103,8 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
goto endjob;
if (virBitmapIsAllClear(pcpumap)) {
- virReportError(VIR_ERR_INVALID_ARG, "%s",
- _("Empty cpu list for pinning"));
- goto endjob;
+ virBitmapFree(pcpumap);
+ pcpumap = NULL;
}
if (def &&
@@ -5177,12 +5190,15 @@ qemuDomainPinEmulator(virDomainPtr dom,
int ret = -1;
qemuDomainObjPrivatePtr priv;
virBitmapPtr pcpumap = NULL;
+ virBitmapPtr allcpu_map = NULL;
+ virBitmapPtr effective_pcpumap = NULL;
virQEMUDriverConfigPtr cfg = NULL;
virObjectEventPtr event = NULL;
char *str = NULL;
virTypedParameterPtr eventParams = NULL;
int eventNparams = 0;
int eventMaxparams = 0;
+ int hostcpus = 0;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1);
@@ -5207,18 +5223,31 @@ qemuDomainPinEmulator(virDomainPtr dom,
goto endjob;
if (virBitmapIsAllClear(pcpumap)) {
- virReportError(VIR_ERR_INVALID_ARG, "%s",
- _("Empty cpu list for pinning"));
- goto endjob;
+ virBitmapFree(pcpumap);
+ pcpumap = NULL;
}
if (def) {
+ if (pcpumap) {
+ effective_pcpumap = pcpumap;
+ } else if (def->cpumask) {
+ effective_pcpumap = def->cpumask;
+ } else {
+ if ((hostcpus = nodeGetCPUCount(NULL)) < 0)
+ goto cleanup;
+
+ if (!(allcpu_map = virBitmapNew(hostcpus)))
+ goto cleanup;
+ virBitmapSetAll(allcpu_map);
+ effective_pcpumap = allcpu_map;
+ }
+
if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR,
0, false, &cgroup_emulator) < 0)
goto endjob;
- if (qemuSetupCgroupCpusetCpus(cgroup_emulator, pcpumap) < 0) {
+ if (qemuSetupCgroupCpusetCpus(cgroup_emulator, effective_pcpumap) < 0) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("failed to set cpuset.cpus in cgroup"
" for emulator threads"));
@@ -5226,19 +5255,19 @@ qemuDomainPinEmulator(virDomainPtr dom,
}
}
- if (virProcessSetAffinity(vm->pid, pcpumap) < 0)
+ if (virProcessSetAffinity(vm->pid, effective_pcpumap) < 0)
goto endjob;
virBitmapFree(def->cputune.emulatorpin);
def->cputune.emulatorpin = NULL;
- if (!(def->cputune.emulatorpin = virBitmapNewCopy(pcpumap)))
+ if (pcpumap && !(def->cputune.emulatorpin = virBitmapNewCopy(pcpumap)))
goto endjob;
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
goto endjob;
- str = virBitmapFormat(pcpumap);
+ str = virBitmapFormat(effective_pcpumap);
if (virTypedParamsAddString(&eventParams, &eventNparams,
&eventMaxparams,
VIR_DOMAIN_TUNABLE_CPU_EMULATORPIN,
@@ -5252,7 +5281,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
virBitmapFree(persistentDef->cputune.emulatorpin);
persistentDef->cputune.emulatorpin = NULL;
- if (!(persistentDef->cputune.emulatorpin = virBitmapNewCopy(pcpumap)))
+ if (pcpumap && !(persistentDef->cputune.emulatorpin = virBitmapNewCopy(pcpumap)))
goto endjob;
ret = virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef);
@@ -5270,6 +5299,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
qemuDomainEventQueue(driver, event);
VIR_FREE(str);
virBitmapFree(pcpumap);
+ virBitmapFree(allcpu_map);
virDomainObjEndAPI(&vm);
virObjectUnref(cfg);
return ret;
--
2.5.5
2
1
Peter Krempa (2):
docs: NEWS: Mention 'gluster_debug_level' qemu.conf option in the news
docs: news: Mention changes in memory slot number allocation
docs/news.html.in | 7 +++++++
1 file changed, 7 insertions(+)
--
2.10.2
2
6
Hi all,
Running virsh domjobinfo on my CentOS 6 systems during a migration
with --copy-storage-all, the output used to look like this:
Job type: Unbounded
Time elapsed: 1830632 ms
Data processed: 37.212 GiB
Data remaining: 1.025 GiB
Data total: 16.016 GiB
Memory processed: 37.212 GiB
Memory remaining: 1.025 GiB
Memory total: 16.016 GiB
Memory bandwidth: 100.018 MiB/s
Constant pages: 618279
Normal pages: 9734623
Normal data: 37.135 GiB
Expected downtime: 1118 ms
Setup time: 61 ms
But when I run the same command on CentOS 7, libvirt-1.2.17-13 and
qemu-kvm-1.5.3-105, I just get this:
$ sudo virsh domjobinfo 58358fec-c35c-4a7a-a4dd-18ec2e1327bf
Job type: Unbounded
Time elapsed: 209616 ms
I tried to debug this myself, but I'm a bit stuck. I'd expected
libvirt to send query-migrate commands to qemu every 50 ms or so. To
verify I attached gdb and put a breakpoint at
qemuMonitorJSONGetMigrationStatus, but the breakpoint only hits after
the complete disk is mirrored.
Is this a regression, or am I doing something wrong?
Kind regards,
Ruben Kerkhof
2
4
25 Nov '16
We have couple of functions that operate over NULL terminated
lits of strings. However, our naming sucks:
virStringJoin
virStringFreeList
virStringFreeListCount
virStringArrayHasString
virStringGetFirstWithPrefix
We can do better:
virStringListJoin
virStringListFree
virStringListFreeCount
virStringListHasString
virStringListGetFirstWithPrefix
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
daemon/remote.c | 2 +-
src/bhyve/bhyve_command.c | 2 +-
src/bhyve/bhyve_parse_command.c | 14 +++++++-------
src/conf/domain_capabilities.c | 2 +-
src/cpu/cpu_ppc64.c | 2 +-
src/cpu/cpu_x86.c | 2 +-
src/libvirt_private.syms | 10 +++++-----
src/lxc/lxc_container.c | 2 +-
src/lxc/lxc_native.c | 24 ++++++++++++------------
src/openvz/openvz_conf.c | 2 +-
src/qemu/qemu_agent.c | 4 ++--
src/qemu/qemu_capabilities.c | 20 ++++++++++----------
src/qemu/qemu_conf.c | 10 +++++-----
src/qemu/qemu_domain.c | 6 +++---
src/qemu/qemu_driver.c | 2 +-
src/qemu/qemu_monitor_json.c | 18 +++++++++---------
src/qemu/qemu_monitor_text.c | 6 +++---
src/qemu/qemu_parse_command.c | 22 +++++++++++-----------
src/qemu/qemu_process.c | 8 ++++----
src/remote/remote_driver.c | 2 +-
src/storage/storage_backend_sheepdog.c | 6 +++---
src/storage/storage_backend_zfs.c | 12 ++++++------
src/storage/storage_driver.c | 2 +-
src/util/vircgroup.c | 8 ++++----
src/util/vircommand.c | 2 +-
src/util/virconf.c | 4 ++--
src/util/virfile.c | 6 +++---
src/util/virfirewall.c | 2 +-
src/util/virfirmware.c | 4 ++--
src/util/virlog.c | 8 ++++----
src/util/virpolkit.c | 2 +-
src/util/virprocess.c | 2 +-
src/util/virstoragefile.c | 16 ++++++++--------
src/util/virstring.c | 32 ++++++++++++++++----------------
src/util/virstring.h | 12 ++++++------
src/util/viruri.c | 2 +-
src/vbox/vbox_common.c | 10 +++++-----
src/vbox/vbox_snapshot_conf.c | 18 +++++++++---------
src/vz/vz_sdk.c | 2 +-
tests/domainsnapshotxml2xmltest.c | 2 +-
tests/qemumonitorjsontest.c | 14 +++++++-------
tests/qemuxml2argvtest.c | 2 +-
tests/vboxsnapshotxmltest.c | 2 +-
tests/virconftest.c | 2 +-
tests/virfiletest.c | 2 +-
tests/virpolkittest.c | 2 +-
tests/virstringtest.c | 14 +++++++-------
tools/virsh-domain.c | 12 ++++++------
tools/virsh-nodedev.c | 6 +++---
tools/virsh-pool.c | 4 ++--
tools/virsh-snapshot.c | 4 ++--
tools/virt-host-validate-common.c | 6 +++---
tools/virt-login-shell.c | 6 +++---
tools/vsh.c | 4 ++--
54 files changed, 196 insertions(+), 196 deletions(-)
diff --git a/daemon/remote.c b/daemon/remote.c
index e414f92..46773da 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -5425,7 +5425,7 @@ remoteDispatchConnectGetCPUModelNames(virNetServerPtr server ATTRIBUTE_UNUSED,
cleanup:
if (rv < 0)
virNetMessageSaveError(rerr);
- virStringFreeList(models);
+ virStringListFree(models);
return rv;
}
diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
index bb5c45c..8a29977 100644
--- a/src/bhyve/bhyve_command.c
+++ b/src/bhyve/bhyve_command.c
@@ -323,7 +323,7 @@ virAppendBootloaderArgs(virCommandPtr cmd, virDomainDefPtr def)
/* XXX: Handle quoted? */
blargs = virStringSplit(def->os.bootloaderArgs, " ", 0);
virCommandAddArgSet(cmd, (const char * const *)blargs);
- virStringFreeList(blargs);
+ virStringListFree(blargs);
}
static virCommandPtr
diff --git a/src/bhyve/bhyve_parse_command.c b/src/bhyve/bhyve_parse_command.c
index 0ae7a83..6190042 100644
--- a/src/bhyve/bhyve_parse_command.c
+++ b/src/bhyve/bhyve_parse_command.c
@@ -246,7 +246,7 @@ bhyveCommandLineToArgv(const char *nativeConfig,
} else {
/* To prevent a use-after-free here, only free the argument list
* when it is definitely not going to be used */
- virStringFreeList(arglist);
+ virStringListFree(arglist);
}
}
@@ -254,13 +254,13 @@ bhyveCommandLineToArgv(const char *nativeConfig,
if (!(*bhyve_argv = _bhyve_argv))
goto error;
- virStringFreeList(lines);
+ virStringListFree(lines);
return 0;
error:
VIR_FREE(_loader_argv);
VIR_FREE(_bhyve_argv);
- virStringFreeList(lines);
+ virStringListFree(lines);
return -1;
}
@@ -804,7 +804,7 @@ bhyveParseBhyveLoadCommandLine(virDomainDefPtr def,
if (VIR_STRDUP(def->os.bootloader, argv[0]) < 0)
goto error;
- def->os.bootloaderArgs = virStringJoin((const char**) &argv[1], " ");
+ def->os.bootloaderArgs = virStringListJoin((const char**) &argv[1], " ");
}
if (argc != parser->optind) {
@@ -841,7 +841,7 @@ bhyveParseCustomLoaderCommandLine(virDomainDefPtr def,
if (VIR_STRDUP(def->os.bootloader, argv[0]) < 0)
goto error;
- def->os.bootloaderArgs = virStringJoin((const char**) &argv[1], " ");
+ def->os.bootloaderArgs = virStringListJoin((const char**) &argv[1], " ");
return 0;
error:
@@ -893,8 +893,8 @@ bhyveParseCommandLineString(const char* nativeConfig,
}
cleanup:
- virStringFreeList(loader_argv);
- virStringFreeList(bhyve_argv);
+ virStringListFree(loader_argv);
+ virStringListFree(bhyve_argv);
return def;
error:
virDomainDefFree(def);
diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
index beedd70..fb2d696 100644
--- a/src/conf/domain_capabilities.c
+++ b/src/conf/domain_capabilities.c
@@ -185,7 +185,7 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old,
return NULL;
for (i = 0; i < old->nmodels; i++) {
- if (models && !virStringArrayHasString(models, old->models[i].name))
+ if (models && !virStringListHasString(models, old->models[i].name))
continue;
if (virDomainCapsCPUModelsAdd(cpuModels,
diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c
index 225fb6d..180ad87 100644
--- a/src/cpu/cpu_ppc64.c
+++ b/src/cpu/cpu_ppc64.c
@@ -888,7 +888,7 @@ virCPUppc64DriverGetModels(char ***models)
error:
if (models) {
- virStringFreeList(*models);
+ virStringListFree(*models);
*models = NULL;
}
goto cleanup;
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index e91850f..c79308a 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -2675,7 +2675,7 @@ virCPUx86GetModels(char ***models)
error:
if (models) {
- virStringFreeList(*models);
+ virStringListFree(*models);
*models = NULL;
}
return -1;
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index a04ba23..7cc7bf8 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2453,16 +2453,16 @@ virSkipSpacesAndBackslash;
virSkipSpacesBackwards;
virStrcpy;
virStrdup;
-virStringArrayHasString;
virStringBufferIsPrintable;
virStringEncodeBase64;
-virStringFreeList;
-virStringFreeListCount;
-virStringGetFirstWithPrefix;
virStringHasControlChars;
virStringIsEmpty;
virStringIsPrintable;
-virStringJoin;
+virStringListFree;
+virStringListFreeCount;
+virStringListGetFirstWithPrefix;
+virStringListHasString;
+virStringListJoin;
virStringListLength;
virStringReplace;
virStringSearch;
diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
index 5357df4..dd013df 100644
--- a/src/lxc/lxc_container.c
+++ b/src/lxc/lxc_container.c
@@ -607,7 +607,7 @@ static int lxcContainerUnmountSubtree(const char *prefix,
ret = 0;
cleanup:
- virStringFreeList(mounts);
+ virStringListFree(mounts);
return ret;
}
diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
index ce62df9..8f44168 100644
--- a/src/lxc/lxc_native.c
+++ b/src/lxc/lxc_native.c
@@ -129,13 +129,13 @@ static char ** lxcStringSplit(const char *string)
}
VIR_FREE(tmp);
- virStringFreeList(parts);
+ virStringListFree(parts);
return result;
error:
VIR_FREE(tmp);
- virStringFreeList(parts);
- virStringFreeList(result);
+ virStringListFree(parts);
+ virStringListFree(result);
return NULL;
}
@@ -160,13 +160,13 @@ lxcParseFstabLine(char *fstabLine)
VIR_STRDUP(fstab->options, parts[3]) < 0)
goto error;
- virStringFreeList(parts);
+ virStringListFree(parts);
return fstab;
error:
lxcFstabFree(fstab);
- virStringFreeList(parts);
+ virStringListFree(parts);
return NULL;
}
@@ -299,7 +299,7 @@ lxcAddFstabLine(virDomainDefPtr def, lxcFstabPtr fstab)
type = VIR_DOMAIN_FS_TYPE_BLOCK;
/* Do we have ro in options? */
- readonly = virStringArrayHasString((const char **) options, "ro");
+ readonly = virStringListHasString((const char **) options, "ro");
if (lxcAddFSDef(def, type, src, dst, readonly, usage) < 0)
goto cleanup;
@@ -308,7 +308,7 @@ lxcAddFstabLine(virDomainDefPtr def, lxcFstabPtr fstab)
cleanup:
VIR_FREE(dst);
- virStringFreeList(options);
+ virStringListFree(options);
return ret;
}
@@ -618,12 +618,12 @@ lxcNetworkWalkCallback(const char *name, virConfValuePtr value, void *data)
virReportError(VIR_ERR_INVALID_ARG,
_("Invalid CIDR address: '%s'"), value->str);
- virStringFreeList(ipparts);
+ virStringListFree(ipparts);
VIR_FREE(ip);
return -1;
}
- virStringFreeList(ipparts);
+ virStringListFree(ipparts);
if (VIR_APPEND_ELEMENT(parseData->ips, parseData->nips, ip) < 0) {
VIR_FREE(ip);
@@ -943,7 +943,7 @@ lxcBlkioDeviceWalkCallback(const char *name, virConfValuePtr value, void *data)
ret = 0;
cleanup:
- virStringFreeList(parts);
+ virStringListFree(parts);
VIR_FREE(path);
return ret;
@@ -982,13 +982,13 @@ lxcSetCapDrop(virDomainDefPtr def, virConfPtr properties)
for (i = 0; i < VIR_DOMAIN_CAPS_FEATURE_LAST; i++) {
capString = virDomainCapsFeatureTypeToString(i);
if (toDrop != NULL &&
- virStringArrayHasString((const char **) toDrop, capString))
+ virStringListHasString((const char **) toDrop, capString))
def->caps_features[i] = VIR_TRISTATE_SWITCH_OFF;
}
def->features[VIR_DOMAIN_FEATURE_CAPABILITIES] = VIR_DOMAIN_CAPABILITIES_POLICY_ALLOW;
- virStringFreeList(toDrop);
+ virStringListFree(toDrop);
}
virDomainDefPtr
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 65c441e..b02e1aa 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -151,7 +151,7 @@ openvzParseBarrierLimit(const char* value,
ret = 0;
error:
- virStringFreeListCount(tmp, ntmp);
+ virStringListFreeCount(tmp, ntmp);
return ret;
}
diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index ec8d47e..1d677f7 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -2115,7 +2115,7 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
}
/* Has to be freed for each interface. */
- virStringFreeList(ifname);
+ virStringListFree(ifname);
/* as well as IP address which - moreover -
* can be presented multiple times */
@@ -2201,7 +2201,7 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
virDomainInterfaceFree(ifaces_ret[i]);
}
VIR_FREE(ifaces_ret);
- virStringFreeList(ifname);
+ virStringListFree(ifname);
goto cleanup;
}
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index f9e39a3..8901e7b 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -1842,7 +1842,7 @@ virQEMUCapsProcessProps(virQEMUCapsPtr qemuCaps,
for (j = 0; j < nvalues; j++) {
if (STREQ(values[j], props[i].prop)) {
- if (virStringArrayHasString(props[i].objects, object))
+ if (virStringListHasString(props[i].objects, object))
virQEMUCapsSet(qemuCaps, props[i].flag);
break;
}
@@ -2369,7 +2369,7 @@ virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
return 0;
error:
- virStringFreeListCount(models, i);
+ virStringListFreeCount(models, i);
return -1;
}
@@ -2777,12 +2777,12 @@ virQEMUCapsProbeQMPTPM(virQEMUCapsPtr qemuCaps,
for (i = 0; i < ARRAY_CARDINALITY(virQEMUCapsTPMModelsToCaps); i++) {
const char *needle = virDomainTPMModelTypeToString(
virQEMUCapsTPMModelsToCaps[i].type);
- if (virStringArrayHasString((const char **) entries, needle))
+ if (virStringListHasString((const char **) entries, needle))
virQEMUCapsSet(qemuCaps,
virQEMUCapsTPMModelsToCaps[i].caps);
}
}
- virStringFreeList(entries);
+ virStringListFree(entries);
if ((nentries = qemuMonitorGetTPMTypes(mon, &entries)) < 0)
return -1;
@@ -2791,11 +2791,11 @@ virQEMUCapsProbeQMPTPM(virQEMUCapsPtr qemuCaps,
for (i = 0; i < ARRAY_CARDINALITY(virQEMUCapsTPMTypesToCaps); i++) {
const char *needle = virDomainTPMBackendTypeToString(
virQEMUCapsTPMTypesToCaps[i].type);
- if (virStringArrayHasString((const char **) entries, needle))
+ if (virStringListHasString((const char **) entries, needle))
virQEMUCapsSet(qemuCaps, virQEMUCapsTPMTypesToCaps[i].caps);
}
}
- virStringFreeList(entries);
+ virStringListFree(entries);
return 0;
}
@@ -2887,7 +2887,7 @@ virQEMUCapsProbeQMPCommandLine(virQEMUCapsPtr qemuCaps,
break;
}
}
- virStringFreeList(values);
+ virStringListFree(values);
}
return 0;
@@ -3849,13 +3849,13 @@ virQEMUCapsQMPSchemaGetByPath(const char *query,
if (!*elems) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("malformed query string"));
- virStringFreeList(elems);
+ virStringListFree(elems);
return -1;
}
*entry = virQEMUCapsQMPSchemaTraverse(*elems, elems + 1, schema);
- virStringFreeList(elems);
+ virStringListFree(elems);
return 0;
}
@@ -4644,7 +4644,7 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
if (virCPUGetModels(domCaps->arch, &models) >= 0) {
filtered = virDomainCapsCPUModelsFilter(qemuCaps->cpuDefinitions,
(const char **) models);
- virStringFreeList(models);
+ virStringListFree(models);
}
domCaps->cpu.custom = filtered;
}
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index fbac3ea..ccefbe8 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -350,7 +350,7 @@ static void virQEMUDriverConfigDispose(void *obj)
virQEMUDriverConfigPtr cfg = obj;
- virStringFreeList(cfg->cgroupDeviceACL);
+ virStringListFree(cfg->cgroupDeviceACL);
VIR_FREE(cfg->configBaseDir);
VIR_FREE(cfg->configDir);
@@ -392,7 +392,7 @@ static void virQEMUDriverConfigDispose(void *obj)
VIR_FREE(cfg->dumpImageFormat);
VIR_FREE(cfg->autoDumpPath);
- virStringFreeList(cfg->securityDriverNames);
+ virStringListFree(cfg->securityDriverNames);
VIR_FREE(cfg->lockManagerName);
@@ -801,9 +801,9 @@ int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg,
ret = 0;
cleanup:
- virStringFreeList(controllers);
- virStringFreeList(hugetlbfs);
- virStringFreeList(nvram);
+ virStringListFree(controllers);
+ virStringListFree(hugetlbfs);
+ virStringListFree(nvram);
VIR_FREE(corestr);
VIR_FREE(user);
VIR_FREE(group);
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 137d4d5..47332a8 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1549,7 +1549,7 @@ qemuDomainObjPrivateFree(void *data)
VIR_FREE(priv->lockState);
VIR_FREE(priv->origname);
- virStringFreeList(priv->qemuDevices);
+ virStringListFree(priv->qemuDevices);
virChrdevFree(priv->devs);
/* This should never be non-NULL if we get here, but just in case... */
@@ -1963,7 +1963,7 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
priv->monConfig = NULL;
VIR_FREE(nodes);
VIR_FREE(tmp);
- virStringFreeList(priv->qemuDevices);
+ virStringListFree(priv->qemuDevices);
priv->qemuDevices = NULL;
virObjectUnref(qemuCaps);
virObjectUnref(caps);
@@ -5263,7 +5263,7 @@ qemuDomainUpdateDeviceList(virQEMUDriverPtr driver,
if (rc < 0)
return -1;
- virStringFreeList(priv->qemuDevices);
+ virStringListFree(priv->qemuDevices);
priv->qemuDevices = aliases;
return 0;
}
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index fdfe912..76f965d 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -1383,7 +1383,7 @@ qemuGetSchedInfo(unsigned long long *cpuWait,
cleanup:
VIR_FREE(data);
VIR_FREE(proc);
- virStringFreeList(lines);
+ virStringListFree(lines);
return ret;
}
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 90d74d5..03a5e1e 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -4987,7 +4987,7 @@ int qemuMonitorJSONGetCommands(qemuMonitorPtr mon,
cleanup:
- virStringFreeList(commandlist);
+ virStringListFree(commandlist);
virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
@@ -5051,7 +5051,7 @@ int qemuMonitorJSONGetEvents(qemuMonitorPtr mon,
eventlist = NULL;
cleanup:
- virStringFreeList(eventlist);
+ virStringListFree(eventlist);
virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
@@ -5173,7 +5173,7 @@ qemuMonitorJSONGetCommandLineOptionParameters(qemuMonitorPtr mon,
if (!qemuMonitorGetOptions(mon))
qemuMonitorSetOptions(mon, virJSONValueNewArray());
- virStringFreeList(paramlist);
+ virStringListFree(paramlist);
virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
@@ -5276,7 +5276,7 @@ int qemuMonitorJSONGetObjectTypes(qemuMonitorPtr mon,
typelist = NULL;
cleanup:
- virStringFreeList(typelist);
+ virStringListFree(typelist);
virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
@@ -5577,7 +5577,7 @@ int qemuMonitorJSONGetObjectProps(qemuMonitorPtr mon,
proplist = NULL;
cleanup:
- virStringFreeList(proplist);
+ virStringListFree(proplist);
virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
@@ -5683,7 +5683,7 @@ qemuMonitorJSONGetMigrationCapabilities(qemuMonitorPtr mon,
list = NULL;
cleanup:
- virStringFreeList(list);
+ virStringListFree(list);
virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
@@ -5701,9 +5701,9 @@ qemuMonitorJSONGetMigrationCapability(qemuMonitorPtr mon,
if (qemuMonitorJSONGetMigrationCapabilities(mon, &capsList) < 0)
return -1;
- ret = virStringArrayHasString((const char **) capsList, cap);
+ ret = virStringListHasString((const char **) capsList, cap);
- virStringFreeList(capsList);
+ virStringListFree(capsList);
return ret;
}
@@ -6067,7 +6067,7 @@ qemuMonitorJSONGetStringArray(qemuMonitorPtr mon, const char *qmpCmd,
list = NULL;
cleanup:
- virStringFreeList(list);
+ virStringListFree(list);
virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
index 4692d53..a2a5885 100644
--- a/src/qemu/qemu_monitor_text.c
+++ b/src/qemu/qemu_monitor_text.c
@@ -971,15 +971,15 @@ qemuMonitorTextGetAllBlockStatsInfo(qemuMonitorPtr mon,
goto cleanup;
stats = NULL;
- virStringFreeList(values);
+ virStringListFree(values);
values = NULL;
}
ret = maxstats;
cleanup:
- virStringFreeList(lines);
- virStringFreeList(values);
+ virStringListFree(lines);
+ virStringListFree(values);
VIR_FREE(stats);
VIR_FREE(info);
return ret;
diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
index cfebcc7..405e655 100644
--- a/src/qemu/qemu_parse_command.c
+++ b/src/qemu/qemu_parse_command.c
@@ -360,7 +360,7 @@ static int qemuStringToArgvEnv(const char *args,
error:
VIR_FREE(progenv);
VIR_FREE(progargv);
- virStringFreeList(arglist);
+ virStringListFree(arglist);
return -1;
}
@@ -1588,7 +1588,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
case VIR_DOMAIN_HYPERV_LAST:
break;
}
- virStringFreeList(hv_tokens);
+ virStringListFree(hv_tokens);
hv_tokens = NULL;
} else if (STREQ(tokens[i], "kvm=off")) {
dom->features[VIR_DOMAIN_FEATURE_KVM] = VIR_TRISTATE_SWITCH_ON;
@@ -1619,8 +1619,8 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
cleanup:
VIR_FREE(model);
- virStringFreeList(tokens);
- virStringFreeList(hv_tokens);
+ virStringListFree(tokens);
+ virStringListFree(hv_tokens);
return ret;
syntax:
@@ -2196,7 +2196,7 @@ qemuParseCommandLine(virCapsPtr caps,
def->keywrap->dea = VIR_TRISTATE_SWITCH_ABSENT;
}
}
- virStringFreeList(list);
+ virStringListFree(list);
list = NULL;
} else if (STREQ(arg, "-serial")) {
WANT_VALUE();
@@ -2658,7 +2658,7 @@ qemuParseCommandLine(virCapsPtr caps,
virDomainDiskDefFree(disk);
qemuDomainCmdlineDefFree(cmd);
virDomainDefFree(def);
- virStringFreeList(list);
+ virStringListFree(list);
VIR_FREE(nics);
if (monConfig) {
virDomainChrSourceDefFree(*monConfig);
@@ -2688,8 +2688,8 @@ virDomainDefPtr qemuParseCommandLineString(virCapsPtr caps,
pidfile, monConfig, monJSON);
cleanup:
- virStringFreeList(progargv);
- virStringFreeList(progenv);
+ virStringListFree(progargv);
+ virStringListFree(progenv);
return def;
}
@@ -2736,7 +2736,7 @@ static int qemuParseProcFileStrings(int pid_value,
cleanup:
if (ret < 0)
- virStringFreeList(str);
+ virStringListFree(str);
VIR_FREE(data);
VIR_FREE(path);
return ret;
@@ -2780,7 +2780,7 @@ virDomainDefPtr qemuParseCommandLinePid(virCapsPtr caps,
cleanup:
VIR_FREE(exepath);
- virStringFreeList(progargv);
- virStringFreeList(progenv);
+ virStringListFree(progargv);
+ virStringListFree(progenv);
return def;
}
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index f8f379a..ab0c2c8 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3164,7 +3164,7 @@ qemuProcessUpdateDevices(virQEMUDriverPtr driver,
qemuDevices = (const char **) priv->qemuDevices;
if ((tmp = old)) {
while (*tmp) {
- if (!virStringArrayHasString(qemuDevices, *tmp) &&
+ if (!virStringListHasString(qemuDevices, *tmp) &&
virDomainDefFindDevice(vm->def, *tmp, &dev, false) == 0 &&
qemuDomainRemoveDevice(driver, vm, &dev) < 0) {
goto cleanup;
@@ -3175,7 +3175,7 @@ qemuProcessUpdateDevices(virQEMUDriverPtr driver,
ret = 0;
cleanup:
- virStringFreeList(old);
+ virStringListFree(old);
return ret;
}
@@ -5085,7 +5085,7 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
ret = 0;
cleanup:
- virStringFreeListCount(models, nmodels);
+ virStringListFreeCount(models, nmodels);
return ret;
}
@@ -6067,7 +6067,7 @@ void qemuProcessStop(virQEMUDriverPtr driver,
VIR_FREE(vm->def->seclabels[i]->imagelabel);
}
- virStringFreeList(priv->qemuDevices);
+ virStringListFree(priv->qemuDevices);
priv->qemuDevices = NULL;
qemuHostdevReAttachDomainDevices(driver, vm->def);
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index db2bdd4..8880520 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -6221,7 +6221,7 @@ remoteConnectGetCPUModelNames(virConnectPtr conn,
rv = ret.ret;
cleanup:
- virStringFreeList(retmodels);
+ virStringListFree(retmodels);
xdr_free((xdrproc_t) xdr_remote_connect_get_cpu_model_names_ret, (char *) &ret);
diff --git a/src/storage/storage_backend_sheepdog.c b/src/storage/storage_backend_sheepdog.c
index 001d16f..ad2d756 100644
--- a/src/storage/storage_backend_sheepdog.c
+++ b/src/storage/storage_backend_sheepdog.c
@@ -173,7 +173,7 @@ virStorageBackendSheepdogRefreshAllVol(virConnectPtr conn ATTRIBUTE_UNUSED,
goto cleanup;
}
- virStringFreeList(cells);
+ virStringListFree(cells);
cells = NULL;
}
@@ -181,8 +181,8 @@ virStorageBackendSheepdogRefreshAllVol(virConnectPtr conn ATTRIBUTE_UNUSED,
cleanup:
virCommandFree(cmd);
- virStringFreeList(lines);
- virStringFreeList(cells);
+ virStringListFree(lines);
+ virStringListFree(cells);
VIR_FREE(output);
return ret;
}
diff --git a/src/storage/storage_backend_zfs.c b/src/storage/storage_backend_zfs.c
index a3477e2..3a43be4 100644
--- a/src/storage/storage_backend_zfs.c
+++ b/src/storage/storage_backend_zfs.c
@@ -168,8 +168,8 @@ virStorageBackendZFSParseVol(virStoragePoolObjPtr pool,
ret = 0;
cleanup:
- virStringFreeList(tokens);
- virStringFreeList(name_tokens);
+ virStringListFree(tokens);
+ virStringListFree(name_tokens);
if (is_new_vol)
virStorageVolDefFree(volume);
return ret;
@@ -219,7 +219,7 @@ virStorageBackendZFSFindVols(virStoragePoolObjPtr pool,
cleanup:
virCommandFree(cmd);
- virStringFreeList(lines);
+ virStringListFree(lines);
VIR_FREE(volumes_list);
return 0;
@@ -264,7 +264,7 @@ virStorageBackendZFSRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED,
if (STREQ(lines[i], ""))
continue;
- virStringFreeList(tokens);
+ virStringListFree(tokens);
if (!(tokens = virStringSplitCount(lines[i], "\t", 0, &count)))
goto cleanup;
@@ -294,8 +294,8 @@ virStorageBackendZFSRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED,
cleanup:
virCommandFree(cmd);
- virStringFreeList(lines);
- virStringFreeList(tokens);
+ virStringListFree(lines);
+ virStringListFree(tokens);
VIR_FREE(zpool_props);
return 0;
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index 9900596..df65807 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -3392,7 +3392,7 @@ virStorageAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
ret = 0;
cleanup:
- virStringFreeList(tokens);
+ virStringListFree(tokens);
return ret;
}
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 9232994..f151193 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -863,14 +863,14 @@ virCgroupGetValueForBlkDev(virCgroupPtr group,
if (!(lines = virStringSplit(str, "\n", -1)))
goto error;
- if (VIR_STRDUP(*value, virStringGetFirstWithPrefix(lines, prefix)) < 0)
+ if (VIR_STRDUP(*value, virStringListGetFirstWithPrefix(lines, prefix)) < 0)
goto error;
ret = 0;
error:
VIR_FREE(str);
VIR_FREE(prefix);
- virStringFreeList(lines);
+ virStringListFree(lines);
return ret;
}
@@ -1275,13 +1275,13 @@ virCgroupSetPartitionSuffix(const char *path, char **res)
goto cleanup;
}
- if (!(*res = virStringJoin((const char **)tokens, "/")))
+ if (!(*res = virStringListJoin((const char **)tokens, "/")))
goto cleanup;
ret = 0;
cleanup:
- virStringFreeList(tokens);
+ virStringListFree(tokens);
return ret;
}
diff --git a/src/util/vircommand.c b/src/util/vircommand.c
index 2a59bd1..e1bbc05 100644
--- a/src/util/vircommand.c
+++ b/src/util/vircommand.c
@@ -3026,7 +3026,7 @@ virCommandRunRegex(virCommandPtr cmd,
ret = 0;
cleanup:
- virStringFreeList(lines);
+ virStringListFree(lines);
VIR_FREE(outbuf);
if (groups) {
for (j = 0; j < totgroups; j++)
diff --git a/src/util/virconf.c b/src/util/virconf.c
index 3e49f41..a85a307 100644
--- a/src/util/virconf.c
+++ b/src/util/virconf.c
@@ -983,7 +983,7 @@ int virConfGetValueStringList(virConfPtr conf,
if (!cval)
return 0;
- virStringFreeList(*values);
+ virStringListFree(*values);
*values = NULL;
switch (cval->type) {
@@ -1003,7 +1003,7 @@ int virConfGetValueStringList(virConfPtr conf,
for (len = 0, eval = cval->list; eval; len++, eval = eval->next) {
if (VIR_STRDUP((*values)[len], eval->str) < 0) {
- virStringFreeList(*values);
+ virStringListFree(*values);
*values = NULL;
return -1;
}
diff --git a/src/util/virfile.c b/src/util/virfile.c
index f006abf..1fb89ce 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -1877,7 +1877,7 @@ virFileGetMountSubtreeImpl(const char *mtabpath,
cleanup:
if (ret < 0)
- virStringFreeList(mounts);
+ virStringListFree(mounts);
endmntent(procmnt);
return ret;
}
@@ -1906,7 +1906,7 @@ virFileGetMountSubtreeImpl(const char *mtabpath ATTRIBUTE_UNUSED,
* the path @prefix, sorted from shortest to longest path.
*
* The @mountsret array will be NULL terminated and should
- * be freed with virStringFreeList
+ * be freed with virStringListFree
*
* Returns 0 on success, -1 on error
*/
@@ -1930,7 +1930,7 @@ int virFileGetMountSubtree(const char *mtabpath,
* ie opposite order to which they appear in @mtabpath
*
* The @mountsret array will be NULL terminated and should
- * be freed with virStringFreeList
+ * be freed with virStringListFree
*
* Returns 0 on success, -1 on error
*/
diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c
index f26fd86..3f97618 100644
--- a/src/util/virfirewall.c
+++ b/src/util/virfirewall.c
@@ -878,7 +878,7 @@ virFirewallApplyRule(virFirewallPtr firewall,
ret = 0;
cleanup:
- virStringFreeList(lines);
+ virStringListFree(lines);
VIR_FREE(output);
return ret;
}
diff --git a/src/util/virfirmware.c b/src/util/virfirmware.c
index 6b20c06..86f8b68 100644
--- a/src/util/virfirmware.c
+++ b/src/util/virfirmware.c
@@ -87,7 +87,7 @@ virFirmwareParse(const char *str, virFirmwarePtr firmware)
ret = 0;
cleanup:
- virStringFreeList(token);
+ virStringListFree(token);
return ret;
}
@@ -132,6 +132,6 @@ virFirmwareParseList(const char *list,
ret = 0;
cleanup:
- virStringFreeList(token);
+ virStringListFree(token);
return ret;
}
diff --git a/src/util/virlog.c b/src/util/virlog.c
index 8f831fc..77bc6b3 100644
--- a/src/util/virlog.c
+++ b/src/util/virlog.c
@@ -1530,7 +1530,7 @@ virLogParseOutput(const char *src)
}
cleanup:
- virStringFreeList(tokens);
+ virStringListFree(tokens);
return ret;
}
@@ -1607,7 +1607,7 @@ virLogParseFilter(const char *src)
goto cleanup;
cleanup:
- virStringFreeList(tokens);
+ virStringListFree(tokens);
return ret;
}
@@ -1667,7 +1667,7 @@ virLogParseOutputs(const char *src, virLogOutputPtr **outputs)
*outputs = list;
list = NULL;
cleanup:
- virStringFreeList(strings);
+ virStringListFree(strings);
return ret;
}
@@ -1717,7 +1717,7 @@ virLogParseFilters(const char *src, virLogFilterPtr **filters)
*filters = list;
list = NULL;
cleanup:
- virStringFreeList(strings);
+ virStringListFree(strings);
return ret;
}
diff --git a/src/util/virpolkit.c b/src/util/virpolkit.c
index e7e46b8..c735ca9 100644
--- a/src/util/virpolkit.c
+++ b/src/util/virpolkit.c
@@ -137,7 +137,7 @@ int virPolkitCheckAuth(const char *actionid,
}
cleanup:
- virStringFreeListCount(retdetails, nretdetails);
+ virStringListFreeCount(retdetails, nretdetails);
return ret;
}
diff --git a/src/util/virprocess.c b/src/util/virprocess.c
index 3cacc89..7db97bc 100644
--- a/src/util/virprocess.c
+++ b/src/util/virprocess.c
@@ -1014,7 +1014,7 @@ int virProcessGetStartTime(pid_t pid,
ret = 0;
cleanup:
- virStringFreeList(tokens);
+ virStringListFree(tokens);
VIR_FREE(filename);
VIR_FREE(buf);
return ret;
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index f6a1b5d..1011bd0 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -1476,7 +1476,7 @@ virStorageFileParseChainIndex(const char *diskTarget,
*chainIndex = idx;
cleanup:
- virStringFreeList(strings);
+ virStringListFree(strings);
return ret;
}
@@ -2350,7 +2350,7 @@ virStorageSourceParseBackingURI(virStorageSourcePtr src,
cleanup:
virURIFree(uri);
- virStringFreeList(scheme);
+ virStringListFree(scheme);
return ret;
}
@@ -2385,8 +2385,8 @@ virStorageSourceRBDAddHost(virStorageSourcePtr src,
parts = virStringSplit(hostport, "\\:", 0);
if (!parts)
goto error;
- src->hosts[src->nhosts-1].name = virStringJoin((const char **)parts, ":");
- virStringFreeList(parts);
+ src->hosts[src->nhosts-1].name = virStringListJoin((const char **)parts, ":");
+ virStringListFree(parts);
if (!src->hosts[src->nhosts-1].name)
goto error;
@@ -2576,7 +2576,7 @@ virStorageSourceParseNBDColonString(const char *nbdstr,
ret = 0;
cleanup:
- virStringFreeList(backing);
+ virStringListFree(backing);
return ret;
}
@@ -3272,7 +3272,7 @@ virStorageFileCanonicalizeInjectSymlink(const char *path,
ret = 0;
cleanup:
- virStringFreeListCount(tmp, ntmp);
+ virStringListFreeCount(tmp, ntmp);
return ret;
}
@@ -3420,7 +3420,7 @@ virStorageFileCanonicalizePath(const char *path,
cleanup:
virHashFree(cycle);
- virStringFreeListCount(components, ncomponents);
+ virStringListFreeCount(components, ncomponents);
VIR_FREE(linkpath);
VIR_FREE(currentpath);
@@ -3534,6 +3534,6 @@ virStorageFileCheckCompat(const char *compat)
ret = 0;
cleanup:
- virStringFreeList(version);
+ virStringListFree(version);
return ret;
}
diff --git a/src/util/virstring.c b/src/util/virstring.c
index f93d6b1..479b19c 100644
--- a/src/util/virstring.c
+++ b/src/util/virstring.c
@@ -38,7 +38,7 @@
VIR_LOG_INIT("util.string");
/*
- * The following virStringSplit & virStringJoin methods
+ * The following virStringSplit & virStringListJoin methods
* are derived from g_strsplit / g_strjoin in glib2,
* also available under the LGPLv2+ license terms
*/
@@ -66,7 +66,7 @@ VIR_LOG_INIT("util.string");
* before calling virStringSplit().
*
* Return value: a newly-allocated NULL-terminated array of strings. Use
- * virStringFreeList() to free it.
+ * virStringListFree() to free it.
*/
char **
virStringSplitCount(const char *string,
@@ -137,7 +137,7 @@ virStringSplit(const char *string,
/**
- * virStringJoin:
+ * virStringListJoin:
* @strings: a NULL-terminated array of strings to join
* @delim: a string to insert between each of the strings
*
@@ -148,8 +148,8 @@ virStringSplit(const char *string,
* Returns: a newly-allocated string containing all of the strings joined
* together, with @delim between them
*/
-char *virStringJoin(const char **strings,
- const char *delim)
+char *virStringListJoin(const char **strings,
+ const char *delim)
{
char *ret;
virBuffer buf = VIR_BUFFER_INITIALIZER;
@@ -169,13 +169,13 @@ char *virStringJoin(const char **strings,
/**
- * virStringFreeList:
+ * virStringListFree:
* @str_array: a NULL-terminated array of strings to free
*
* Frees a NULL-terminated array of strings, and the array itself.
- * If called on a NULL value, virStringFreeList() simply returns.
+ * If called on a NULL value, virStringListFree() simply returns.
*/
-void virStringFreeList(char **strings)
+void virStringListFree(char **strings)
{
char **tmp = strings;
while (tmp && *tmp) {
@@ -187,14 +187,14 @@ void virStringFreeList(char **strings)
/**
- * virStringFreeListCount:
+ * virStringListFreeCount:
* @strings: array of strings to free
* @count: number of elements in the array
*
* Frees a string array of @count length.
*/
void
-virStringFreeListCount(char **strings,
+virStringListFreeCount(char **strings,
size_t count)
{
size_t i;
@@ -210,8 +210,8 @@ virStringFreeListCount(char **strings,
bool
-virStringArrayHasString(const char **strings,
- const char *needle)
+virStringListHasString(const char **strings,
+ const char *needle)
{
size_t i = 0;
@@ -227,7 +227,7 @@ virStringArrayHasString(const char **strings,
}
char *
-virStringGetFirstWithPrefix(char **strings, const char *prefix)
+virStringListGetFirstWithPrefix(char **strings, const char *prefix)
{
size_t i = 0;
@@ -814,7 +814,7 @@ int virStringSortRevCompare(const void *a, const void *b)
* @result: pointer to an array to be filled with NULL terminated list of matches
*
* Performs a POSIX extended regex search against a string and return all matching substrings.
- * The @result value should be freed with virStringFreeList() when no longer
+ * The @result value should be freed with virStringListFree() when no longer
* required.
*
* @code
@@ -834,7 +834,7 @@ int virStringSortRevCompare(const void *a, const void *b)
* // matches[2] == "bbb3c75c-d60f-43b0-b802-fd56b84a4222"
* // matches[3] == NULL;
*
- * virStringFreeList(matches);
+ * virStringListFree(matches);
* @endcode
*
* Returns: -1 on error, or number of matches
@@ -902,7 +902,7 @@ virStringSearch(const char *str,
cleanup:
regfree(&re);
if (ret < 0) {
- virStringFreeList(*matches);
+ virStringListFree(*matches);
*matches = NULL;
}
return ret;
diff --git a/src/util/virstring.h b/src/util/virstring.h
index 8854d5f..9826fc9 100644
--- a/src/util/virstring.h
+++ b/src/util/virstring.h
@@ -37,15 +37,15 @@ char **virStringSplit(const char *string,
size_t max_tokens)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
-char *virStringJoin(const char **strings,
- const char *delim)
+char *virStringListJoin(const char **strings,
+ const char *delim)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
-void virStringFreeList(char **strings);
-void virStringFreeListCount(char **strings, size_t count);
+void virStringListFree(char **strings);
+void virStringListFreeCount(char **strings, size_t count);
-bool virStringArrayHasString(const char **strings, const char *needle);
-char *virStringGetFirstWithPrefix(char **strings, const char *prefix)
+bool virStringListHasString(const char **strings, const char *needle);
+char *virStringListGetFirstWithPrefix(char **strings, const char *prefix)
ATTRIBUTE_NONNULL(2);
char *virArgvToString(const char *const *argv);
diff --git a/src/util/viruri.c b/src/util/viruri.c
index 2f252ac..b80d924 100644
--- a/src/util/viruri.c
+++ b/src/util/viruri.c
@@ -386,7 +386,7 @@ virURIResolveAlias(virConfPtr conf, const char *alias, char **uri)
if (aliases && *aliases) {
ret = virURIFindAliasMatch(aliases, alias, uri);
- virStringFreeList(aliases);
+ virStringListFree(aliases);
} else {
ret = 0;
}
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index 7ae3dc7..af8a9f7 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -4933,7 +4933,7 @@ vboxSnapshotRedefine(virDomainPtr dom,
tmp = virStringReplace(newSnapshotPtr->storageController,
searchResultTab[it],
uuidReplacing);
- virStringFreeList(searchResultTab);
+ virStringListFree(searchResultTab);
searchResultTab = NULL;
VIR_FREE(newSnapshotPtr->storageController);
if (!tmp)
@@ -5341,9 +5341,9 @@ vboxSnapshotRedefine(virDomainPtr dom,
VIR_FREE(currentSnapshotXmlFilePath);
VBOX_UTF16_FREE(machineNameUtf16);
VBOX_UTF8_FREE(machineName);
- virStringFreeList(realReadOnlyDisksPath);
- virStringFreeList(realReadWriteDisksPath);
- virStringFreeList(searchResultTab);
+ virStringListFree(realReadOnlyDisksPath);
+ virStringListFree(realReadWriteDisksPath);
+ virStringListFree(searchResultTab);
VIR_FREE(newSnapshotPtr);
VIR_FREE(machineLocationPath);
VIR_FREE(nameTmpUse);
@@ -7187,7 +7187,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot)
VBOX_RELEASE(machine);
VBOX_UTF16_FREE(settingsFilePathUtf16);
VBOX_UTF8_FREE(settingsFilepath);
- virStringFreeList(searchResultTab);
+ virStringListFree(searchResultTab);
VIR_FREE(snapshotMachineDesc);
VBOX_UTF16_FREE(machineNameUtf16);
VBOX_UTF8_FREE(machineName);
diff --git a/src/vbox/vbox_snapshot_conf.c b/src/vbox/vbox_snapshot_conf.c
index e1307e1..8bf7ef3 100644
--- a/src/vbox/vbox_snapshot_conf.c
+++ b/src/vbox/vbox_snapshot_conf.c
@@ -107,7 +107,7 @@ virVBoxSnapshotConfCreateVBoxSnapshotConfHardDiskPtr(xmlNodePtr diskNode,
VIR_FREE(nodes);
VIR_FREE(location);
VIR_FREE(tmp);
- virStringFreeList(searchTabResult);
+ virStringListFree(searchTabResult);
if (result < 0) {
virVboxSnapshotConfHardDiskFree(hardDisk);
hardDisk = NULL;
@@ -276,7 +276,7 @@ virVBoxSnapshotConfRetrieveSnapshot(xmlNodePtr snapshotNode,
}
VIR_FREE(nodes);
VIR_FREE(uuid);
- virStringFreeList(searchTabResult);
+ virStringListFree(searchTabResult);
return snapshot;
}
@@ -458,8 +458,8 @@ virVBoxSnapshotConfSerializeSnapshot(xmlNodePtr node,
xmlUnlinkNode(snapshotsNode);
xmlFreeNode(snapshotsNode);
}
- virStringFreeList(firstRegex);
- virStringFreeList(secondRegex);
+ virStringListFree(firstRegex);
+ virStringListFree(secondRegex);
VIR_FREE(uuid);
VIR_FREE(timeStamp);
return result;
@@ -739,7 +739,7 @@ virVBoxSnapshotConfLoadVboxFile(const char *filePath,
VIR_FREE(currentStateModifiedString);
VIR_FREE(currentSnapshotAttribute);
- virStringFreeList(searchResultTab);
+ virStringListFree(searchResultTab);
if (ret < 0) {
virVBoxSnapshotConfMachineFree(machineDescription);
machineDescription = NULL;
@@ -1235,8 +1235,8 @@ virVBoxSnapshotConfSaveVboxFile(virVBoxSnapshotConfMachinePtr machine,
xmlFreeDoc(xml);
- virStringFreeList(firstRegex);
- virStringFreeList(secondRegex);
+ virStringListFree(firstRegex);
+ virStringListFree(secondRegex);
return ret;
}
@@ -1324,7 +1324,7 @@ virVBoxSnapshotConfGetRWDisksPathsFromLibvirtXML(const char *filePath,
xmlFreeDoc(xml);
xmlXPathFreeContext(xPathContext);
if (result < 0) {
- virStringFreeList(ret);
+ virStringListFree(ret);
nodeSize = -1;
} else {
*rwDisksPath = ret;
@@ -1385,7 +1385,7 @@ virVBoxSnapshotConfGetRODisksPathsFromLibvirtXML(const char *filePath,
xmlFreeDoc(xml);
xmlXPathFreeContext(xPathContext);
if (result < 0) {
- virStringFreeList(ret);
+ virStringListFree(ret);
nodeSize = -1;
} else {
*roDisksPath = ret;
diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
index d61bccf..d7b754e 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -730,7 +730,7 @@ prlsdkGetFSInfo(PRL_HANDLE prldisk,
cleanup:
VIR_FREE(buf);
- virStringFreeList(matches);
+ virStringListFree(matches);
return ret;
}
diff --git a/tests/domainsnapshotxml2xmltest.c b/tests/domainsnapshotxml2xmltest.c
index 650c565..f5fec47 100644
--- a/tests/domainsnapshotxml2xmltest.c
+++ b/tests/domainsnapshotxml2xmltest.c
@@ -65,7 +65,7 @@ testFilterXML(char *xml)
cleanup:
virBufferFreeAndReset(&buf);
- virStringFreeList(xmlLines);
+ virStringListFree(xmlLines);
return ret;
}
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index a7d4d5a..f729b2e 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -591,7 +591,7 @@ testQemuMonitorJSONGetTPMModels(const void *data)
cleanup:
qemuMonitorTestFree(test);
- virStringFreeList(tpmmodels);
+ virStringListFree(tpmmodels);
return ret;
}
@@ -651,7 +651,7 @@ testQemuMonitorJSONGetCommandLineOptionParameters(const void *data)
#undef CHECK
- virStringFreeList(params);
+ virStringListFree(params);
params = NULL;
/* present but empty */
@@ -677,7 +677,7 @@ testQemuMonitorJSONGetCommandLineOptionParameters(const void *data)
goto cleanup;
}
- virStringFreeList(params);
+ virStringListFree(params);
params = NULL;
/* no such option */
@@ -707,7 +707,7 @@ testQemuMonitorJSONGetCommandLineOptionParameters(const void *data)
cleanup:
qemuMonitorTestFree(test);
- virStringFreeList(params);
+ virStringListFree(params);
return ret;
}
@@ -1151,20 +1151,20 @@ testQemuMonitorJSONGetDeviceAliases(const void *data)
ret = 0;
for (alias = (const char **) aliases; *alias; alias++) {
- if (!virStringArrayHasString(expected, *alias)) {
+ if (!virStringListHasString(expected, *alias)) {
fprintf(stderr, "got unexpected device alias '%s'\n", *alias);
ret = -1;
}
}
for (alias = expected; *alias; alias++) {
- if (!virStringArrayHasString((const char **) aliases, *alias)) {
+ if (!virStringListHasString((const char **) aliases, *alias)) {
fprintf(stderr, "missing expected alias '%s'\n", *alias);
ret = -1;
}
}
cleanup:
- virStringFreeList(aliases);
+ virStringListFree(aliases);
qemuMonitorTestFree(test);
return ret;
}
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 1954696..e0ef47f 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -160,7 +160,7 @@ fakeStorageVolLookupByName(virStoragePoolPtr pool,
NULL, NULL);
cleanup:
- virStringFreeList(volinfo);
+ virStringListFree(volinfo);
return ret;
fallback:
diff --git a/tests/vboxsnapshotxmltest.c b/tests/vboxsnapshotxmltest.c
index fa7bbfe..f84d199 100644
--- a/tests/vboxsnapshotxmltest.c
+++ b/tests/vboxsnapshotxmltest.c
@@ -47,7 +47,7 @@ testFilterXML(char *xml)
cleanup:
virBufferFreeAndReset(&buf);
- virStringFreeList(xmlLines);
+ virStringListFree(xmlLines);
return ret;
}
diff --git a/tests/virconftest.c b/tests/virconftest.c
index dbf6ed6..4fc7993 100644
--- a/tests/virconftest.c
+++ b/tests/virconftest.c
@@ -394,7 +394,7 @@ static int testConfParseStringList(const void *opaque ATTRIBUTE_UNUSED)
ret = 0;
cleanup:
- virStringFreeList(str);
+ virStringListFree(str);
virConfFree(conf);
return ret;
}
diff --git a/tests/virfiletest.c b/tests/virfiletest.c
index a6458df..05148e9 100644
--- a/tests/virfiletest.c
+++ b/tests/virfiletest.c
@@ -84,7 +84,7 @@ static int testFileGetMountSubtree(const void *opaque)
data->mounts, data->nmounts);
cleanup:
- virStringFreeList(gotmounts);
+ virStringListFree(gotmounts);
return ret;
}
#endif /* ! defined HAVE_MNTENT_H && defined HAVE_GETMNTENT_R */
diff --git a/tests/virpolkittest.c b/tests/virpolkittest.c
index 421ffee..a51dd1c 100644
--- a/tests/virpolkittest.c
+++ b/tests/virpolkittest.c
@@ -124,7 +124,7 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
VIR_FREE(uidkey);
VIR_FREE(actionid);
VIR_FREE(cancellationId);
- virStringFreeListCount(details, detailslen);
+ virStringListFreeCount(details, detailslen);
if (virDBusCreateReply(&reply,
"(bba&{ss})",
diff --git a/tests/virstringtest.c b/tests/virstringtest.c
index f7e1e92..a11d7c5 100644
--- a/tests/virstringtest.c
+++ b/tests/virstringtest.c
@@ -94,7 +94,7 @@ static int testSplit(const void *args)
ret = 0;
cleanup:
- virStringFreeList(got);
+ virStringListFree(got);
return ret;
}
@@ -106,7 +106,7 @@ static int testJoin(const void *args)
char *got;
int ret = -1;
- if (!(got = virStringJoin(data->tokens, data->delim))) {
+ if (!(got = virStringListJoin(data->tokens, data->delim))) {
VIR_DEBUG("Got no result");
return -1;
}
@@ -354,7 +354,7 @@ testStringSearch(const void *opaque)
ret = 0;
cleanup:
- virStringFreeList(matches);
+ virStringListFree(matches);
return ret;
}
@@ -502,7 +502,7 @@ testStringToLong(const void *opaque)
/* The point of this test is to check whether all members of the array are
* freed. The test has to be checked using valgrind. */
static int
-testVirStringFreeListCount(const void *opaque ATTRIBUTE_UNUSED)
+testVirStringListFreeCount(const void *opaque ATTRIBUTE_UNUSED)
{
char **list;
@@ -513,7 +513,7 @@ testVirStringFreeListCount(const void *opaque ATTRIBUTE_UNUSED)
ignore_value(VIR_STRDUP(list[2], "test2"));
ignore_value(VIR_STRDUP(list[3], "test3"));
- virStringFreeListCount(list, 4);
+ virStringListFreeCount(list, 4);
return 0;
}
@@ -779,8 +779,8 @@ mymain(void)
TEST_STRTOL("-18446744073709551616", NULL, 0, -1, 0U, -1,
0LL, -1, 0ULL, -1);
- /* test virStringFreeListCount */
- if (virTestRun("virStringFreeListCount", testVirStringFreeListCount,
+ /* test virStringListFreeCount */
+ if (virTestRun("virStringListFreeCount", testVirStringListFreeCount,
NULL) < 0)
ret = -1;
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 242f15e..e359bfc 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -878,7 +878,7 @@ virshParseRateStr(vshControl *ctl,
ret = 0;
cleanup:
- virStringFreeList(tok);
+ virStringListFree(tok);
return ret;
}
@@ -4043,14 +4043,14 @@ cmdStartGetFDs(vshControl *ctl,
fds[nfds - 1] = fd;
}
- virStringFreeList(fdlist);
+ virStringListFree(fdlist);
*fdsret = fds;
*nfdsret = nfds;
return 0;
error:
- virStringFreeList(fdlist);
+ virStringListFree(fdlist);
VIR_FREE(fds);
return -1;
}
@@ -5570,7 +5570,7 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd)
cleanup:
if (dom)
virDomainFree(dom);
- virStringFreeList(modes);
+ virStringListFree(modes);
return ret;
}
@@ -5650,7 +5650,7 @@ cmdReboot(vshControl *ctl, const vshCmd *cmd)
cleanup:
if (dom)
virDomainFree(dom);
- virStringFreeList(modes);
+ virStringListFree(modes);
return ret;
}
@@ -8827,7 +8827,7 @@ virshParseEventStr(const char *event,
ret = 0;
cleanup:
- virStringFreeList(tok);
+ virStringListFree(tok);
return ret;
}
diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c
index 9446664..f76cade 100644
--- a/tools/virsh-nodedev.c
+++ b/tools/virsh-nodedev.c
@@ -156,7 +156,7 @@ cmdNodeDeviceDestroy(vshControl *ctl, const vshCmd *cmd)
ret = true;
cleanup:
- virStringFreeList(arr);
+ virStringListFree(arr);
if (dev)
virNodeDeviceFree(dev);
return ret;
@@ -498,7 +498,7 @@ cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
}
cleanup:
- virStringFreeList(caps);
+ virStringListFree(caps);
virshNodeDeviceListFree(list);
return ret;
}
@@ -567,7 +567,7 @@ cmdNodeDeviceDumpXML(vshControl *ctl, const vshCmd *cmd)
ret = true;
cleanup:
- virStringFreeList(arr);
+ virStringListFree(arr);
VIR_FREE(xml);
if (device)
virNodeDeviceFree(device);
diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c
index 7118a6c..8313be8 100644
--- a/tools/virsh-pool.c
+++ b/tools/virsh-pool.c
@@ -1125,7 +1125,7 @@ cmdPoolList(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
for (i = 0; i < npoolTypes; i++) {
if ((poolType = virStoragePoolTypeFromString(poolTypes[i])) < 0) {
vshError(ctl, _("Invalid pool type '%s'"), poolTypes[i]);
- virStringFreeList(poolTypes);
+ virStringListFree(poolTypes);
return false;
}
@@ -1170,7 +1170,7 @@ cmdPoolList(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
break;
}
}
- virStringFreeList(poolTypes);
+ virStringListFree(poolTypes);
}
if (!(list = virshStoragePoolListCollect(ctl, flags)))
diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
index e4d0df7..5c844a5 100644
--- a/tools/virsh-snapshot.c
+++ b/tools/virsh-snapshot.c
@@ -255,7 +255,7 @@ virshParseSnapshotMemspec(vshControl *ctl, virBufferPtr buf, const char *str)
cleanup:
if (ret < 0)
vshError(ctl, _("unable to parse memspec: %s"), str);
- virStringFreeList(array);
+ virStringListFree(array);
return ret;
}
@@ -306,7 +306,7 @@ virshParseSnapshotDiskspec(vshControl *ctl, virBufferPtr buf, const char *str)
cleanup:
if (ret < 0)
vshError(ctl, _("unable to parse diskspec: %s"), str);
- virStringFreeList(array);
+ virStringListFree(array);
return ret;
}
diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-common.c
index 4bfc52a..6faed04 100644
--- a/tools/virt-host-validate-common.c
+++ b/tools/virt-host-validate-common.c
@@ -245,7 +245,7 @@ virBitmapPtr virHostValidateGetCPUFlags(void)
ignore_value(virBitmapSetBit(flags, value));
}
- virStringFreeListCount(tokens, ntokens);
+ virStringListFreeCount(tokens, ntokens);
} while (1);
cleanup:
@@ -345,7 +345,7 @@ static int virHostValidateCGroupSupport(const char *hvname,
matched = true;
}
- virStringFreeListCount(cgroups, ncgroups);
+ virStringListFreeCount(cgroups, ncgroups);
}
VIR_FREE(line);
@@ -394,7 +394,7 @@ static int virHostValidateCGroupMount(const char *hvname,
matched = true;
}
- virStringFreeListCount(opts, nopts);
+ virStringListFreeCount(opts, nopts);
}
endmntent(fp);
if (!matched)
diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c
index a2b32ac..016e2b6 100644
--- a/tools/virt-login-shell.c
+++ b/tools/virt-login-shell.c
@@ -90,7 +90,7 @@ static int virLoginShellAllowedUser(virConfPtr conf,
name, conf_file);
cleanup:
VIR_FREE(gname);
- virStringFreeList(users);
+ virStringListFree(users);
return ret;
}
@@ -308,7 +308,7 @@ main(int argc, char **argv)
if (autoshell) {
tmp = virGetUserShell(uid);
if (tmp) {
- virStringFreeList(shargv);
+ virStringListFree(shargv);
shargvlen = 1;
if (VIR_ALLOC_N(shargv[0], shargvlen + 1) < 0) {
VIR_FREE(tmp);
@@ -394,7 +394,7 @@ main(int argc, char **argv)
virDomainFree(dom);
if (conn)
virConnectClose(conn);
- virStringFreeList(shargv);
+ virStringListFree(shargv);
VIR_FREE(shcmd);
VIR_FREE(term);
VIR_FREE(name);
diff --git a/tools/vsh.c b/tools/vsh.c
index f94eaa3..c1fc041 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -179,7 +179,7 @@ vshNameSorter(const void *a, const void *b)
/*
* Convert the strings separated by ',' into array. The returned
* array is a NULL terminated string list. The caller has to free
- * the array using virStringFreeList or a similar method.
+ * the array using virStringListFree or a similar method.
*
* Returns the length of the filled array on success, or -1
* on error.
@@ -2835,7 +2835,7 @@ vshReadlineParse(const char *text, int state)
return res;
}
res = NULL;
- virStringFreeList(completed_list);
+ virStringListFree(completed_list);
completed_list_index = 0;
}
}
--
2.8.4
2
1
Catch up with changes that have been pushed but didn't include
updates to the NEWS file themselves.
---
Pushed under the "this NEWS file thing will need some time
to catch on" rule.
docs/news.html.in | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/docs/news.html.in b/docs/news.html.in
index 54eb8ad..59bf20d 100644
--- a/docs/news.html.in
+++ b/docs/news.html.in
@@ -46,6 +46,11 @@
List user-visible changes instead of single commits for a better
high-level overview of differences between libvirt releases
</li>
+ <li>website: Modernize layout and branding<br/>
+ The libvirt website looked very cluttered and outdated; it has now
+ been completely overhauled, resulting in a design that's better
+ organized and more pleasant to look at
+ </li>
</ul>
</li>
<li><strong>Bug fixes</strong>
@@ -54,6 +59,8 @@
</li>
<li>Forbid newline character in names of some libvirt objects.
</li>
+ <li>Fix compilation on macOS
+ </li>
</ul>
</li>
</ul>
--
2.7.4
1
0
25 Nov '16
CPU sockets calculation is inconsistent with physical sockets when
Host machine has more than one node. It only calculate the maximum
socket number of all CPU nodes instead of summing up.
For example:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 32
On-line CPU(s) list: 0-31
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2 <------ Host machine has 2 sockets
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 62
Model name: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
Stepping: 4
CPU MHz: 3074.296
BogoMIPS: 5205.76
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 20480K
NUMA node0 CPU(s): 0-7,16-23
NUMA node1 CPU(s): 8-15,24-31
CPU model: x86_64
CPU(s): 32
CPU frequency: 3021 MHz
CPU socket(s): 1 <----- Should be 2 sockets
Core(s) per socket: 8
Thread(s) per core: 2
NUMA cell(s): 2
Memory size: 131833636 KiB
"lscpu" shows host machine has 2 sockets, however "virsh nodeinfo"
only calculate the maximum socket number of all CPU nodes,
This patch fix it by summing sockets in all nodes up.
Signed-off-by: Zhang Zhuoyu <zhangzhuoyu(a)cmss.chinamobile.com>
Signed-off-by: Xiubo Li <lixiubo(a)cmss.chinamobile.com>
---
src/util/virhostcpu.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
index 42a52ca..f2e3b8c 100644
--- a/src/util/virhostcpu.c
+++ b/src/util/virhostcpu.c
@@ -699,9 +699,7 @@ virHostCPUGetInfoPopulateLinux(FILE *cpuinfo,
VIR_FREE(sysfs_cpudir);
*cpus += nodecpus;
-
- if (nodesockets > *sockets)
- *sockets = nodesockets;
+ *sockets += nodesockets;
if (nodecores > *cores)
*cores = nodecores;
@@ -760,8 +758,7 @@ virHostCPUGetInfoPopulateLinux(FILE *cpuinfo,
* the nodeinfo structure isn't designed to carry the full topology so
* we're going to lie about the detected topology to notify the user
* to check the host capabilities for the actual topology. */
- if ((*nodes *
- *sockets *
+ if ((*sockets *
*cores *
*threads) != (*cpus + offline)) {
*nodes = 1;
--
1.8.3.1
2
1