> Passing an identifier is not an option for our hypervisor today. We > rely far too heavily on the BIOS to properly initialize devices, PCI I/O > space, the E820 map, and many other things that can't be done in > paravirtual startup mode, without a ton of work. Rather than set all > this up in paravirtual start-of-day, it is easier for us to fully > virtualize the processor and chipset during the boot process. Ok. > Our boot detection code looks like this. We use I/O port detection to > reveal that we are running under VMware, and use a hidden MSR to enable > paravirt mode. The problem with this is that choosing an MSR that is > guaranteed not to trap on real hardware and also does not collide with > existing MSRs is a problem, That sounds impossible for the native case. Either it is used by the hardware or it traps. Anything else would be a CPU erratum. > and handling faults on an RDMSR which the > processor decided to convert to a #GP is impossible this early during > boot. It's not. We already handle exceptions during early boot. It's just a bit ugly. > This may (and does) vary by processor. Hence, the I/O port > detection as a failsafe. Peeking random io ports is dangerous - you can trip up native hardware on some machines badly. -Andi