mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 11:31:16 +00:00
cpu_x86: Introduce virCPUx86DataSetVendor
The API is useful for creating virCPUData in a hypervisor driver from data we got by querying the hypervisor. Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
f358a75ab3
commit
8da3ca8419
@ -478,6 +478,26 @@ x86DataToVendor(const virCPUx86Data *data,
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
virCPUx86VendorToCPUID(const char *vendor,
|
||||
virCPUx86CPUID *cpuid)
|
||||
{
|
||||
if (strlen(vendor) != VENDOR_STRING_LENGTH) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid CPU vendor string '%s'"), vendor);
|
||||
return -1;
|
||||
}
|
||||
|
||||
cpuid->eax_in = 0;
|
||||
cpuid->ecx_in = 0;
|
||||
cpuid->ebx = virReadBufInt32LE(vendor);
|
||||
cpuid->edx = virReadBufInt32LE(vendor + 4);
|
||||
cpuid->ecx = virReadBufInt32LE(vendor + 8);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static uint32_t
|
||||
x86MakeSignature(unsigned int family,
|
||||
unsigned int model)
|
||||
@ -651,17 +671,9 @@ x86VendorParse(xmlXPathContextPtr ctxt,
|
||||
vendor->name);
|
||||
goto error;
|
||||
}
|
||||
if (strlen(string) != VENDOR_STRING_LENGTH) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid CPU vendor string '%s'"), string);
|
||||
goto error;
|
||||
}
|
||||
|
||||
vendor->cpuid.eax_in = 0;
|
||||
vendor->cpuid.ecx_in = 0;
|
||||
vendor->cpuid.ebx = virReadBufInt32LE(string);
|
||||
vendor->cpuid.edx = virReadBufInt32LE(string + 4);
|
||||
vendor->cpuid.ecx = virReadBufInt32LE(string + 8);
|
||||
if (virCPUx86VendorToCPUID(string, &vendor->cpuid) < 0)
|
||||
goto error;
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(string);
|
||||
@ -2731,6 +2743,19 @@ virCPUx86DataSetSignature(virCPUDataPtr cpuData,
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
virCPUx86DataSetVendor(virCPUDataPtr cpuData,
|
||||
const char *vendor)
|
||||
{
|
||||
virCPUx86CPUID cpuid = { 0 };
|
||||
|
||||
if (virCPUx86VendorToCPUID(vendor, &cpuid) < 0)
|
||||
return -1;
|
||||
|
||||
return virCPUx86DataAddCPUID(cpuData, &cpuid);
|
||||
}
|
||||
|
||||
|
||||
struct cpuArchDriver cpuDriverX86 = {
|
||||
.name = "x86",
|
||||
.arch = archs,
|
||||
|
@ -36,4 +36,7 @@ int virCPUx86DataSetSignature(virCPUDataPtr cpuData,
|
||||
unsigned int family,
|
||||
unsigned int model);
|
||||
|
||||
int virCPUx86DataSetVendor(virCPUDataPtr cpuData,
|
||||
const char *vendor);
|
||||
|
||||
#endif /* __VIR_CPU_X86_H__ */
|
||||
|
@ -1004,6 +1004,7 @@ virCPUUpdate;
|
||||
# cpu/cpu_x86.h
|
||||
virCPUx86DataAddCPUID;
|
||||
virCPUx86DataSetSignature;
|
||||
virCPUx86DataSetVendor;
|
||||
|
||||
|
||||
# datatypes.h
|
||||
|
Loading…
Reference in New Issue
Block a user