summaryrefslogtreecommitdiff
path: root/scripts/gdb/linux/cpus.py
diff options
context:
space:
mode:
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>2023-06-05 11:10:23 +0100
committerTvrtko Ursulin <tvrtko.ursulin@intel.com>2023-06-05 11:10:23 +0100
commit9ff17e6bdaa50892dd9bdb1b116cb71b73dd711a (patch)
treecbffbccb83865b418a0aabb4487b6e8fe70c590d /scripts/gdb/linux/cpus.py
parentd922b80b1010cd6164fa7d3c197b4fbf94b47beb (diff)
parent2e1492835e439fceba57a5b0f9b17da8e78ffa3d (diff)
Merge drm/drm-next into drm-intel-gt-next
For conflict avoidance we need the following commit: c9a9f18d3ad8 drm/i915/huc: use const struct bus_type pointers Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Diffstat (limited to 'scripts/gdb/linux/cpus.py')
-rw-r--r--scripts/gdb/linux/cpus.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/scripts/gdb/linux/cpus.py b/scripts/gdb/linux/cpus.py
index 9ee99f9fae8d..255dc18cb9da 100644
--- a/scripts/gdb/linux/cpus.py
+++ b/scripts/gdb/linux/cpus.py
@@ -163,16 +163,22 @@ def get_current_task(cpu):
task_ptr_type = task_type.get_type().pointer()
if utils.is_target_arch("x86"):
- var_ptr = gdb.parse_and_eval("&pcpu_hot.current_task")
- return per_cpu(var_ptr, cpu).dereference()
+ if gdb.lookup_global_symbol("cpu_tasks"):
+ # This is a UML kernel, which stores the current task
+ # differently than other x86 sub architectures
+ var_ptr = gdb.parse_and_eval("(struct task_struct *)cpu_tasks[0].task")
+ return var_ptr.dereference()
+ else:
+ var_ptr = gdb.parse_and_eval("&pcpu_hot.current_task")
+ return per_cpu(var_ptr, cpu).dereference()
elif utils.is_target_arch("aarch64"):
- current_task_addr = gdb.parse_and_eval("$SP_EL0")
- if((current_task_addr >> 63) != 0):
- current_task = current_task_addr.cast(task_ptr_type)
- return current_task.dereference()
- else:
- raise gdb.GdbError("Sorry, obtaining the current task is not allowed "
- "while running in userspace(EL0)")
+ current_task_addr = gdb.parse_and_eval("$SP_EL0")
+ if (current_task_addr >> 63) != 0:
+ current_task = current_task_addr.cast(task_ptr_type)
+ return current_task.dereference()
+ else:
+ raise gdb.GdbError("Sorry, obtaining the current task is not allowed "
+ "while running in userspace(EL0)")
else:
raise gdb.GdbError("Sorry, obtaining the current task is not yet "
"supported with this arch")