diff --git a/linux-ramdump-parser-v2/watchdog_v2.py b/linux-ramdump-parser-v2/watchdog_v2.py index 409eec64db13c4e37e0d0050f3051e85f0ca59b0..bcb87b69c057d32715a85e260d491a5cb3989e11 100644 --- a/linux-ramdump-parser-v2/watchdog_v2.py +++ b/linux-ramdump-parser-v2/watchdog_v2.py @@ -858,7 +858,10 @@ 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') - cpu_online_bits = ramdump.read_word('cpu_online_bits') + if (ramdump.kernel_version >= (4, 9, 0)): + cpu_online_bits = ramdump.read_word('__cpu_online_mask') + else: + cpu_online_bits = ramdump.read_word('cpu_online_bits') wdog_task = ramdump.read_structure_field( wdog_data_addr, 'struct msm_watchdog_data', 'watchdog_task') wdog_task_state = ramdump.read_structure_field( @@ -875,14 +878,10 @@ def get_wdog_timing(ramdump): wdog_task, 'struct task_struct', 'sched_info.last_queued') logical_map_addr = ramdump.address_of('__cpu_logical_map') -# Assuming number of cores per cluster as 4 in case of multicluster. -# New targets has only one cluster. So this will work for both. 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) - phys_core = (core_id & 0x00FF) + ((core_id >> 8) * 4) - logical_map.append(phys_core) - + logical_map.append(core_id) print_out_str('Non-secure Watchdog data') print_out_str('Pet time: {0}s'.format(pet_time / 1000.0)) print_out_str('Bark time: {0}s'.format(bark_time / 1000.0))