mirror of
				https://github.com/ARM-software/devlib.git
				synced 2025-11-04 07:51:21 +00:00 
			
		
		
		
	ftrace: disable trace events not available in the target kernel
In general we could be interested to define a common configuration to use across different kernels. Thus, for a given set of experiments, some trace events can be present only on some kernels and not others. This patch introduces a check for the availability of trace events by ensuring that we consider only those available in the kernel in use in the target. In case of a trace event is not supported in the target kernel we still log a warning. Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com>
This commit is contained in:
		@@ -75,11 +75,12 @@ class FtraceCollector(TraceCollector):
 | 
			
		||||
        self.host_binary = None
 | 
			
		||||
        self.start_time = None
 | 
			
		||||
        self.stop_time = None
 | 
			
		||||
        self.event_string = _build_trace_events(self.events)
 | 
			
		||||
        self.event_string = None
 | 
			
		||||
        self.function_string = None
 | 
			
		||||
        self._reset_needed = True
 | 
			
		||||
 | 
			
		||||
        # Setup tracing paths
 | 
			
		||||
        self.available_events_file    = self.target.path.join(self.tracing_path, 'available_events')
 | 
			
		||||
        self.available_functions_file = self.target.path.join(self.tracing_path, 'available_filter_functions')
 | 
			
		||||
        self.buffer_size_file         = self.target.path.join(self.tracing_path, 'buffer_size_kb')
 | 
			
		||||
        self.current_tracer_file      = self.target.path.join(self.tracing_path, 'current_tracer')
 | 
			
		||||
@@ -104,6 +105,32 @@ class FtraceCollector(TraceCollector):
 | 
			
		||||
                raise TargetError('No trace-cmd found on device and no_install=True is specified.')
 | 
			
		||||
            self.target_binary = 'trace-cmd'
 | 
			
		||||
 | 
			
		||||
        # Validate required events to be traced
 | 
			
		||||
        available_events = self.target.execute(
 | 
			
		||||
                'cat {}'.format(self.available_events_file)).splitlines()
 | 
			
		||||
        selected_events = []
 | 
			
		||||
        for event in self.events:
 | 
			
		||||
            # Convert globs supported by FTrace into valid regexp globs
 | 
			
		||||
            _event = event
 | 
			
		||||
            if event[0] != '*':
 | 
			
		||||
                _event = '*' + event
 | 
			
		||||
            event_re = re.compile(_event.replace('*', '.*'))
 | 
			
		||||
            # Select events matching the required ones
 | 
			
		||||
            if len(filter(event_re.match, available_events)) == 0:
 | 
			
		||||
                message = 'Event [{}] not available for tracing'.format(event)
 | 
			
		||||
                if strict:
 | 
			
		||||
                    raise TargetError(message)
 | 
			
		||||
                self.target.logger.warning(message)
 | 
			
		||||
            else:
 | 
			
		||||
                selected_events.append(event)
 | 
			
		||||
        # If function profiling is enabled we always need at least one event.
 | 
			
		||||
        # Thus, if not other events have been specified, try to add at least
 | 
			
		||||
        # a tracepoint which is always available and possibly triggered few
 | 
			
		||||
        # times.
 | 
			
		||||
        if self.functions and len(selected_events) == 0:
 | 
			
		||||
            selected_events = ['sched_wakeup_new']
 | 
			
		||||
        self.event_string = _build_trace_events(selected_events)
 | 
			
		||||
 | 
			
		||||
        # Check for function tracing support
 | 
			
		||||
        if self.functions:
 | 
			
		||||
            if not self.target.file_exists(self.function_profile_file):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user