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:
parent
27d318a885
commit
4d4103ff32
@ -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())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user