| From 5fcf3a55a62afb0760ccb6f391d62f20bce4a42f Mon Sep 17 00:00:00 2001 |
| From: Gavin Shan <gshan@redhat.com> |
| Date: Tue, 10 Dec 2019 15:48:29 +1100 |
| Subject: tools/kvm_stat: Fix kvm_exit filter name |
| |
| From: Gavin Shan <gshan@redhat.com> |
| |
| commit 5fcf3a55a62afb0760ccb6f391d62f20bce4a42f upstream. |
| |
| The filter name is fixed to "exit_reason" for some kvm_exit events, no |
| matter what architect we have. Actually, the filter name ("exit_reason") |
| is only applicable to x86, meaning it's broken on other architects |
| including aarch64. |
| |
| This fixes the issue by providing various kvm_exit filter names, depending |
| on architect we're on. Afterwards, the variable filter name is picked and |
| applied through ioctl(fd, SET_FILTER). |
| |
| Reported-by: Andrew Jones <drjones@redhat.com> |
| Signed-off-by: Gavin Shan <gshan@redhat.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| tools/kvm/kvm_stat/kvm_stat | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/tools/kvm/kvm_stat/kvm_stat |
| +++ b/tools/kvm/kvm_stat/kvm_stat |
| @@ -271,6 +271,7 @@ class ArchX86(Arch): |
| def __init__(self, exit_reasons): |
| self.sc_perf_evt_open = 298 |
| self.ioctl_numbers = IOCTL_NUMBERS |
| + self.exit_reason_field = 'exit_reason' |
| self.exit_reasons = exit_reasons |
| |
| def debugfs_is_child(self, field): |
| @@ -290,6 +291,7 @@ class ArchPPC(Arch): |
| # numbers depend on the wordsize. |
| char_ptr_size = ctypes.sizeof(ctypes.c_char_p) |
| self.ioctl_numbers['SET_FILTER'] = 0x80002406 | char_ptr_size << 16 |
| + self.exit_reason_field = 'exit_nr' |
| self.exit_reasons = {} |
| |
| def debugfs_is_child(self, field): |
| @@ -301,6 +303,7 @@ class ArchA64(Arch): |
| def __init__(self): |
| self.sc_perf_evt_open = 241 |
| self.ioctl_numbers = IOCTL_NUMBERS |
| + self.exit_reason_field = 'esr_ec' |
| self.exit_reasons = AARCH64_EXIT_REASONS |
| |
| def debugfs_is_child(self, field): |
| @@ -312,6 +315,7 @@ class ArchS390(Arch): |
| def __init__(self): |
| self.sc_perf_evt_open = 331 |
| self.ioctl_numbers = IOCTL_NUMBERS |
| + self.exit_reason_field = None |
| self.exit_reasons = None |
| |
| def debugfs_is_child(self, field): |
| @@ -542,8 +546,8 @@ class TracepointProvider(Provider): |
| """ |
| filters = {} |
| filters['kvm_userspace_exit'] = ('reason', USERSPACE_EXIT_REASONS) |
| - if ARCH.exit_reasons: |
| - filters['kvm_exit'] = ('exit_reason', ARCH.exit_reasons) |
| + if ARCH.exit_reason_field and ARCH.exit_reasons: |
| + filters['kvm_exit'] = (ARCH.exit_reason_field, ARCH.exit_reasons) |
| return filters |
| |
| def _get_available_fields(self): |