summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanosch Frank2016-01-11 16:17:51 +0100
committerPaolo Bonzini2016-01-26 15:58:13 +0100
commitdd0b6a4e101e57f0495b71b03be8217c0df1af14 (patch)
tree79be2c4d284cc3b78d5b33b7078a93df5e226174
parentscripts/kvm/kvm_stat: Cleanup cpu list retrieval (diff)
downloadqemu-dd0b6a4e101e57f0495b71b03be8217c0df1af14.tar.gz
qemu-dd0b6a4e101e57f0495b71b03be8217c0df1af14.tar.xz
qemu-dd0b6a4e101e57f0495b71b03be8217c0df1af14.zip
scripts/kvm/kvm_stat: Encapsulate filters variable
The variable was only used in one class but still was defined globally. Additionaly the detect_platform routine which prepares the data that goes into the variable was called on each start of the script, no matter if the class was needed. To make the variable local to the TracepointProvider class, a new function that calls detect_platform and returns the filters was introduced. Signed-off-by: Janosch Frank <frankja@linux.vnet.ibm.com> Message-Id: <1452525484-32309-22-git-send-email-frankja@linux.vnet.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rwxr-xr-xscripts/kvm/kvm_stat23
1 files changed, 14 insertions, 9 deletions
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 083dd2f6a3..7837f40ea6 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -302,10 +302,14 @@ def get_online_cpus():
cpu_string = cpu_list.readline()
return parse_int_list(cpu_string)
-filters = {}
-filters['kvm_userspace_exit'] = ('reason', USERSPACE_EXIT_REASONS)
-if EXIT_REASONS:
- filters['kvm_exit'] = ('exit_reason', EXIT_REASONS)
+
+def get_filters():
+ detect_platform()
+ filters = {}
+ filters['kvm_userspace_exit'] = ('reason', USERSPACE_EXIT_REASONS)
+ if EXIT_REASONS:
+ filters['kvm_exit'] = ('exit_reason', EXIT_REASONS)
+ return filters
libc = ctypes.CDLL('libc.so.6', use_errno=True)
syscall = libc.syscall
@@ -385,6 +389,7 @@ class Event(object):
class TracepointProvider(object):
def __init__(self):
self.group_leaders = []
+ self.filters = get_filters()
self._fields = self.get_available_fields()
self.setup_traces()
self.fields = self._fields
@@ -394,8 +399,8 @@ class TracepointProvider(object):
fields = walkdir(path)[1]
extra = []
for field in fields:
- if field in filters:
- filter_name_, filter_dicts = filters[field]
+ if field in self.filters:
+ filter_name_, filter_dicts = self.filters[field]
for name in filter_dicts:
extra.append(field + '(' + name + ')')
fields += extra
@@ -420,8 +425,9 @@ class TracepointProvider(object):
match = re.match(r'(.*)\((.*)\)', name)
if match:
tracepoint, sub = match.groups()
- tracefilter = '%s==%d\0' % (filters[tracepoint][0],
- filters[tracepoint][1][sub])
+ tracefilter = ('%s==%d\0' %
+ (self.filters[tracepoint][0],
+ self.filters[tracepoint][1][sub]))
group.add_event(name, event_set='kvm',
tracepoint=tracepoint,
tracefilter=tracefilter)
@@ -652,7 +658,6 @@ def check_access():
def main():
check_access()
- detect_platform()
options = get_options()
providers = get_providers(options)
stats = Stats(providers, fields=options.fields)