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',
}
vendor_exit_reasons = {
x86_exit_reasons = {
'vmx': vmx_exit_reasons,
'svm': svm_exit_reasons,
}
syscall_numbers = {
'IBM/S390': 331,
}
sc_perf_evt_open = 298
sc_perf_evt_open = None
exit_reasons = None
def x86_init(flag):
globals().update({
'sc_perf_evt_open' : 298,
'exit_reasons' : x86_exit_reasons[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') or line.startswith('vendor_id'):
if line.startswith('flags'):
for flag in line.split():
if flag in vendor_exit_reasons:
exit_reasons = vendor_exit_reasons[flag]
if flag in syscall_numbers:
sc_perf_evt_open = syscall_numbers[flag]
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):
return dict((x[1], x[0]) for x in d.iteritems())