On Thu, 11 Dec 2014, Mark Kettenis wrote:

> > From: Alexey Suslikov <alexey.susli...@gmail.com>
> > Date: Thu, 11 Dec 2014 20:51:14 +0000 (UTC)
> > 
> > Stefan Fritsch <sf <at> sfritsch.de> writes:
> > 
> > > --- a/sys/arch/amd64/include/specialreg.h
> > > +++ b/sys/arch/amd64/include/specialreg.h
> > >  <at>  <at>  -158,6 +158,7  <at>  <at> 
> > >  #define  CPUIDECX_AVX    0x10000000      /* Advanced Vector Extensions 
> > */
> > >  #define  CPUIDECX_F16C   0x20000000      /* 16bit fp conversion  */
> > >  #define  CPUIDECX_RDRAND 0x40000000      /* RDRAND instruction  */
> > > +#define  CPUIDECX_HYPERV 0x80000000      /* Hypervisor present */
> > 
> > Is this flag standardized? Last time I have tried to push this, there
> > was an objection based on "reserved for future use" status of this flag.
> > 
> > See http://marc.info/?l=openbsd-bugs&m=136907278229145&w=2
> 
> Well, that thread started out with a questionable workaround for a
> hypervisor bug.  That may have have influenced the debate about the
> flag a bit.
> 
> You can be almost certain that Intel and AMD will not use that
> reserved bit for anything else.  The Linux KVM virtualization business
> is too important for them.  And if Microsoft Hyper-V or VMWare ESX
> sets that bit as well, this becomes an absolute certainty.

The intel manual says "Not Used, Always returns 0" which is different from 
"reserved", which is stated for other bits.

FTR, jasper@ checked that vmware sets the bit while virtual box does not. 
So, many but not all hypervisors set it.

> I prefer the CPUIDECX_HV name used in the diff you posted in:

OK?

diff --git a/sys/arch/amd64/amd64/identcpu.c b/sys/arch/amd64/amd64/identcpu.c
--- a/sys/arch/amd64/amd64/identcpu.c
+++ b/sys/arch/amd64/amd64/identcpu.c
@@ -129,6 +129,7 @@ const struct {
        { CPUIDECX_AVX,         "AVX" },
        { CPUIDECX_F16C,        "F16C" },
        { CPUIDECX_RDRAND,      "RDRAND" },
+       { CPUIDECX_HV,          "HV" },
 }, cpu_ecpuid_ecxfeatures[] = {
        { CPUIDECX_LAHF,        "LAHF" },
        { CPUIDECX_CMPLEG,      "CMPLEG" },
diff --git a/sys/arch/amd64/include/specialreg.h 
b/sys/arch/amd64/include/specialreg.h
--- a/sys/arch/amd64/include/specialreg.h
+++ b/sys/arch/amd64/include/specialreg.h
@@ -158,6 +158,7 @@
 #define        CPUIDECX_AVX    0x10000000      /* Advanced Vector Extensions */
 #define        CPUIDECX_F16C   0x20000000      /* 16bit fp conversion  */
 #define        CPUIDECX_RDRAND 0x40000000      /* RDRAND instruction  */
+#define        CPUIDECX_HV     0x80000000      /* Running on hypervisor */
 
 /*
  * "Structured Extended Feature Flags Parameters" (CPUID function 0x7, leaf 0)

Reply via email to