diff --git a/linux-ramdump-parser-v2/parsers/runqueue.py b/linux-ramdump-parser-v2/parsers/runqueue.py index cf6031799edeea739b089d575a543b000561f56b..73ee7ee3e0f256a7ffc23b2fc0ea69cf34d87b72 100644 --- a/linux-ramdump-parser-v2/parsers/runqueue.py +++ b/linux-ramdump-parser-v2/parsers/runqueue.py @@ -40,12 +40,14 @@ class RunQueues(RamParser): def print_task_state(self, status, task_addr): pid_offset = self.ramdump.field_offset('struct task_struct', 'pid') comm_offset = self.ramdump.field_offset('struct task_struct', 'comm') + affinity_offset = self.ramdump.field_offset('struct task_struct', 'cpus_allowed') if 0 < task_addr: pid = self.ramdump.read_int(task_addr + pid_offset) taskname = self.ramdump.read_cstring(task_addr + comm_offset, 16) + affinity = self.ramdump.read_u64(task_addr + affinity_offset) self.print_out_str_with_tab( - '{0}: {1}({2})'.format(status, taskname, pid)) + '{0}: {1}({2}) [affinity={3:x}]'.format(status, taskname, pid, affinity)) else: self.print_out_str_with_tab('{0}: None(0)'.format(status)) diff --git a/linux-ramdump-parser-v2/parsers/taskdump.py b/linux-ramdump-parser-v2/parsers/taskdump.py index 207583f90cb6bdf798548bb1d74cf4a036d54b10..4fbf41386defc47602d70f9b9951f7a130f29d96 100755 --- a/linux-ramdump-parser-v2/parsers/taskdump.py +++ b/linux-ramdump-parser-v2/parsers/taskdump.py @@ -61,6 +61,7 @@ def dump_thread_group(ramdump, thread_group, task_out, taskhighlight_out, check_ offset_stack = ramdump.field_offset('struct task_struct', 'stack') offset_state = ramdump.field_offset('struct task_struct', 'state') offset_prio = ramdump.field_offset('struct task_struct', 'prio') + offset_affine = ramdump.field_offset('struct task_struct', 'cpus_allowed') offset_exit_state = ramdump.field_offset( 'struct task_struct', 'exit_state') orig_thread_group = thread_group @@ -74,6 +75,7 @@ def dump_thread_group(ramdump, thread_group, task_out, taskhighlight_out, check_ next_thread_stack = next_thread_start + offset_stack next_thread_state = next_thread_start + offset_state next_thread_exit_state = next_thread_start + offset_exit_state + next_thread_affine = next_thread_start + offset_affine next_thread_info = ramdump.get_thread_info_addr(next_thread_start) thread_task_name = cleanupString( ramdump.read_cstring(next_thread_comm, 16)) @@ -87,6 +89,9 @@ def dump_thread_group(ramdump, thread_group, task_out, taskhighlight_out, check_ thread_task_pid = ramdump.read_int(next_thread_pid) if thread_task_pid is None: return + thread_task_affine = ramdump.read_u64(next_thread_affine) + if thread_task_affine is None: + return task_state = ramdump.read_word(next_thread_state) if task_state is None: return @@ -124,8 +129,8 @@ def dump_thread_group(ramdump, thread_group, task_out, taskhighlight_out, check_ thread_line = ' ' + thread_line if not first: - task_out.write('Process: {0}, cpu: {1} pid: {2} start: 0x{3:x}\n'.format( - thread_task_name, task_cpu, thread_task_pid, next_thread_start)) + task_out.write('Process: {0}, [affinity: 0x{1:x}] cpu: {2} pid: {3} start: 0x{4:x}\n'.format( + thread_task_name, thread_task_affine, task_cpu, thread_task_pid, next_thread_start)) task_out.write( '=====================================================\n') first = 1