~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to scripts/kvm/vmxcap

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
class msr(object):
28
28
    def __init__(self):
29
29
        try:
30
 
            self.f = open('/dev/cpu/0/msr', 'r', 0)
 
30
            self.f = open('/dev/cpu/0/msr', 'rb', 0)
31
31
        except:
32
 
            self.f = open('/dev/msr0', 'r', 0)
 
32
            self.f = open('/dev/msr0', 'rb', 0)
33
33
    def read(self, index, default = None):
34
34
        import struct
35
35
        self.f.seek(index)
49
49
        val = m.read(nr, 0)
50
50
        return (val & 0xffffffff, val >> 32)
51
51
    def show(self):
52
 
        print self.name
 
52
        print(self.name)
53
53
        mbz, mb1 = self.read2(self.cap_msr)
54
54
        tmbz, tmb1 = 0, 0
55
55
        if self.true_cap_msr:
69
69
                s = 'forced'
70
70
            elif one and zero:
71
71
                s = 'yes'
72
 
            print '  %-40s %s' % (self.bits[bit], s)
 
72
            print('  %-40s %s' % (self.bits[bit], s))
73
73
 
74
74
class Misc(object):
75
75
    def __init__(self, name, bits, msr):
77
77
        self.bits = bits
78
78
        self.msr = msr
79
79
    def show(self):
80
 
        print self.name
 
80
        print(self.name)
81
81
        value = msr().read(self.msr, 0)
82
 
        print '  Hex: 0x%x' % (value)
 
82
        print('  Hex: 0x%x' % (value))
83
83
        def first_bit(key):
84
84
            if type(key) is tuple:
85
85
                return key[0]
94
94
                def fmt(x):
95
95
                    return { True: 'yes', False: 'no' }[x]
96
96
            v = (value >> lo) & ((1 << (hi - lo + 1)) - 1)
97
 
            print '  %-40s %s' % (self.bits[bits], fmt(v))
 
97
            print('  %-40s %s' % (self.bits[bits], fmt(v)))
98
98
 
99
99
controls = [
100
100
    Misc(
170
170
            12: 'Enable INVPCID',
171
171
            13: 'Enable VM functions',
172
172
            14: 'VMCS shadowing',
 
173
            15: 'Enable ENCLS exiting',
173
174
            16: 'RDSEED exiting',
 
175
            17: 'Enable PML',
174
176
            18: 'EPT-violation #VE',
 
177
            19: 'Conceal non-root operation from PT',
175
178
            20: 'Enable XSAVES/XRSTORS',
 
179
            22: 'Mode-based execute control (XS/XU)',
176
180
            25: 'TSC scaling',
177
181
            },
178
182
        cap_msr = MSR_IA32_VMX_PROCBASED_CTLS2,
190
194
            20: 'Save IA32_EFER',
191
195
            21: 'Load IA32_EFER',
192
196
            22: 'Save VMX-preemption timer value',
 
197
            23: 'Clear IA32_BNDCFGS',
 
198
            24: 'Conceal VM exits from PT',
193
199
            },
194
200
        cap_msr = MSR_IA32_VMX_EXIT_CTLS,
195
201
        true_cap_msr = MSR_IA32_VMX_TRUE_EXIT_CTLS,
205
211
            13: 'Load IA32_PERF_GLOBAL_CTRL',
206
212
            14: 'Load IA32_PAT',
207
213
            15: 'Load IA32_EFER',
 
214
            16: 'Load IA32_BNDCFGS',
 
215
            17: 'Conceal VM entries from PT',
208
216
            },
209
217
        cap_msr = MSR_IA32_VMX_ENTRY_CTLS,
210
218
        true_cap_msr = MSR_IA32_VMX_TRUE_ENTRY_CTLS,
223
231
            (25,27): 'MSR-load/store count recommendation',
224
232
            28: 'IA32_SMM_MONITOR_CTL[2] can be set to 1',
225
233
            29: 'VMWRITE to VM-exit information fields',
 
234
            30: 'Inject event with insn length=0',
226
235
            (32,63): 'MSEG revision identifier',
227
236
            },
228
237
        msr = MSR_IA32_VMX_MISC_CTLS,