You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
DLPX-87579 sdb: use drgn helper for task states (#341)
= Problem
Currently having our own custom function for figuring out a task's
state has two drawbacks:
1] As we saw in a2bdd57 things can
get out of date and it is up to us to fix them.
2] There are some weird edge cases that we don't handle as well
like the following crash that I have never been able to reproduce
locally but it occasionally reproduces in the Github runners
of PR #337:
```
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/internal/repl.py", line 107, in eval_cmd
for obj in invoke([], input_):
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/pipeline.py", line 152, in invoke
yield from execute_pipeline(first_input, pipeline)
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/pipeline.py", line 84, in execute_pipeline
yield from massage_input_and_call(pipeline[-1], this_input)
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/pipeline.py", line 67, in massage_input_and_call
yield from cmd.call(objs)
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/command.py", line 413, in call
yield from self.__invalid_memory_objects_check(
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/command.py", line 358, in __invalid_memory_objects_check
for obj in objs:
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/command.py", line 625, in _call
self.pretty_print(self.caller(objs))
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/commands/linux/stacks.py", line 407, in pretty_print
self.print_stacks(filter(self.match_stack, objs))
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/commands/linux/stacks.py", line 382, in print_stacks
for stack_key, tasks in KernelStacks.aggregate_stacks(objs):
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/commands/linux/stacks.py", line 375, in aggregate_stacks
stack_key = (KernelStacks.task_struct_get_state(task),
File "/usr/local/lib/python3.8/dist-packages/sdb-0.1.0-py3.8.egg/sdb/commands/linux/stacks.py", line 221, in task_struct_get_state
return KernelStacks.TASK_STATES[(state | exit_state) & 0x7f]
KeyError: 101
```
= This Patch
Uses the drgn helper whose implementation handles more edge cases
and is more probable to stay up to date with the latest kernels
while keeping backwards compatibility.
= Testing
The above stack trace that I was able to reproduce consistently
in that PR no longer shows up with this patch.
0 commit comments