virBufferAddLit(&xml, " </features>\n");
}
- virCPUDefFormatBuf(NULL, &xml, caps->host.cpu, " ",
+ virCPUDefFormatBuf(&xml, caps->host.cpu, " ",
VIR_CPU_FORMAT_EMBEDED);
virBufferAddLit(&xml, " </cpu>\n");
#define VIR_FROM_THIS VIR_FROM_CPU
-#define virCPUReportError(conn, code, fmt...) \
- virReportErrorHelper(conn, VIR_FROM_CPU, code, __FILE__, \
- __FUNCTION__, __LINE__, fmt)
+#define virCPUReportError(code, fmt...) \
+ virReportErrorHelper(NULL, VIR_FROM_CPU, code, __FILE__, \
+ __FUNCTION__, __LINE__, fmt)
VIR_ENUM_IMPL(virCPUMatch, VIR_CPU_MATCH_LAST,
"minimum",
#ifndef PROXY
virCPUDefPtr
-virCPUDefParseXML(virConnectPtr conn,
- const xmlNodePtr node,
+virCPUDefParseXML(const xmlNodePtr node,
xmlXPathContextPtr ctxt,
enum virCPUType mode)
{
if (!match) {
if (virXPathBoolean("boolean(./model)", ctxt)) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing match attribute for CPU specification"));
goto error;
}
VIR_FREE(match);
if (def->match < 0) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Invalid match attribute for CPU specification"));
goto error;
}
if (def->type == VIR_CPU_TYPE_HOST) {
def->arch = virXPathString("string(./arch[1])", ctxt);
if (!def->arch) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing CPU architecture"));
goto error;
}
if (!(def->model = virXPathString("string(./model[1])", ctxt)) &&
def->type == VIR_CPU_TYPE_HOST) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing CPU model name"));
goto error;
}
ret = virXPathULong("string(./topology[1]/@sockets)",
ctxt, &ul);
if (ret < 0) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing 'sockets' attribute in CPU topology"));
goto error;
}
ret = virXPathULong("string(./topology[1]/@cores)",
ctxt, &ul);
if (ret < 0) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing 'cores' attribute in CPU topology"));
goto error;
}
ret = virXPathULong("string(./topology[1]/@threads)",
ctxt, &ul);
if (ret < 0) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing 'threads' attribute in CPU topology"));
goto error;
}
def->threads = (unsigned int) ul;
if (!def->sockets || !def->cores || !def->threads) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Invalid CPU topology"));
goto error;
}
if (n > 0) {
if (!def->model) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Non-empty feature list specified without CPU model"));
goto error;
}
VIR_FREE(strpolicy);
if (policy < 0) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Invalid CPU feature policy"));
goto error;
}
if (!(name = virXMLPropString(nodes[i], "name")) || *name == 0) {
VIR_FREE(name);
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Invalid CPU feature name"));
goto error;
}
for (j = 0 ; j < i ; j++) {
if (STREQ(name, def->features[j].name)) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("CPU feature `%s' specified more than once"),
name);
VIR_FREE(name);
char *
-virCPUDefFormat(virConnectPtr conn,
- virCPUDefPtr def,
+virCPUDefFormat(virCPUDefPtr def,
const char *indent,
int flags)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- if (virCPUDefFormatBuf(conn, &buf, def, indent, flags) < 0)
+ if (virCPUDefFormatBuf(&buf, def, indent, flags) < 0)
goto cleanup;
if (virBufferError(&buf))
int
-virCPUDefFormatBuf(virConnectPtr conn,
- virBufferPtr buf,
+virCPUDefFormatBuf(virBufferPtr buf,
virCPUDefPtr def,
const char *indent,
int flags)
indent = "";
if (!def->model && def->nfeatures) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Non-empty feature list specified without CPU model"));
return -1;
}
if (def->type == VIR_CPU_TYPE_GUEST && def->model) {
const char *match;
if (!(match = virCPUMatchTypeToString(def->match))) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Unexpected CPU match policy %d"), def->match);
return -1;
}
virCPUFeatureDefPtr feature = def->features + i;
if (!feature->name) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing CPU feature name"));
return -1;
}
policy = virCPUFeaturePolicyTypeToString(feature->policy);
if (!policy) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Unexpected CPU feature policy %d"), feature->policy);
return -1;
}
int
-virCPUDefAddFeature(virConnectPtr conn,
- virCPUDefPtr def,
+virCPUDefAddFeature(virCPUDefPtr def,
const char *name,
int policy)
{
for (i = 0 ; i < def->nfeatures ; i++) {
if (STREQ(name, def->features[i].name)) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("CPU feature `%s' specified more than once"), name);
return -1;
}
#ifndef PROXY
virCPUDefPtr
-virCPUDefParseXML(virConnectPtr conn,
- const xmlNodePtr node,
+virCPUDefParseXML(const xmlNodePtr node,
xmlXPathContextPtr ctxt,
enum virCPUType mode);
#endif
char *
-virCPUDefFormat(virConnectPtr conn,
- virCPUDefPtr def,
+virCPUDefFormat(virCPUDefPtr def,
const char *indent,
int flags);
int
-virCPUDefFormatBuf(virConnectPtr conn,
- virBufferPtr buf,
+virCPUDefFormatBuf(virBufferPtr buf,
virCPUDefPtr def,
const char *indent,
int flags);
int
-virCPUDefAddFeature(virConnectPtr conn,
- virCPUDefPtr cpu,
+virCPUDefAddFeature(virCPUDefPtr cpu,
const char *name,
int policy);
if ((node = virXPathNode("./cpu[1]", ctxt)) != NULL) {
xmlNodePtr oldnode = ctxt->node;
ctxt->node = node;
- def->cpu = virCPUDefParseXML(NULL, node, ctxt, VIR_CPU_TYPE_GUEST);
+ def->cpu = virCPUDefParseXML(node, ctxt, VIR_CPU_TYPE_GUEST);
ctxt->node = oldnode;
if (def->cpu == NULL)
virBufferAddLit(&buf, " </features>\n");
}
- if (virCPUDefFormatBuf(NULL, &buf, def->cpu, " ", 0) < 0)
+ if (virCPUDefFormatBuf(&buf, def->cpu, " ", 0) < 0)
goto cleanup;
virBufferVSprintf(&buf, " <clock offset='%s'/>\n",
static struct cpuArchDriver *
-cpuGetSubDriver(virConnectPtr conn,
- const char *arch)
+cpuGetSubDriver(const char *arch)
{
unsigned int i;
unsigned int j;
if (arch == NULL) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("undefined hardware architecture"));
return NULL;
}
virCPUCompareResult
-cpuCompareXML(virConnectPtr conn,
- virCPUDefPtr host,
+cpuCompareXML(virCPUDefPtr host,
const char *xml)
{
xmlDocPtr doc = NULL;
ctxt->node = xmlDocGetRootElement(doc);
- cpu = virCPUDefParseXML(conn, ctxt->node, ctxt, VIR_CPU_TYPE_AUTO);
+ cpu = virCPUDefParseXML(ctxt->node, ctxt, VIR_CPU_TYPE_AUTO);
if (cpu == NULL)
goto cleanup;
- ret = cpuCompare(conn, host, cpu);
+ ret = cpuCompare(host, cpu);
cleanup:
virCPUDefFree(cpu);
virCPUCompareResult
-cpuCompare(virConnectPtr conn,
- virCPUDefPtr host,
+cpuCompare(virCPUDefPtr host,
virCPUDefPtr cpu)
{
struct cpuArchDriver *driver;
- if ((driver = cpuGetSubDriver(conn, host->arch)) == NULL)
+ if ((driver = cpuGetSubDriver(host->arch)) == NULL)
return VIR_CPU_COMPARE_ERROR;
if (driver->compare == NULL) {
- virCPUReportError(conn, VIR_ERR_NO_SUPPORT,
+ virCPUReportError(VIR_ERR_NO_SUPPORT,
_("cannot compare CPUs of %s architecture"),
host->arch);
return VIR_CPU_COMPARE_ERROR;
int
-cpuDecode(virConnectPtr conn,
- virCPUDefPtr cpu,
+cpuDecode(virCPUDefPtr cpu,
const union cpuData *data,
unsigned int nmodels,
const char **models)
struct cpuArchDriver *driver;
if (models == NULL && nmodels != 0) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("nonzero nmodels doesn't match with NULL models"));
return -1;
}
if (cpu == NULL) {
- virCPUReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("invalid CPU definition"));
return -1;
}
- if ((driver = cpuGetSubDriver(conn, cpu->arch)) == NULL)
+ if ((driver = cpuGetSubDriver(cpu->arch)) == NULL)
return -1;
if (driver->decode == NULL) {
- virCPUReportError(conn, VIR_ERR_NO_SUPPORT,
+ virCPUReportError(VIR_ERR_NO_SUPPORT,
_("cannot decode CPU data for %s architecture"),
cpu->arch);
return -1;
int
-cpuEncode(virConnectPtr conn,
- const char *arch,
+cpuEncode(const char *arch,
const virCPUDefPtr cpu,
union cpuData **forced,
union cpuData **required,
{
struct cpuArchDriver *driver;
- if ((driver = cpuGetSubDriver(conn, arch)) == NULL)
+ if ((driver = cpuGetSubDriver(arch)) == NULL)
return -1;
if (driver->encode == NULL) {
- virCPUReportError(conn, VIR_ERR_NO_SUPPORT,
+ virCPUReportError(VIR_ERR_NO_SUPPORT,
_("cannot encode CPU data for %s architecture"),
arch);
return -1;
void
-cpuDataFree(virConnectPtr conn,
- const char *arch,
+cpuDataFree(const char *arch,
union cpuData *data)
{
struct cpuArchDriver *driver;
if (data == NULL)
return;
- if ((driver = cpuGetSubDriver(conn, arch)) == NULL)
+ if ((driver = cpuGetSubDriver(arch)) == NULL)
return;
if (driver->free == NULL) {
- virCPUReportError(conn, VIR_ERR_NO_SUPPORT,
+ virCPUReportError(VIR_ERR_NO_SUPPORT,
_("cannot free CPU data for %s architecture"),
arch);
return;
union cpuData *
-cpuNodeData(virConnectPtr conn,
- const char *arch)
+cpuNodeData(const char *arch)
{
struct cpuArchDriver *driver;
- if ((driver = cpuGetSubDriver(conn, arch)) == NULL)
+ if ((driver = cpuGetSubDriver(arch)) == NULL)
return NULL;
if (driver->nodeData == NULL) {
- virCPUReportError(conn, VIR_ERR_NO_SUPPORT,
+ virCPUReportError(VIR_ERR_NO_SUPPORT,
_("cannot get node CPU data for %s architecture"),
arch);
return NULL;
virCPUCompareResult
-cpuGuestData(virConnectPtr conn,
- virCPUDefPtr host,
+cpuGuestData(virCPUDefPtr host,
virCPUDefPtr guest,
union cpuData **data)
{
struct cpuArchDriver *driver;
- if ((driver = cpuGetSubDriver(conn, host->arch)) == NULL)
+ if ((driver = cpuGetSubDriver(host->arch)) == NULL)
return VIR_CPU_COMPARE_ERROR;
if (driver->guestData == NULL) {
- virCPUReportError(conn, VIR_ERR_NO_SUPPORT,
+ virCPUReportError(VIR_ERR_NO_SUPPORT,
_("cannot compute guest CPU data for %s architecture"),
host->arch);
return VIR_CPU_COMPARE_ERROR;
#include "cpu_x86_data.h"
-#define virCPUReportError(conn, code, fmt...) \
- virReportErrorHelper(conn, VIR_FROM_CPU, code, __FILE__, \
- __FUNCTION__, __LINE__, fmt)
+#define virCPUReportError(code, fmt...) \
+ virReportErrorHelper(NULL, VIR_FROM_CPU, code, __FILE__, \
+ __FUNCTION__, __LINE__, fmt)
union cpuData {
extern virCPUCompareResult
-cpuCompareXML(virConnectPtr conn,
- virCPUDefPtr host,
+cpuCompareXML(virCPUDefPtr host,
const char *xml);
extern virCPUCompareResult
-cpuCompare (virConnectPtr conn,
- virCPUDefPtr host,
+cpuCompare (virCPUDefPtr host,
virCPUDefPtr cpu);
extern int
-cpuDecode (virConnectPtr conn,
- virCPUDefPtr cpu,
+cpuDecode (virCPUDefPtr cpu,
const union cpuData *data,
unsigned int nmodels,
const char **models);
extern int
-cpuEncode (virConnectPtr conn,
- const char *arch,
+cpuEncode (const char *arch,
const virCPUDefPtr cpu,
union cpuData **forced,
union cpuData **required,
union cpuData **forbidden);
extern void
-cpuDataFree (virConnectPtr conn,
- const char *arch,
+cpuDataFree (const char *arch,
union cpuData *data);
extern union cpuData *
-cpuNodeData (virConnectPtr conn,
- const char *arch);
+cpuNodeData (const char *arch);
extern virCPUCompareResult
-cpuGuestData(virConnectPtr conn,
- virCPUDefPtr host,
+cpuGuestData(virCPUDefPtr host,
virCPUDefPtr guest,
union cpuData **data);
int ret = -1;
if (arch == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("undefined hardware architecture"));
return -1;
}
if ((xml = xmlParseFile(CPUMAPFILE)) == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse CPU map file: %s"),
CPUMAPFILE);
goto cleanup;
ctxt->node = xmlDocGetRootElement(xml);
if ((ctxt->node = virXPathNode(xpath, ctxt)) == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot find CPU map for %s architecture"), arch);
goto cleanup;
}
if ((feature_cb && load(ctxt, "feature", feature_cb, feature_data) < 0) ||
(model_cb && load(ctxt, "model", model_cb, model_data) < 0)) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse CPU map for %s architecture"), arch);
goto cleanup;
}
if ((cpuid = x86DataCpuid(tmp, feature->cpuid[i].function))
&& x86cpuidMatchMasked(cpuid, feature->cpuid + i)) {
x86cpuidClearBits(cpuid, feature->cpuid + i);
- if (virCPUDefAddFeature(NULL, cpu, feature->name,
+ if (virCPUDefAddFeature(cpu, feature->name,
VIR_CPU_FEATURE_REQUIRE) < 0)
goto error;
}
feature->name = virXPathString("string(@name)", ctxt);
if (feature->name == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing CPU feature name"));
goto ignore;
}
if (x86FeatureFind(map, feature->name)) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("CPU feature %s already defined"), feature->name);
goto ignore;
}
if (ret_fun < 0 || ret_eax == -2 || ret_ebx == -2
|| ret_ecx == -2 || ret_edx == -2) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid cpuid[%d] in %s feature"), i, feature->name);
goto ignore;
}
if (cpu->type == VIR_CPU_TYPE_HOST
|| policy == VIR_CPU_FEATURE_REQUIRE) {
if ((model = x86ModelFind(map, cpu->model)) == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown CPU model %s"), cpu->model);
goto error;
}
continue;
if ((feature = x86FeatureFind(map, cpu->features[i].name)) == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown CPU feature %s"), cpu->features[i].name);
goto error;
}
model->name = virXPathString("string(@name)", ctxt);
if (model->name == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Missing CPU model name"));
goto ignore;
}
name = virXPathString("string(./model/@name)", ctxt);
if (name == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Missing ancestor's name in CPU model %s"),
model->name);
goto ignore;
}
if ((ancestor = x86ModelFind(map, name)) == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Ancestor model %s not found for CPU model %s"),
name, model->name);
VIR_FREE(name);
char *name;
if ((name = virXMLPropString(nodes[i], "name")) == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Missing feature name for CPU model %s"), model->name);
goto ignore;
}
if ((feature = x86FeatureFind(map, name)) == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
_("Feature %s required by CPU model %s not found"),
name, model->name);
VIR_FREE(name);
}
if (cpuModel == NULL) {
- virCPUReportError(NULL, VIR_ERR_INTERNAL_ERROR,
+ virCPUReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Cannot find suitable CPU model for given data"));
goto out;
}
cpu->cores = nodeinfo.cores;
cpu->threads = nodeinfo.threads;
- if (!(data = cpuNodeData(NULL, arch))
- || cpuDecode(NULL, cpu, data, 0, NULL) < 0)
+ if (!(data = cpuNodeData(arch))
+ || cpuDecode(cpu, data, 0, NULL) < 0)
goto error;
caps->host.cpu = cpu;
ret = 0;
cleanup:
- cpuDataFree(NULL, arch, data);
+ cpuDataFree(arch, data);
return ret;
if (ncpus > 0 && host) {
virCPUCompareResult cmp;
- cmp = cpuGuestData(NULL, host, def->cpu, &data);
+ cmp = cpuGuestData(host, def->cpu, &data);
switch (cmp) {
case VIR_CPU_COMPARE_INCOMPATIBLE:
qemuReportError(VIR_ERR_INTERNAL_ERROR,
if (VIR_ALLOC(guest) < 0 || !(guest->arch = strdup(ut->machine)))
goto no_memory;
- if (cpuDecode(NULL, guest, data, ncpus, cpus) < 0)
+ if (cpuDecode(guest, data, ncpus, cpus) < 0)
goto cleanup;
virBufferVSprintf(&buf, "%s", guest->model);
cleanup:
virCPUDefFree(guest);
- cpuDataFree(NULL, ut->machine, data);
+ cpuDataFree(ut->machine, data);
if (cpus) {
for (i = 0; i < ncpus; i++)
else
feature = strdup(p);
- ret = virCPUDefAddFeature(NULL, cpu, feature, policy);
+ ret = virCPUDefAddFeature(cpu, feature, policy);
VIR_FREE(feature);
if (ret < 0)
goto error;
"%s", _("cannot get host CPU capabilities"));
}
else
- ret = cpuCompareXML(conn, driver->caps->host.cpu, xmlDesc);
+ ret = cpuCompareXML(driver->caps->host.cpu, xmlDesc);
qemuDriverUnlock(driver);