kvm_stat: Rework platform detection

The current platform detection is a little bit messy. We look for lines
in /proc/cpuinfo starting with 'flags' OR 'vendor-id', and scan both
for values we know will only occur in one or the other. We also keep
scanning once we've found a value, which could be a feature, but isn't
in this case.

We'd also like to add another platform, powerpc, which will just make it
worse. So clean it up in preparation.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Michael Ellerman 2014-06-17 17:54:32 +10:00 committed by Paolo Bonzini
parent 27d318a885
commit 4d4103ff32

View File

@ -169,26 +169,39 @@ userspace_exit_reasons = {
23: 'EPR', 23: 'EPR',
} }
vendor_exit_reasons = { x86_exit_reasons = {
'vmx': vmx_exit_reasons, 'vmx': vmx_exit_reasons,
'svm': svm_exit_reasons, 'svm': svm_exit_reasons,
} }
syscall_numbers = { sc_perf_evt_open = None
'IBM/S390': 331,
}
sc_perf_evt_open = 298
exit_reasons = None exit_reasons = None
for line in file('/proc/cpuinfo').readlines(): def x86_init(flag):
if line.startswith('flags') or line.startswith('vendor_id'): globals().update({
for flag in line.split(): 'sc_perf_evt_open' : 298,
if flag in vendor_exit_reasons: 'exit_reasons' : x86_exit_reasons[flag],
exit_reasons = vendor_exit_reasons[flag] })
if flag in syscall_numbers:
sc_perf_evt_open = syscall_numbers[flag] def s390_init():
globals().update({
'sc_perf_evt_open' : 331
})
def detect_platform():
for line in file('/proc/cpuinfo').readlines():
if line.startswith('flags'):
for flag in line.split():
if flag in x86_exit_reasons:
x86_init(flag)
return
elif line.startswith('vendor_id'):
for flag in line.split():
if flag == 'IBM/S390':
s390_init()
return
detect_platform()
def invert(d): def invert(d):
return dict((x[1], x[0]) for x in d.iteritems()) return dict((x[1], x[0]) for x in d.iteritems())