diff options
author | Michael Ellerman <mpe@ellerman.id.au> | 2014-06-17 17:54:32 +1000 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-10-31 16:34:21 +0100 |
commit | 4d4103ff32ee4c88857727515b5e596a1debc227 (patch) | |
tree | a1479bffc9f4548cd3cb1be81cb4be5386e28e63 | |
parent | 27d318a88583b2bb263292a4d35931a3bc8d2b7a (diff) |
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>
-rwxr-xr-x | scripts/kvm/kvm_stat | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat index 4ec1fa5b63..00d4c5dffa 100755 --- a/scripts/kvm/kvm_stat +++ b/scripts/kvm/kvm_stat @@ -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 -for line in file('/proc/cpuinfo').readlines(): - if line.startswith('flags') or line.startswith('vendor_id'): - 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] +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'): + 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): return dict((x[1], x[0]) for x in d.iteritems()) |