重置WARN_ONCE

简介: 重置WARN_ONCE

参考

当WARN_ONCE或者WARN_ON_ONCE被第一次触发时,会输出调用栈,后面就不会了。可以使用下面的命令重置,这样再次触发时,还可以输出一次调用栈:

echo 1 > /sys/kernel/debug/clear_warn_once

相关的实现在kernel\panic.c:

/* Support resetting WARN*_ONCE state */
static int clear_warn_once_set(void *data, u64 val)
{
  generic_bug_clear_once();
  memset(__start_once, 0, __end_once - __start_once);
  return 0;
}
DEFINE_DEBUGFS_ATTRIBUTE(clear_warn_once_fops, NULL, clear_warn_once_set,
       "%lld\n");

其中generic_bug_clear_once在lib\bug.c中:

static void clear_once_table(struct bug_entry *start, struct bug_entry *end)
{
  struct bug_entry *bug;
  for (bug = start; bug < end; bug++)
    bug->flags &= ~BUGFLAG_DONE;
}
void generic_bug_clear_once(void)
{
#ifdef CONFIG_MODULES
  struct module *mod;
  rcu_read_lock_sched();
  list_for_each_entry_rcu(mod, &module_bug_list, bug_list)
    clear_once_table(mod->bug_table,
         mod->bug_table + mod->num_bugs);
  rcu_read_unlock_sched();
#endif
  clear_once_table(__start___bug_table, __stop___bug_table);
}

在clear_warn_once_set中做了两件事:

  1. 调用generic_bug_clear_once把模块以及内核自己的所有的bug_entry->flags成员的BUGFLAG_DONE位清除
  2. 将内核的*(.data.once)段的内容清0

也就是说,WARN_ON_ONCE或者WARN_ONCE会利用上面两种数据段的内容来判断是否需要输出上下文信息,这个在后面的文章中再分析。

相关文章
|
6月前
|
存储 自然语言处理 IDE
|
4月前
|
数据库连接
系统日志使用问题之如何区分WARN和ERROR级别的日志
系统日志使用问题之如何区分WARN和ERROR级别的日志
|
5月前
el-progress进度条提示Invalid prop: custom validator check failed for prop “status“
el-progress进度条提示Invalid prop: custom validator check failed for prop “status“
80 0
|
6月前
|
Java 数据库
log4j:WARN Please initialize the log4j system prop
log4j:WARN Please initialize the log4j system prop
47 1
|
Java 程序员
【日志级别】log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL)
【日志级别】log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL)
1684 0
|
Java 项目管理 Spring
【log4j异常】Spring boot项目启动报警告信息,log4j:WARN Please initialize the log4j system properly.
【log4j异常】Spring boot项目启动报警告信息,log4j:WARN Please initialize the log4j system properly.
359 0
|
关系型数据库 MySQL
把log_error_verbosity设置为3,调试连接问题ERROR 2003 (HY000):ERROR 1045 (28000):
mysql 8里面使用global log_error_verbosity控制日志记录的详细程度
|
关系型数据库 数据库 PostgreSQL
pg_log默认是关闭的需要设置参数logging_collector = on启用日志
PostgreSQL有3种日志,分别是pg_log(数据库运行日志)、pg_xlog(WAL 日志,即重做日志)、pg_clog(事务提交日志,记录的是事务的元数据)
142 0
【问题记录】警告:warning.warn(‘Downloading:{}‘.format(url),DownloadWarning)
【问题记录】警告:warning.warn(‘Downloading:{}‘.format(url),DownloadWarning)
【问题记录】警告:warning.warn(‘Downloading:{}‘.format(url),DownloadWarning)
|
Windows 搜索推荐 开发者