Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1836069 authored by Stefan Raspl's avatar Stefan Raspl Committed by Paolo Bonzini
Browse files

tools/kvm_stat: fix trace setup glitch on field updates in TracepointProvider



Updating the fields of the TracepointProvider does not propagate changes to the
tracepoints. This shows when a pid filter is enabled, whereby subsequent
extensions of the fields of the Tracepoint provider (e.g. by toggling
drilldown) will not modify the tracepoints as required.
To reproduce, select a specific process via interactive command 'p', and
enable drilldown via 'x' - none of the fields with the braces will appear
although they should.
The fix will always leave all available fields in the TracepointProvider
enabled.

Signed-off-by: default avatarStefan Raspl <raspl@linux.vnet.ibm.com>
Based-on-text-by: default avatarJanosch Frank <frankja@linux.vnet.ibm.com>
Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
parent e0ba3876
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -550,6 +550,7 @@ class TracepointProvider(object):
    def setup_traces(self):
        """Creates all event and group objects needed to be able to retrieve
        data."""
        fields = self.get_available_fields()
        if self._pid > 0:
            # Fetch list of all threads of the monitored pid, as qemu
            # starts a thread for each vcpu.
@@ -560,7 +561,7 @@ class TracepointProvider(object):

        # The constant is needed as a buffer for python libs, std
        # streams and other files that the script opens.
        newlim = len(groupids) * len(self._fields) + 50
        newlim = len(groupids) * len(fields) + 50
        try:
            softlim_, hardlim = resource.getrlimit(resource.RLIMIT_NOFILE)

@@ -576,7 +577,7 @@ class TracepointProvider(object):

        for groupid in groupids:
            group = Group()
            for name in self._fields:
            for name in fields:
                tracepoint = name
                tracefilter = None
                match = re.match(r'(.*)\((.*)\)', name)