scripts/kvm/kvm_stat: Invert dictionaries

The exit reasons dictionaries were defined number -> value but later
on were accessed the other way around. Therefore a invert function
inverted them.

Defining them the right way removes the need to invert them and
therefore also speeds up the script's setup process.

Signed-off-by: Janosch Frank <frankja@linux.vnet.ibm.com>
Message-Id: <1452525484-32309-7-git-send-email-frankja@linux.vnet.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Janosch Frank 2016-01-11 16:17:36 +01:00 committed by Paolo Bonzini
parent dbedce0ebc
commit a6ad61f987

View File

@ -37,188 +37,188 @@ class DebugfsProvider(object):
return dict([(key, val(key)) for key in self._fields]) return dict([(key, val(key)) for key in self._fields])
VMX_EXIT_REASONS = { VMX_EXIT_REASONS = {
0: 'EXCEPTION_NMI', 'EXCEPTION_NMI': 0,
1: 'EXTERNAL_INTERRUPT', 'EXTERNAL_INTERRUPT': 1,
2: 'TRIPLE_FAULT', 'TRIPLE_FAULT': 2,
7: 'PENDING_INTERRUPT', 'PENDING_INTERRUPT': 7,
8: 'NMI_WINDOW', 'NMI_WINDOW': 8,
9: 'TASK_SWITCH', 'TASK_SWITCH': 9,
10: 'CPUID', 'CPUID': 10,
12: 'HLT', 'HLT': 12,
14: 'INVLPG', 'INVLPG': 14,
15: 'RDPMC', 'RDPMC': 15,
16: 'RDTSC', 'RDTSC': 16,
18: 'VMCALL', 'VMCALL': 18,
19: 'VMCLEAR', 'VMCLEAR': 19,
20: 'VMLAUNCH', 'VMLAUNCH': 20,
21: 'VMPTRLD', 'VMPTRLD': 21,
22: 'VMPTRST', 'VMPTRST': 22,
23: 'VMREAD', 'VMREAD': 23,
24: 'VMRESUME', 'VMRESUME': 24,
25: 'VMWRITE', 'VMWRITE': 25,
26: 'VMOFF', 'VMOFF': 26,
27: 'VMON', 'VMON': 27,
28: 'CR_ACCESS', 'CR_ACCESS': 28,
29: 'DR_ACCESS', 'DR_ACCESS': 29,
30: 'IO_INSTRUCTION', 'IO_INSTRUCTION': 30,
31: 'MSR_READ', 'MSR_READ': 31,
32: 'MSR_WRITE', 'MSR_WRITE': 32,
33: 'INVALID_STATE', 'INVALID_STATE': 33,
36: 'MWAIT_INSTRUCTION', 'MWAIT_INSTRUCTION': 36,
39: 'MONITOR_INSTRUCTION', 'MONITOR_INSTRUCTION': 39,
40: 'PAUSE_INSTRUCTION', 'PAUSE_INSTRUCTION': 40,
41: 'MCE_DURING_VMENTRY', 'MCE_DURING_VMENTRY': 41,
43: 'TPR_BELOW_THRESHOLD', 'TPR_BELOW_THRESHOLD': 43,
44: 'APIC_ACCESS', 'APIC_ACCESS': 44,
48: 'EPT_VIOLATION', 'EPT_VIOLATION': 48,
49: 'EPT_MISCONFIG', 'EPT_MISCONFIG': 49,
54: 'WBINVD', 'WBINVD': 54,
55: 'XSETBV', 'XSETBV': 55,
56: 'APIC_WRITE', 'APIC_WRITE': 56,
58: 'INVPCID', 'INVPCID': 58,
} }
SVM_EXIT_REASONS = { SVM_EXIT_REASONS = {
0x000: 'READ_CR0', 'READ_CR0': 0x000,
0x003: 'READ_CR3', 'READ_CR3': 0x003,
0x004: 'READ_CR4', 'READ_CR4': 0x004,
0x008: 'READ_CR8', 'READ_CR8': 0x008,
0x010: 'WRITE_CR0', 'WRITE_CR0': 0x010,
0x013: 'WRITE_CR3', 'WRITE_CR3': 0x013,
0x014: 'WRITE_CR4', 'WRITE_CR4': 0x014,
0x018: 'WRITE_CR8', 'WRITE_CR8': 0x018,
0x020: 'READ_DR0', 'READ_DR0': 0x020,
0x021: 'READ_DR1', 'READ_DR1': 0x021,
0x022: 'READ_DR2', 'READ_DR2': 0x022,
0x023: 'READ_DR3', 'READ_DR3': 0x023,
0x024: 'READ_DR4', 'READ_DR4': 0x024,
0x025: 'READ_DR5', 'READ_DR5': 0x025,
0x026: 'READ_DR6', 'READ_DR6': 0x026,
0x027: 'READ_DR7', 'READ_DR7': 0x027,
0x030: 'WRITE_DR0', 'WRITE_DR0': 0x030,
0x031: 'WRITE_DR1', 'WRITE_DR1': 0x031,
0x032: 'WRITE_DR2', 'WRITE_DR2': 0x032,
0x033: 'WRITE_DR3', 'WRITE_DR3': 0x033,
0x034: 'WRITE_DR4', 'WRITE_DR4': 0x034,
0x035: 'WRITE_DR5', 'WRITE_DR5': 0x035,
0x036: 'WRITE_DR6', 'WRITE_DR6': 0x036,
0x037: 'WRITE_DR7', 'WRITE_DR7': 0x037,
0x040: 'EXCP_BASE', 'EXCP_BASE': 0x040,
0x060: 'INTR', 'INTR': 0x060,
0x061: 'NMI', 'NMI': 0x061,
0x062: 'SMI', 'SMI': 0x062,
0x063: 'INIT', 'INIT': 0x063,
0x064: 'VINTR', 'VINTR': 0x064,
0x065: 'CR0_SEL_WRITE', 'CR0_SEL_WRITE': 0x065,
0x066: 'IDTR_READ', 'IDTR_READ': 0x066,
0x067: 'GDTR_READ', 'GDTR_READ': 0x067,
0x068: 'LDTR_READ', 'LDTR_READ': 0x068,
0x069: 'TR_READ', 'TR_READ': 0x069,
0x06a: 'IDTR_WRITE', 'IDTR_WRITE': 0x06a,
0x06b: 'GDTR_WRITE', 'GDTR_WRITE': 0x06b,
0x06c: 'LDTR_WRITE', 'LDTR_WRITE': 0x06c,
0x06d: 'TR_WRITE', 'TR_WRITE': 0x06d,
0x06e: 'RDTSC', 'RDTSC': 0x06e,
0x06f: 'RDPMC', 'RDPMC': 0x06f,
0x070: 'PUSHF', 'PUSHF': 0x070,
0x071: 'POPF', 'POPF': 0x071,
0x072: 'CPUID', 'CPUID': 0x072,
0x073: 'RSM', 'RSM': 0x073,
0x074: 'IRET', 'IRET': 0x074,
0x075: 'SWINT', 'SWINT': 0x075,
0x076: 'INVD', 'INVD': 0x076,
0x077: 'PAUSE', 'PAUSE': 0x077,
0x078: 'HLT', 'HLT': 0x078,
0x079: 'INVLPG', 'INVLPG': 0x079,
0x07a: 'INVLPGA', 'INVLPGA': 0x07a,
0x07b: 'IOIO', 'IOIO': 0x07b,
0x07c: 'MSR', 'MSR': 0x07c,
0x07d: 'TASK_SWITCH', 'TASK_SWITCH': 0x07d,
0x07e: 'FERR_FREEZE', 'FERR_FREEZE': 0x07e,
0x07f: 'SHUTDOWN', 'SHUTDOWN': 0x07f,
0x080: 'VMRUN', 'VMRUN': 0x080,
0x081: 'VMMCALL', 'VMMCALL': 0x081,
0x082: 'VMLOAD', 'VMLOAD': 0x082,
0x083: 'VMSAVE', 'VMSAVE': 0x083,
0x084: 'STGI', 'STGI': 0x084,
0x085: 'CLGI', 'CLGI': 0x085,
0x086: 'SKINIT', 'SKINIT': 0x086,
0x087: 'RDTSCP', 'RDTSCP': 0x087,
0x088: 'ICEBP', 'ICEBP': 0x088,
0x089: 'WBINVD', 'WBINVD': 0x089,
0x08a: 'MONITOR', 'MONITOR': 0x08a,
0x08b: 'MWAIT', 'MWAIT': 0x08b,
0x08c: 'MWAIT_COND', 'MWAIT_COND': 0x08c,
0x08d: 'XSETBV', 'XSETBV': 0x08d,
0x400: 'NPF', 'NPF': 0x400,
} }
# EC definition of HSR (from arch/arm64/include/asm/kvm_arm.h) # EC definition of HSR (from arch/arm64/include/asm/kvm_arm.h)
AARCH64_EXIT_REASONS = { AARCH64_EXIT_REASONS = {
0x00: 'UNKNOWN', 'UNKNOWN': 0x00,
0x01: 'WFI', 'WFI': 0x01,
0x03: 'CP15_32', 'CP15_32': 0x03,
0x04: 'CP15_64', 'CP15_64': 0x04,
0x05: 'CP14_MR', 'CP14_MR': 0x05,
0x06: 'CP14_LS', 'CP14_LS': 0x06,
0x07: 'FP_ASIMD', 'FP_ASIMD': 0x07,
0x08: 'CP10_ID', 'CP10_ID': 0x08,
0x0C: 'CP14_64', 'CP14_64': 0x0C,
0x0E: 'ILL_ISS', 'ILL_ISS': 0x0E,
0x11: 'SVC32', 'SVC32': 0x11,
0x12: 'HVC32', 'HVC32': 0x12,
0x13: 'SMC32', 'SMC32': 0x13,
0x15: 'SVC64', 'SVC64': 0x15,
0x16: 'HVC64', 'HVC64': 0x16,
0x17: 'SMC64', 'SMC64': 0x17,
0x18: 'SYS64', 'SYS64': 0x18,
0x20: 'IABT', 'IABT': 0x20,
0x21: 'IABT_HYP', 'IABT_HYP': 0x21,
0x22: 'PC_ALIGN', 'PC_ALIGN': 0x22,
0x24: 'DABT', 'DABT': 0x24,
0x25: 'DABT_HYP', 'DABT_HYP': 0x25,
0x26: 'SP_ALIGN', 'SP_ALIGN': 0x26,
0x28: 'FP_EXC32', 'FP_EXC32': 0x28,
0x2C: 'FP_EXC64', 'FP_EXC64': 0x2C,
0x2F: 'SERROR', 'SERROR': 0x2F,
0x30: 'BREAKPT', 'BREAKPT': 0x30,
0x31: 'BREAKPT_HYP', 'BREAKPT_HYP': 0x31,
0x32: 'SOFTSTP', 'SOFTSTP': 0x32,
0x33: 'SOFTSTP_HYP', 'SOFTSTP_HYP': 0x33,
0x34: 'WATCHPT', 'WATCHPT': 0x34,
0x35: 'WATCHPT_HYP', 'WATCHPT_HYP': 0x35,
0x38: 'BKPT32', 'BKPT32': 0x38,
0x3A: 'VECTOR32', 'VECTOR32': 0x3A,
0x3C: 'BRK64', 'BRK64': 0x3C,
} }
# From include/uapi/linux/kvm.h, KVM_EXIT_xxx # From include/uapi/linux/kvm.h, KVM_EXIT_xxx
USERSPACE_EXIT_REASONS = { USERSPACE_EXIT_REASONS = {
0: 'UNKNOWN', 'UNKNOWN': 0,
1: 'EXCEPTION', 'EXCEPTION': 1,
2: 'IO', 'IO': 2,
3: 'HYPERCALL', 'HYPERCALL': 3,
4: 'DEBUG', 'DEBUG': 4,
5: 'HLT', 'HLT': 5,
6: 'MMIO', 'MMIO': 6,
7: 'IRQ_WINDOW_OPEN', 'IRQ_WINDOW_OPEN': 7,
8: 'SHUTDOWN', 'SHUTDOWN': 8,
9: 'FAIL_ENTRY', 'FAIL_ENTRY': 9,
10: 'INTR', 'INTR': 10,
11: 'SET_TPR', 'SET_TPR': 11,
12: 'TPR_ACCESS', 'TPR_ACCESS': 12,
13: 'S390_SIEIC', 'S390_SIEIC': 13,
14: 'S390_RESET', 'S390_RESET': 14,
15: 'DCR', 'DCR': 15,
16: 'NMI', 'NMI': 16,
17: 'INTERNAL_ERROR', 'INTERNAL_ERROR': 17,
18: 'OSI', 'OSI': 18,
19: 'PAPR_HCALL', 'PAPR_HCALL': 19,
20: 'S390_UCONTROL', 'S390_UCONTROL': 20,
21: 'WATCHDOG', 'WATCHDOG': 21,
22: 'S390_TSCH', 'S390_TSCH': 22,
23: 'EPR', 'EPR': 23,
24: 'SYSTEM_EVENT', 'SYSTEM_EVENT': 24,
} }
X86_EXIT_REASONS = { X86_EXIT_REASONS = {
@ -297,13 +297,10 @@ def walkdir(path):
""" """
return next(os.walk(path)) return next(os.walk(path))
def invert(d):
return dict((x[1], x[0]) for x in d.iteritems())
filters = {} filters = {}
filters['kvm_userspace_exit'] = ('reason', invert(USERSPACE_EXIT_REASONS)) filters['kvm_userspace_exit'] = ('reason', USERSPACE_EXIT_REASONS)
if EXIT_REASONS: if EXIT_REASONS:
filters['kvm_exit'] = ('exit_reason', invert(EXIT_REASONS)) filters['kvm_exit'] = ('exit_reason', EXIT_REASONS)
libc = ctypes.CDLL('libc.so.6') libc = ctypes.CDLL('libc.so.6')
syscall = libc.syscall syscall = libc.syscall