通过WARN(1,“xxx“) 来确定code的flow和打印callstack
创始人
2024-01-29 00:45:45
0

如果在code中想要确定code 走的flow,可以通过WARN_ONCE(1, "123446");来进行,并且会打印出callstack。这里的1的话,表示条件成立,"123446" 表示一个标识符,这样在log中直接搜素"123446"就可以找到我们的log
static inline int regmap_write(struct regmap *map, unsigned int reg,
                   unsigned int val)
{
    WARN_ONCE(1, "regmap API is disabled");
    return -EINVAL;
}

WARN_ONCE 定义如下:可见最后会调用dump_stack 来打印stack

#define WARN_ONCE(condition, format...)    ({            \
    static bool __section(.data.unlikely) __warned;        \
    int __ret_warn_once = !!(condition);            \
                                \
    if (unlikely(__ret_warn_once && !__warned)) {        \
        __warned = true;                \
        WARN(1, format);                \
    }                            \
    unlikely(__ret_warn_once);                \
})

#ifndef WARN
#define WARN(condition, format...) ({                        \
    int __ret_warn_on = !!(condition);                \
    if (unlikely(__ret_warn_on))                    \
        __WARN_printf(format);                    \
    unlikely(__ret_warn_on);                    \
})
#endif


#define __WARN_printf(arg...)    warn_slowpath_fmt(__FILE__, __LINE__, arg)


#ifdef WANT_WARN_ON_SLOWPATH
void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...)
{
    struct warn_args args;

    args.fmt = fmt;
    va_start(args.args, fmt);
    __warn(file, line, __builtin_return_address(0), TAINT_WARN, NULL,
           &args);
    va_end(args.args);
}


void __warn(const char *file, int line, void *caller, unsigned taint,
        struct pt_regs *regs, struct warn_args *args)
{
    disable_trace_on_warning();

    pr_warn("------------[ cut here ]------------\n");

    if (file)
        pr_warn("WARNING: CPU: %d PID: %d at %s:%d %pS\n",
            raw_smp_processor_id(), current->pid, file, line,
            caller);
    else
        pr_warn("WARNING: CPU: %d PID: %d at %pS\n",
            raw_smp_processor_id(), current->pid, caller);

    if (args)
        vprintk(args->fmt, args->args);

    if (panic_on_warn) {
        /*
         * This thread may hit another WARN() in the panic path.
         * Resetting this prevents additional WARN() from panicking the
         * system on this thread.  Other threads are blocked by the
         * panic_mutex in panic().
         */
        panic_on_warn = 0;
        panic("panic_on_warn set ...\n");
    }

    print_modules();

    if (regs)
        show_regs(regs);
    else
        dump_stack();

    print_oops_end_marker();

    /* Just a warning, don't kill lockdep. */
    add_taint(taint, LOCKDEP_STILL_OK);
}

相关内容

热门资讯

上海小本自主创业持久项目 上海... 虽然今年的疫情人很多人受到了影响,有人看到了市场经济受影响,有人看到了商机。创业大军每年都有很多,虽...
马云说私人定制是最长久的 而它... 手机微信制作平台照片书照片书就是把您手机里的照片,比如,宝宝的照片,爱人的、家人的、朋友的照片,婚纱...
强烈推荐:2019年适合白手起... 世界上大多数胜利的事例,都是从小做起的,创业也不是一开端就有大资本做后台,小本创业是迈向创业疆场的第...
适合小本创业的项目 穷人告别打... 人不能以挣钱为目的,但是又有谁不是在为挣钱而做着不同的努力呢。上班族整天辛苦的加班,但是工资报酬并不...
五种适合小本创业的项目 五种适... 说起创业,我们应该从小本生意做起,我们看看有哪些最新适合小本创业的项目,让我们一起来看一看,希望每个...
适合小本创业的五个好项目 最适... 二胎政策开放很久了,儿童行业是具有潜力的市场,现在的家长都很疼爱自己的孩子,很注重孩子的早期教育培训...
小本投资创业项目有哪些 *新小... 餐饮粥火锅加盟重庆串串中式快餐品牌小型餐饮加盟小吃加盟铁锅焖面加盟中式快餐店十大咖啡品牌品牌快餐老火...
小本创业投资项目2011年 小... 刚开始投资的时候可以试试小本投资,投资金额的大小决定了很多创业项目风险性,投资潜力,今天先为大家分享...
2011年在河北省小本创业投资... 从目前的创业项目看来,女性创业的项目:服装,小吃餐饮,化妆品等,偏门项目。1、想开服装店,如果是初次...
99年版100元值多少钱 99... 杨静国际项目融资经理,既有项目法人融资“往年高交会的主题‘坚持新开展理念、推进高质量开展’,以及以后...