kgdb patches for 5.12
Another fairly small set of changes of changes this cycle. The most significant functional change is a fix to better manage the flags when allocating memory. Additionally there is the removal of some unused code (which is slightly more dramatic than it sounds given it means there are now no tasklets in kgdb) together with a tidy up of the debug prints and some spelling corrections for the documentation. Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org> -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEELzVBU1D3lWq6cKzwfOMlXTn3iKEFAmAz6HIACgkQfOMlXTn3 iKFUoRAAqFOqqeMltvNxS/UFCl9N8THyc1jtLZp3eszQGfZ0+bFRqO7ucXBmA+vL V2YyWU6f4p63NnEY/lj5f0xhK59Xc3qYGh3f/cbwZO90Ul8qHCh2UU93LkSWx7Xl 1NqV7CrLZudRpDFx5cGl+PLeK6N0y8jpu+/O/o+mfJHUw4l9ElfpqPytyiXfgGA/ 6t6U9jU95oHH196/Y5fzW9GyO4xJ1ZQMIaEpd2JdM+F4mBG3cMDMTRPyGNLk8Yvd AfKUVCFQcnL/BJTwGNiovlv5APN1cksk9MECkSE2yFE4I1y5L4/GxtazG0MktVVZ oVW+CWJdnnmx7M1PddE3womgaG5lL0IZW8h0QE34EDcLtjJrfkaG2kzTmmrvBazA 8MIHSNbA1oWxv30GmAQ0vQa5ddBEyqrnaYr/ArYDETUV+HPM7V79c1wvUSmPEEwC PDsx4bfVqzWXGADMFbtRdMzKeK93KdFKY5CaGBVgtnU38wZkd8yXGPMB7468utn0 RmdBqYMbzfAFQvcJig0eGJtS8wvXFWS4rxQqUIOwH9SKrWwGjv5S/AMe/rjyTnrp 8Nv8wbi/N0C/gX7an6o5R8lxMfdgz9TQN3BrB2osINltadbrhRuVcFIyRbyIOBki m6P18RQX7lN9d0sS0E0Pz2WCQk3axXBjAuxRANbbnPllo1Ds49w= =fQWC -----END PGP SIGNATURE----- Merge tag 'kgdb-5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/danielt/linux Pull kgdb updates from Daniel Thompson: "Another fairly small set of changes of changes this cycle. The most significant functional change is a fix to better manage the flags when allocating memory. Additionally there is the removal of some unused code (which is slightly more dramatic than it sounds given it means there are now no tasklets in kgdb) together with a tidy up of the debug prints and some spelling corrections for the documentation" * tag 'kgdb-5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/danielt/linux: kgdb: Remove kgdb_schedule_breakpoint() kdb: Make memory allocations more robust kdb: kdb_support: Fix debugging information problem kernel: debug: fix typo issue kgdb: rectify kernel-doc for kgdb_unregister_io_module()
This commit is contained in:
Коммит
899cbb0e53
|
@ -325,7 +325,6 @@ extern char *kgdb_mem2hex(char *mem, char *buf, int count);
|
|||
extern int kgdb_hex2mem(char *buf, char *mem, int count);
|
||||
|
||||
extern int kgdb_isremovedbreak(unsigned long addr);
|
||||
extern void kgdb_schedule_breakpoint(void);
|
||||
extern int kgdb_has_hit_break(unsigned long addr);
|
||||
|
||||
extern int
|
||||
|
|
|
@ -119,7 +119,6 @@ static DEFINE_RAW_SPINLOCK(dbg_slave_lock);
|
|||
*/
|
||||
static atomic_t masters_in_kgdb;
|
||||
static atomic_t slaves_in_kgdb;
|
||||
static atomic_t kgdb_break_tasklet_var;
|
||||
atomic_t kgdb_setting_breakpoint;
|
||||
|
||||
struct task_struct *kgdb_usethread;
|
||||
|
@ -1084,31 +1083,6 @@ static void kgdb_unregister_callbacks(void)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* There are times a tasklet needs to be used vs a compiled in
|
||||
* break point so as to cause an exception outside a kgdb I/O module,
|
||||
* such as is the case with kgdboe, where calling a breakpoint in the
|
||||
* I/O driver itself would be fatal.
|
||||
*/
|
||||
static void kgdb_tasklet_bpt(unsigned long ing)
|
||||
{
|
||||
kgdb_breakpoint();
|
||||
atomic_set(&kgdb_break_tasklet_var, 0);
|
||||
}
|
||||
|
||||
static DECLARE_TASKLET_OLD(kgdb_tasklet_breakpoint, kgdb_tasklet_bpt);
|
||||
|
||||
void kgdb_schedule_breakpoint(void)
|
||||
{
|
||||
if (atomic_read(&kgdb_break_tasklet_var) ||
|
||||
atomic_read(&kgdb_active) != -1 ||
|
||||
atomic_read(&kgdb_setting_breakpoint))
|
||||
return;
|
||||
atomic_inc(&kgdb_break_tasklet_var);
|
||||
tasklet_schedule(&kgdb_tasklet_breakpoint);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kgdb_schedule_breakpoint);
|
||||
|
||||
/**
|
||||
* kgdb_register_io_module - register KGDB IO module
|
||||
* @new_dbg_io_ops: the io ops vector
|
||||
|
@ -1166,7 +1140,7 @@ int kgdb_register_io_module(struct kgdb_io *new_dbg_io_ops)
|
|||
EXPORT_SYMBOL_GPL(kgdb_register_io_module);
|
||||
|
||||
/**
|
||||
* kkgdb_unregister_io_module - unregister KGDB IO module
|
||||
* kgdb_unregister_io_module - unregister KGDB IO module
|
||||
* @old_dbg_io_ops: the io ops vector
|
||||
*
|
||||
* Unregister it with the KGDB core.
|
||||
|
|
|
@ -595,7 +595,7 @@ static char *gdb_hex_reg_helper(int regnum, char *out)
|
|||
dbg_reg_def[i].size);
|
||||
}
|
||||
|
||||
/* Handle the 'p' individual regster get */
|
||||
/* Handle the 'p' individual register get */
|
||||
static void gdb_cmd_reg_get(struct kgdb_state *ks)
|
||||
{
|
||||
unsigned long regnum;
|
||||
|
@ -610,7 +610,7 @@ static void gdb_cmd_reg_get(struct kgdb_state *ks)
|
|||
gdb_hex_reg_helper(regnum, remcom_out_buffer);
|
||||
}
|
||||
|
||||
/* Handle the 'P' individual regster set */
|
||||
/* Handle the 'P' individual register set */
|
||||
static void gdb_cmd_reg_set(struct kgdb_state *ks)
|
||||
{
|
||||
unsigned long regnum;
|
||||
|
|
|
@ -230,7 +230,7 @@ extern struct task_struct *kdb_curr_task(int);
|
|||
|
||||
#define kdb_task_has_cpu(p) (task_curr(p))
|
||||
|
||||
#define GFP_KDB (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL)
|
||||
#define GFP_KDB (in_dbg_master() ? GFP_ATOMIC : GFP_KERNEL)
|
||||
|
||||
extern void *debug_kmalloc(size_t size, gfp_t flags);
|
||||
extern void debug_kfree(void *);
|
||||
|
@ -254,4 +254,14 @@ extern char kdb_prompt_str[];
|
|||
#define KDB_WORD_SIZE ((int)sizeof(unsigned long))
|
||||
|
||||
#endif /* CONFIG_KGDB_KDB */
|
||||
|
||||
#define kdb_func_printf(format, args...) \
|
||||
kdb_printf("%s: " format, __func__, ## args)
|
||||
|
||||
#define kdb_dbg_printf(mask, format, args...) \
|
||||
do { \
|
||||
if (KDB_DEBUG(mask)) \
|
||||
kdb_func_printf(format, ## args); \
|
||||
} while (0)
|
||||
|
||||
#endif /* !_KDBPRIVATE_H */
|
||||
|
|
|
@ -39,20 +39,15 @@
|
|||
*/
|
||||
int kdbgetsymval(const char *symname, kdb_symtab_t *symtab)
|
||||
{
|
||||
if (KDB_DEBUG(AR))
|
||||
kdb_printf("kdbgetsymval: symname=%s, symtab=%px\n", symname,
|
||||
symtab);
|
||||
kdb_dbg_printf(AR, "symname=%s, symtab=%px\n", symname, symtab);
|
||||
memset(symtab, 0, sizeof(*symtab));
|
||||
symtab->sym_start = kallsyms_lookup_name(symname);
|
||||
if (symtab->sym_start) {
|
||||
if (KDB_DEBUG(AR))
|
||||
kdb_printf("kdbgetsymval: returns 1, "
|
||||
"symtab->sym_start=0x%lx\n",
|
||||
symtab->sym_start);
|
||||
kdb_dbg_printf(AR, "returns 1, symtab->sym_start=0x%lx\n",
|
||||
symtab->sym_start);
|
||||
return 1;
|
||||
}
|
||||
if (KDB_DEBUG(AR))
|
||||
kdb_printf("kdbgetsymval: returns 0\n");
|
||||
kdb_dbg_printf(AR, "returns 0\n");
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(kdbgetsymval);
|
||||
|
@ -87,16 +82,14 @@ int kdbnearsym(unsigned long addr, kdb_symtab_t *symtab)
|
|||
#define knt1_size 128 /* must be >= kallsyms table size */
|
||||
char *knt1 = NULL;
|
||||
|
||||
if (KDB_DEBUG(AR))
|
||||
kdb_printf("kdbnearsym: addr=0x%lx, symtab=%px\n", addr, symtab);
|
||||
kdb_dbg_printf(AR, "addr=0x%lx, symtab=%px\n", addr, symtab);
|
||||
memset(symtab, 0, sizeof(*symtab));
|
||||
|
||||
if (addr < 4096)
|
||||
goto out;
|
||||
knt1 = debug_kmalloc(knt1_size, GFP_ATOMIC);
|
||||
if (!knt1) {
|
||||
kdb_printf("kdbnearsym: addr=0x%lx cannot kmalloc knt1\n",
|
||||
addr);
|
||||
kdb_func_printf("addr=0x%lx cannot kmalloc knt1\n", addr);
|
||||
goto out;
|
||||
}
|
||||
symtab->sym_name = kallsyms_lookup(addr, &symbolsize , &offset,
|
||||
|
@ -147,11 +140,8 @@ int kdbnearsym(unsigned long addr, kdb_symtab_t *symtab)
|
|||
|
||||
if (symtab->mod_name == NULL)
|
||||
symtab->mod_name = "kernel";
|
||||
if (KDB_DEBUG(AR))
|
||||
kdb_printf("kdbnearsym: returns %d symtab->sym_start=0x%lx, "
|
||||
"symtab->mod_name=%px, symtab->sym_name=%px (%s)\n", ret,
|
||||
symtab->sym_start, symtab->mod_name, symtab->sym_name,
|
||||
symtab->sym_name);
|
||||
kdb_dbg_printf(AR, "returns %d symtab->sym_start=0x%lx, symtab->mod_name=%px, symtab->sym_name=%px (%s)\n",
|
||||
ret, symtab->sym_start, symtab->mod_name, symtab->sym_name, symtab->sym_name);
|
||||
|
||||
out:
|
||||
debug_kfree(knt1);
|
||||
|
@ -328,7 +318,7 @@ int kdb_getarea_size(void *res, unsigned long addr, size_t size)
|
|||
int ret = copy_from_kernel_nofault((char *)res, (char *)addr, size);
|
||||
if (ret) {
|
||||
if (!KDB_STATE(SUPPRESS)) {
|
||||
kdb_printf("kdb_getarea: Bad address 0x%lx\n", addr);
|
||||
kdb_func_printf("Bad address 0x%lx\n", addr);
|
||||
KDB_STATE_SET(SUPPRESS);
|
||||
}
|
||||
ret = KDB_BADADDR;
|
||||
|
@ -353,7 +343,7 @@ int kdb_putarea_size(unsigned long addr, void *res, size_t size)
|
|||
int ret = copy_from_kernel_nofault((char *)addr, (char *)res, size);
|
||||
if (ret) {
|
||||
if (!KDB_STATE(SUPPRESS)) {
|
||||
kdb_printf("kdb_putarea: Bad address 0x%lx\n", addr);
|
||||
kdb_func_printf("Bad address 0x%lx\n", addr);
|
||||
KDB_STATE_SET(SUPPRESS);
|
||||
}
|
||||
ret = KDB_BADADDR;
|
||||
|
@ -435,7 +425,7 @@ int kdb_getphysword(unsigned long *word, unsigned long addr, size_t size)
|
|||
fallthrough;
|
||||
default:
|
||||
diag = KDB_BADWIDTH;
|
||||
kdb_printf("kdb_getphysword: bad width %ld\n", (long) size);
|
||||
kdb_func_printf("bad width %zu\n", size);
|
||||
}
|
||||
return diag;
|
||||
}
|
||||
|
@ -484,7 +474,7 @@ int kdb_getword(unsigned long *word, unsigned long addr, size_t size)
|
|||
fallthrough;
|
||||
default:
|
||||
diag = KDB_BADWIDTH;
|
||||
kdb_printf("kdb_getword: bad width %ld\n", (long) size);
|
||||
kdb_func_printf("bad width %zu\n", size);
|
||||
}
|
||||
return diag;
|
||||
}
|
||||
|
@ -528,7 +518,7 @@ int kdb_putword(unsigned long addr, unsigned long word, size_t size)
|
|||
fallthrough;
|
||||
default:
|
||||
diag = KDB_BADWIDTH;
|
||||
kdb_printf("kdb_putword: bad width %ld\n", (long) size);
|
||||
kdb_func_printf("bad width %zu\n", size);
|
||||
}
|
||||
return diag;
|
||||
}
|
||||
|
@ -602,8 +592,7 @@ unsigned long kdb_task_state_string(const char *s)
|
|||
res = ~0UL;
|
||||
break;
|
||||
default:
|
||||
kdb_printf("%s: unknown flag '%c' ignored\n",
|
||||
__func__, *s);
|
||||
kdb_func_printf("unknown flag '%c' ignored\n", *s);
|
||||
break;
|
||||
}
|
||||
++s;
|
||||
|
@ -884,18 +873,16 @@ void debug_kusage(void)
|
|||
if (!debug_kusage_one_time)
|
||||
goto out;
|
||||
debug_kusage_one_time = 0;
|
||||
kdb_printf("%s: debug_kmalloc memory leak dah_first %d\n",
|
||||
__func__, dah_first);
|
||||
kdb_func_printf("debug_kmalloc memory leak dah_first %d\n", dah_first);
|
||||
if (dah_first) {
|
||||
h_used = (struct debug_alloc_header *)debug_alloc_pool;
|
||||
kdb_printf("%s: h_used %px size %d\n", __func__, h_used,
|
||||
h_used->size);
|
||||
kdb_func_printf("h_used %px size %d\n", h_used, h_used->size);
|
||||
}
|
||||
do {
|
||||
h_used = (struct debug_alloc_header *)
|
||||
((char *)h_free + dah_overhead + h_free->size);
|
||||
kdb_printf("%s: h_used %px size %d caller %px\n",
|
||||
__func__, h_used, h_used->size, h_used->caller);
|
||||
kdb_func_printf("h_used %px size %d caller %px\n",
|
||||
h_used, h_used->size, h_used->caller);
|
||||
h_free = (struct debug_alloc_header *)
|
||||
(debug_alloc_pool + h_free->next);
|
||||
} while (h_free->next);
|
||||
|
@ -903,8 +890,8 @@ void debug_kusage(void)
|
|||
((char *)h_free + dah_overhead + h_free->size);
|
||||
if ((char *)h_used - debug_alloc_pool !=
|
||||
sizeof(debug_alloc_pool_aligned))
|
||||
kdb_printf("%s: h_used %px size %d caller %px\n",
|
||||
__func__, h_used, h_used->size, h_used->caller);
|
||||
kdb_func_printf("h_used %px size %d caller %px\n",
|
||||
h_used, h_used->size, h_used->caller);
|
||||
out:
|
||||
spin_unlock(&dap_lock);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче