This patch implements a cleaned up hypervisor layer, plus cleans up some of the aspects of both Hank's MS-HyperV patch and the existing VMware driver. In particular, the MS-HyperV information is private information, per system, not per CPU, and can thus simply be stored in an ordinary global variable. This also turns the hypervisor detection into an information structure instead of just an identifier. -hpa