diff options
author | Roger Pau Monné <royger@FreeBSD.org> | 2024-02-02 10:36:52 +0000 |
---|---|---|
committer | Roger Pau Monné <royger@FreeBSD.org> | 2024-02-22 10:08:05 +0000 |
commit | 4401b0685163c0a460c1f41b107225b0b0ee2062 (patch) | |
tree | 349714993e718fc3bac95e6901d6a3de271eacc3 /sys/x86/x86 | |
parent | f0cf86c075cda435c1481fe59440d6c4bbf855dd (diff) | |
download | src-4401b0685163c0a460c1f41b107225b0b0ee2062.tar.gz src-4401b0685163c0a460c1f41b107225b0b0ee2062.zip |
Diffstat (limited to 'sys/x86/x86')
-rw-r--r-- | sys/x86/x86/identcpu.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/x86/x86/identcpu.c b/sys/x86/x86/identcpu.c index df24c5bddffd..6df138bccba1 100644 --- a/sys/x86/x86/identcpu.c +++ b/sys/x86/x86/identcpu.c @@ -1343,6 +1343,7 @@ SYSINIT(hook_tsc_freq, SI_SUB_CONFIGURE, SI_ORDER_ANY, hook_tsc_freq, NULL); static struct { const char *vm_cpuid; int vm_guest; + void (*init)(void); } vm_cpuids[] = { { "XenVMMXenVMM", VM_GUEST_XEN }, /* XEN */ { "Microsoft Hv", VM_GUEST_HV }, /* Microsoft Hyper-V */ @@ -1355,6 +1356,7 @@ static struct { static void identify_hypervisor_cpuid_base(void) { + void (*init_fn)(void) = NULL; u_int leaf, regs[4]; int i; @@ -1391,6 +1393,7 @@ identify_hypervisor_cpuid_base(void) if (strncmp((const char *)®s[1], vm_cpuids[i].vm_cpuid, 12) == 0) { vm_guest = vm_cpuids[i].vm_guest; + init_fn = vm_cpuids[i].init; break; } @@ -1423,10 +1426,13 @@ identify_hypervisor_cpuid_base(void) * preferred. */ vm_guest != VM_GUEST_HV) - return; + break; } } } + + if (init_fn != NULL) + init_fn(); } void |