1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-05-28 13:05:47 +03:00

Merge pull request #1778 from rhdrjones/detect-virt

detect-virt: one fix and arm/aarch64 dmi detection
This commit is contained in:
Lennart Poettering 2015-11-04 20:11:17 +01:00
commit 50bcc7f45c

View File

@ -34,7 +34,7 @@
static int detect_vm_cpuid(void) {
/* Both CPUID and DMI are x86 specific interfaces... */
/* CPUID is an x86 specific interface. */
#if defined(__i386__) || defined(__x86_64__)
static const struct {
@ -144,11 +144,10 @@ static int detect_vm_device_tree(void) {
}
static int detect_vm_dmi(void) {
/* Both CPUID and DMI are x86 specific interfaces... */
#if defined(__i386__) || defined(__x86_64__)
#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
static const char *const dmi_vendors[] = {
"/sys/class/dmi/id/product_name", /* Test this before sys_vendor to detect KVM over QEMU */
"/sys/class/dmi/id/sys_vendor",
"/sys/class/dmi/id/board_vendor",
"/sys/class/dmi/id/bios_vendor"
@ -158,6 +157,7 @@ static int detect_vm_dmi(void) {
const char *vendor;
int id;
} dmi_vendor_table[] = {
{ "KVM", VIRTUALIZATION_KVM },
{ "QEMU", VIRTUALIZATION_QEMU },
/* http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458 */
{ "VMware", VIRTUALIZATION_VMWARE },
@ -267,12 +267,7 @@ int detect_vm(void) {
if (cached_found >= 0)
return cached_found;
/* Try xen capabilities file first, if not found try
* high-level hypervisor sysfs file:
*
* https://bugs.freedesktop.org/show_bug.cgi?id=77271 */
r = detect_vm_xen();
r = detect_vm_cpuid();
if (r < 0)
return r;
if (r != VIRTUALIZATION_NONE)
@ -284,7 +279,14 @@ int detect_vm(void) {
if (r != VIRTUALIZATION_NONE)
goto finish;
r = detect_vm_cpuid();
/* x86 xen will most likely be detected by cpuid. If not (most likely
* because we're not an x86 guest), then we should try the xen capabilities
* file next. If that's not found, then we check for the high-level
* hypervisor sysfs file:
*
* https://bugs.freedesktop.org/show_bug.cgi?id=77271 */
r = detect_vm_xen();
if (r < 0)
return r;
if (r != VIRTUALIZATION_NONE)