kdb: Gid rid of implicit setting of the current task / regs
Some (but not all?) of the kdb backtrace paths would cause the
kdb_current_task and kdb_current_regs to remain changed. As discussed
in a review of a previous patch [1], this doesn't seem intuitive, so
let's fix that.
...but, it turns out that there's actually no longer any reason to set
the current task / current regs while backtracing anymore anyway. As
of commit 2277b49258
("kdb: Fix stack crawling on 'running' CPUs
that aren't the master") if we're backtracing on a task running on a
CPU we ask that CPU to do the backtrace itself. Linux can do that
without anything fancy. If we're doing backtrace on a sleeping task
we can also do that fine without updating globals. So this patch
mostly just turns into deleting a bunch of code.
[1] https://lore.kernel.org/r/20191010150735.dhrj3pbjgmjrdpwr@holly.lan
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Link: https://lore.kernel.org/r/20191109111624.4.Ibc3d982bbeb9e46872d43973ba808cd4c79537c7@changeid
Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
This commit is contained in:
Родитель
a8649fb0a8
Коммит
9441d5f6b7
|
@ -119,7 +119,6 @@ kdb_bt_cpu(unsigned long cpu)
|
|||
return;
|
||||
}
|
||||
|
||||
kdb_set_current_task(kdb_tsk);
|
||||
kdb_bt1(kdb_tsk, ~0UL, false);
|
||||
}
|
||||
|
||||
|
@ -166,10 +165,8 @@ kdb_bt(int argc, const char **argv)
|
|||
if (diag)
|
||||
return diag;
|
||||
p = find_task_by_pid_ns(pid, &init_pid_ns);
|
||||
if (p) {
|
||||
kdb_set_current_task(p);
|
||||
if (p)
|
||||
return kdb_bt1(p, ~0UL, false);
|
||||
}
|
||||
kdb_printf("No process with pid == %ld found\n", pid);
|
||||
return 0;
|
||||
} else if (strcmp(argv[0], "btt") == 0) {
|
||||
|
@ -178,11 +175,9 @@ kdb_bt(int argc, const char **argv)
|
|||
diag = kdbgetularg((char *)argv[1], &addr);
|
||||
if (diag)
|
||||
return diag;
|
||||
kdb_set_current_task((struct task_struct *)addr);
|
||||
return kdb_bt1((struct task_struct *)addr, ~0UL, false);
|
||||
} else if (strcmp(argv[0], "btc") == 0) {
|
||||
unsigned long cpu = ~0;
|
||||
struct task_struct *save_current_task = kdb_current_task;
|
||||
if (argc > 1)
|
||||
return KDB_ARGCOUNT;
|
||||
if (argc == 1) {
|
||||
|
@ -204,7 +199,6 @@ kdb_bt(int argc, const char **argv)
|
|||
kdb_bt_cpu(cpu);
|
||||
touch_nmi_watchdog();
|
||||
}
|
||||
kdb_set_current_task(save_current_task);
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
|
|
|
@ -1138,7 +1138,7 @@ static void kdb_dumpregs(struct pt_regs *regs)
|
|||
console_loglevel = old_lvl;
|
||||
}
|
||||
|
||||
void kdb_set_current_task(struct task_struct *p)
|
||||
static void kdb_set_current_task(struct task_struct *p)
|
||||
{
|
||||
kdb_current_task = p;
|
||||
|
||||
|
|
|
@ -240,7 +240,6 @@ extern void *debug_kmalloc(size_t size, gfp_t flags);
|
|||
extern void debug_kfree(void *);
|
||||
extern void debug_kusage(void);
|
||||
|
||||
extern void kdb_set_current_task(struct task_struct *);
|
||||
extern struct task_struct *kdb_current_task;
|
||||
extern struct pt_regs *kdb_current_regs;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче