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
|
static uint32_t
|
||||||
x86MakeSignature(unsigned int family,
|
x86MakeSignature(unsigned int family,
|
||||||
unsigned int model)
|
unsigned int model)
|
||||||
@ -651,17 +671,9 @@ x86VendorParse(xmlXPathContextPtr ctxt,
|
|||||||
vendor->name);
|
vendor->name);
|
||||||
goto error;
|
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;
|
if (virCPUx86VendorToCPUID(string, &vendor->cpuid) < 0)
|
||||||
vendor->cpuid.ecx_in = 0;
|
goto error;
|
||||||
vendor->cpuid.ebx = virReadBufInt32LE(string);
|
|
||||||
vendor->cpuid.edx = virReadBufInt32LE(string + 4);
|
|
||||||
vendor->cpuid.ecx = virReadBufInt32LE(string + 8);
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(string);
|
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 = {
|
struct cpuArchDriver cpuDriverX86 = {
|
||||||
.name = "x86",
|
.name = "x86",
|
||||||
.arch = archs,
|
.arch = archs,
|
||||||
|
@ -36,4 +36,7 @@ int virCPUx86DataSetSignature(virCPUDataPtr cpuData,
|
|||||||
unsigned int family,
|
unsigned int family,
|
||||||
unsigned int model);
|
unsigned int model);
|
||||||
|
|
||||||
|
int virCPUx86DataSetVendor(virCPUDataPtr cpuData,
|
||||||
|
const char *vendor);
|
||||||
|
|
||||||
#endif /* __VIR_CPU_X86_H__ */
|
#endif /* __VIR_CPU_X86_H__ */
|
||||||
|
@ -1004,6 +1004,7 @@ virCPUUpdate;
|
|||||||
# cpu/cpu_x86.h
|
# cpu/cpu_x86.h
|
||||||
virCPUx86DataAddCPUID;
|
virCPUx86DataAddCPUID;
|
||||||
virCPUx86DataSetSignature;
|
virCPUx86DataSetSignature;
|
||||||
|
virCPUx86DataSetVendor;
|
||||||
|
|
||||||
|
|
||||||
# datatypes.h
|
# datatypes.h
|
||||||
|
Loading…
Reference in New Issue
Block a user