In addition smbios.c has been ported because FreeBSD uses resulting values to decide whether CLFLUSH can
be enabled on virtual machines.

Users can now report (notoriously unreliable) smbios values from kenv.

Ported ability to disable CLFLUSH using set hw.clflush_disable=1.

The function for clflush has not been tested yet.

There may be some concern that adding smbios.c to loader code may lead to unbootable systems for
code that is nonessential; however, the code has not led to unbootable systems on an Asus P4B266
Pentium 4, a Lenovo S10 netbook, an Asus M5A87 amd64, an Asus ULFT20, and Vmware Fusion 3.1.4.

The current port of accompanying vm detection code for clflush is obviously of
cargo-cult quality because some applies to xen and not to vkernels.

History

1) SMBIOS to detect bios vendor and decide if you are in a VMM is not my favourite approach. CPUID2_VMM is available in one extended set of CPUID feature flags:
if (cpu_feature2 & CPUID2_VMM) { /* I am in a VMM! */ }

2) Tiny thing, I'd like to see all of the VM_ and vm_ fields added as VMM_ and vmm_; traditionally, vm_* refer to the virtual memory code.

3) Why do you if-0 out the prototype of initializecpu()?
+#if 0
+void initializecpu(void);
+#endif

4) The convention of having 'vm(m)_guest' available is a good one. We could convert the APIC enable code to use it as well.

5) Just a question -- on systems w/o CLFLUSH, what does the DRM code do? Does it just use WBINVD?