Skip to content
Snippets Groups Projects
Commit 9a0f96da authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "linux-ramdump-parser-v2: Check for loops in workqueues"

parents eb41c49b 1b7634c6
No related branches found
No related tags found
No related merge requests found
......@@ -269,6 +269,7 @@ class Workqueues(RamParser):
break
worker_pool = workqueue_i + pools_offset
seen = []
# Need better way to ge the number of pools...
for k in range(0, 2):
worker_pool_i = worker_pool + k * worker_pool_size
......@@ -279,9 +280,11 @@ class Workqueues(RamParser):
worker_addr = next_entry - worker_entry_offset
worker_task_addr = ram_dump.read_word(
next_entry - worker_entry_offset + worker_task_offset)
if worker_task_addr is None or worker_task_addr == 0:
if worker_task_addr is None or worker_task_addr == 0 or worker_task_addr in seen:
break
seen.append(worker_task_addr)
taskname = ram_dump.read_cstring(
(worker_task_addr + offset_comm), 16)
scheduled_addr = ram_dump.read_word(
......@@ -420,13 +423,16 @@ class Workqueues(RamParser):
idle_list_addr = worker_pool_i + pool_idle_offset
next_entry = ram_dump.read_word(idle_list_addr)
seen = []
while True:
worker_addr = next_entry - worker_entry_offset
worker_task_addr = ram_dump.read_word(
next_entry - worker_entry_offset + worker_task_offset)
if worker_task_addr is None or worker_task_addr == 0:
if worker_task_addr is None or worker_task_addr == 0 or worker_task_addr in seen:
break
seen.append(worker_task_addr)
taskname = ram_dump.read_cstring(
(worker_task_addr + offset_comm), 16)
scheduled_addr = ram_dump.read_word(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment