提交 81d44507 编写于 作者: J Jason Wessel

vt,console,kdb: automatically set kdb LINES variable

The kernel console interface stores the number of lines it is
configured to use. The kdb debugger can greatly benefit by knowing how
many lines there are on the console for the pager functionality
without having the end user compile in the setting or have to
repeatedly change it at run time.
Signed-off-by: NJason Wessel <jason.wessel@windriver.com>
Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
CC: David Airlie <airlied@linux.ie>
CC: Andrew Morton <akpm@linux-foundation.org>
上级 b45cfba4
...@@ -104,6 +104,7 @@ ...@@ -104,6 +104,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <asm/system.h> #include <asm/system.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/kdb.h>
#define MAX_NR_CON_DRIVER 16 #define MAX_NR_CON_DRIVER 16
...@@ -3442,6 +3443,22 @@ int con_debug_enter(struct vc_data *vc) ...@@ -3442,6 +3443,22 @@ int con_debug_enter(struct vc_data *vc)
console_blanked = 0; console_blanked = 0;
if (vc->vc_sw->con_debug_enter) if (vc->vc_sw->con_debug_enter)
ret = vc->vc_sw->con_debug_enter(vc); ret = vc->vc_sw->con_debug_enter(vc);
#ifdef CONFIG_KGDB_KDB
/* Set the initial LINES variable if it is not already set */
if (vc->vc_rows < 999) {
int linecount;
char lns[4];
const char *setargs[3] = {
"set",
"LINES",
lns,
};
if (kdbgetintenv(setargs[0], &linecount)) {
snprintf(lns, 4, "%i", vc->vc_rows);
kdb_set(2, setargs);
}
}
#endif /* CONFIG_KGDB_KDB */
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(con_debug_enter); EXPORT_SYMBOL_GPL(con_debug_enter);
......
...@@ -114,4 +114,8 @@ enum { ...@@ -114,4 +114,8 @@ enum {
KDB_INIT_EARLY, KDB_INIT_EARLY,
KDB_INIT_FULL, KDB_INIT_FULL,
}; };
extern int kdbgetintenv(const char *, int *);
extern int kdb_set(int, const char **);
#endif /* !_KDB_H */ #endif /* !_KDB_H */
...@@ -144,9 +144,7 @@ extern int kdb_getword(unsigned long *, unsigned long, size_t); ...@@ -144,9 +144,7 @@ extern int kdb_getword(unsigned long *, unsigned long, size_t);
extern int kdb_putword(unsigned long, unsigned long, size_t); extern int kdb_putword(unsigned long, unsigned long, size_t);
extern int kdbgetularg(const char *, unsigned long *); extern int kdbgetularg(const char *, unsigned long *);
extern int kdb_set(int, const char **);
extern char *kdbgetenv(const char *); extern char *kdbgetenv(const char *);
extern int kdbgetintenv(const char *, int *);
extern int kdbgetaddrarg(int, const char **, int*, unsigned long *, extern int kdbgetaddrarg(int, const char **, int*, unsigned long *,
long *, char **); long *, char **);
extern int kdbgetsymval(const char *, kdb_symtab_t *); extern int kdbgetsymval(const char *, kdb_symtab_t *);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册