diff options
author | aiju <devnull@localhost> | 2017-06-27 09:29:37 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2017-06-27 09:29:37 +0000 |
commit | c4b02ff9e6d86ae9522bcff4e847a88eb4336864 (patch) | |
tree | ff10f076e14551df9160a4776331d7c00a65d21c /sys/src/cmd | |
parent | dffbc1e45d61bb928ea6a9d0b1206d641daf24fe (diff) |
change icanhasvmx to report extra info only with -v
Diffstat (limited to 'sys/src/cmd')
-rw-r--r-- | sys/src/cmd/aux/icanhasvmx.c | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/sys/src/cmd/aux/icanhasvmx.c b/sys/src/cmd/aux/icanhasvmx.c index 9a9c315b8..f1d65d8c0 100644 --- a/sys/src/cmd/aux/icanhasvmx.c +++ b/sys/src/cmd/aux/icanhasvmx.c @@ -202,10 +202,11 @@ main(int argc, char **argv) { u64int msr, msr2; int ext; - static int no, raw; + static int no, raw, verbose; ARGBEGIN { - case 'r': raw++; break; + case 'r': raw++; verbose++; break; + case 'v': verbose++; break; default: goto usage; } ARGEND; if(argc != 0){ @@ -219,31 +220,33 @@ main(int argc, char **argv) msrfd = open("#P/msr", OREAD); if(msrfd < 0) sysfatal("open: %r"); if(cpuidcheck() < 0) sysfatal("CPU does not support VMX"); - msr = rdmsr(0x3a); - if((msr & 5) == 0) wrmsr(0x3a, msr | 5); - if((rdmsr(0x3a) & 5) != 5){ - fprint(2, "VMX disabled by BIOS"); - no++; - } - msr = rdmsr(VMX_PROCB_CTLS_MSR); - if((vlong)msr >= 0){ - fprint(2, "no secondary controls"); - no++; - }else{ - msr = rdmsr(VMX_PROCB_CTLS2_MSR); - if((msr >> 32 & PROCB_EPT) == 0){ - fprint(2, "no EPT support"); + if(!verbose){ + msr = rdmsr(0x3a); + if((msr & 5) == 0) wrmsr(0x3a, msr | 5); + if((rdmsr(0x3a) & 5) != 5){ + print("VMX disabled by BIOS\n"); no++; } - if((msr >> 32 & PROCB_VPID) == 0){ - fprint(2, "no VPID support"); + msr = rdmsr(VMX_PROCB_CTLS_MSR); + if((vlong)msr >= 0){ + print("no secondary controls\n"); no++; + }else{ + msr = rdmsr(VMX_PROCB_CTLS2_MSR); + if((msr >> 32 & PROCB_EPT) == 0){ + print("no EPT support\n"); + no++; + } + if((msr >> 32 & PROCB_VPID) == 0){ + print("no VPID support\n"); + no++; + } } - } - if(no == 0) - fprint(2, "VMX is supported\n"); - - if(!raw){ + if(no == 0) + print("VMX is supported\n"); + else + print("Some needed features are missing\n"); + }else if(!raw){ msr = rdmsr(VMX_BASIC_MSR); Bprint(out, "vmcsrev %#ux\n", (u32int)msr & 0x7fffffff); Bprint(out, "vmxonsz %d\n", (u32int)(msr >> 32) & 0x1fff); @@ -296,7 +299,6 @@ main(int argc, char **argv) if(no == 0) rawprint("vpidept", VMX_VPIDEPT_MSR); } - - Bterm(out); + exits(nil); } |