---
src/cpu/cpu_map.c | 21 +++++++++++++++++++--
src/cpu/cpu_map.h | 3 +++
src/libvirt_private.syms | 1 +
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/src/cpu/cpu_map.c b/src/cpu/cpu_map.c
index 0c5ff8a..86bc670 100644
--- a/src/cpu/cpu_map.c
+++ b/src/cpu/cpu_map.c
@@ -32,6 +32,8 @@
#define CPUMAPFILE PKGDATADIR "/cpu_map.xml"
+static char *cpumap;
+
VIR_ENUM_IMPL(cpuMapElement, CPU_MAP_ELEMENT_LAST,
"vendor",
"feature",
@@ -81,6 +83,7 @@ int cpuMapLoad(const char *arch,
char *xpath = NULL;
int ret = -1;
int element;
+ const char *mapfile = (cpumap ? cpumap : CPUMAPFILE);
if (arch == NULL) {
virCPUReportError(VIR_ERR_INTERNAL_ERROR,
@@ -94,10 +97,10 @@ int cpuMapLoad(const char *arch,
return -1;
}
- if ((xml = xmlParseFile(CPUMAPFILE)) == NULL) {
+ if ((xml = xmlParseFile(mapfile)) == NULL) {
virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse CPU map file: %s"),
- CPUMAPFILE);
+ mapfile);
goto cleanup;
}
@@ -139,3 +142,17 @@ no_memory:
virReportOOMError();
goto cleanup;
}
+
+
+int
+cpuMapOverride(const char *path)
+{
+ char *map;
+
+ if (!(map = strdup(path)))
+ return -1;
+
+ VIR_FREE(cpumap);
+ cpumap = map;
+ return 0;
+}
diff --git a/src/cpu/cpu_map.h b/src/cpu/cpu_map.h
index e26c7c1..acf4cc4 100644
--- a/src/cpu/cpu_map.h
+++ b/src/cpu/cpu_map.h
@@ -48,4 +48,7 @@ cpuMapLoad(const char *arch,
cpuMapLoadCallback cb,
void *data);
+extern int
+cpuMapOverride(const char *path);
+
#endif /* __VIR_CPU_MAP_H__ */
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 33e52e2..864652e 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -105,6 +105,7 @@ cpuDecode;
cpuEncode;
cpuGuestData;
cpuHasFeature;
+cpuMapOverride;
cpuNodeData;
cpuUpdate;
--
1.7.3.2