From: Michael Ellerman Date: Tue, 17 Jun 2014 07:54:32 +0000 (+1000) Subject: kvm_stat: Rework platform detection X-Git-Tag: TizenStudio_2.0_p2.3.2~208^2~494^2~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4d4103ff32ee4c88857727515b5e596a1debc227;p=sdk%2Femulator%2Fqemu.git 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 Signed-off-by: Paolo Bonzini --- diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat index 4ec1fa5..00d4c5d 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())