From d70ee8ddca8c160cb562e6bed0f8fe2e897ad66e Mon Sep 17 00:00:00 2001 From: Gopi Krishna Nedanuri <gnedanur@codeaurora.org> Date: Wed, 26 Jul 2017 22:28:19 +0530 Subject: [PATCH] lrdp_v2: Print timer related info Print timer related info to analyze NS Watchdog issues. Change-Id: Ib398075b58bd7063e24248597c7869ced8d8a645 --- linux-ramdump-parser-v2/watchdog_v2.py | 27 ++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/linux-ramdump-parser-v2/watchdog_v2.py b/linux-ramdump-parser-v2/watchdog_v2.py index bcb87b6..2de9189 100644 --- a/linux-ramdump-parser-v2/watchdog_v2.py +++ b/linux-ramdump-parser-v2/watchdog_v2.py @@ -839,7 +839,7 @@ def get_wdog_timing(ramdump): logical_map = [] jiffies = ramdump.read_word('jiffies') last_jiffies_update = ramdump.read_word('last_jiffies_update') - tick_do_timer_cpu = ramdump.read_word('tick_do_timer_cpu') + tick_do_timer_cpu = ramdump.read_s32('tick_do_timer_cpu') wdog_data_addr = ramdump.read_word('wdog_data') pet_timer_off = ramdump.field_offset( 'struct msm_watchdog_data', 'pet_timer') @@ -858,6 +858,13 @@ def get_wdog_timing(ramdump): bark_time = ramdump.read_int(wdog_data_addr + bark_time_off) wdog_alive_mask = ramdump.read_structure_field( wdog_data_addr, 'struct msm_watchdog_data', 'alive_mask.bits') + tick_bc_mask = ramdump.read_word('tick_broadcast_oneshot_mask') + tick_bc_pending_mask = ramdump.read_word('tick_broadcast_pending_mask') + tick_bc_evt_dev = ramdump.read_structure_field( + 'tick_broadcast_device', 'struct tick_device', 'evtdev') + tick_bc_next_evt = ramdump.read_structure_field( + tick_bc_evt_dev, 'struct clock_event_device', 'next_event') + tick_bc_next_evt = ns_to_sec(tick_bc_next_evt) if (ramdump.kernel_version >= (4, 9, 0)): cpu_online_bits = ramdump.read_word('__cpu_online_mask') else: @@ -877,7 +884,6 @@ def get_wdog_timing(ramdump): wdog_task_queued = ramdump.read_structure_field( wdog_task, 'struct task_struct', 'sched_info.last_queued') logical_map_addr = ramdump.address_of('__cpu_logical_map') - for i in range(0, ramdump.get_num_cpus()): cpu_logical_map_addr = logical_map_addr + (i * 8) core_id = ramdump.read_u64(cpu_logical_map_addr) @@ -924,9 +930,22 @@ def get_wdog_timing(ramdump): 'Timestamp of last timer interrupt(last_jiffies_update): {0}'.format( ns_to_sec(last_jiffies_update))) print_out_str("tick_do_timer_cpu: {0}".format(tick_do_timer_cpu)) - print_out_str('tick_do_timer_cpu is core which increments jiffies and ' - 'processes watchdog pet timer') print_out_str('CPU logical map: {0}'.format(logical_map)) + print_out_str('tick_broadcast_oneshot_mask: {0:08b}'.format(tick_bc_mask)) + print_out_str( + 'tick_broadcast_pending_mask: {0:08b}'.format(tick_bc_pending_mask)) + print_out_str( + 'tick_broad_cast_device next_event: {0:.6f}'.format(tick_bc_next_evt)) + for i in range(0, ramdump.get_num_cpus()): + tick_cpu_device = ramdump.address_of( + 'tick_cpu_device') + ramdump.per_cpu_offset(i) + evt_dev = ramdump.read_structure_field( + tick_cpu_device, 'struct tick_device', 'evtdev') + next_event = ramdump.read_structure_field( + evt_dev, 'struct clock_event_device', 'next_event') + next_event = ns_to_sec(next_event) + print_out_str( + "CPU{0} tick_device next_event: {1:.6f}".format(i, next_event)) epoch_ns = ramdump.read_word('cd.read_data[0].epoch_ns') epoch_cyc = ramdump.read_word('cd.read_data[0].epoch_cyc') print_out_str('epoch_ns: {0}ns epoch_cyc: {1}'.format(epoch_ns,epoch_cyc)) -- GitLab