最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】__ratelimit: XXX callbacks suppressed

工作和技术 crifan 7710浏览 0评论

【问题】

在给Kernel加入了cpufreq支持,启动了cpu freq的debugging,并且在bootargs中加入cpufreq.debug=1,才能真正打开内核中cpu freq的debug。cpu freq驱动是加入了,但是不定期会出现:

__ratelimit: XXX callbacks suppressed

【解决过程】

1.gogole或百度,无果,但是有人建议查看log,看看是否有帮助,所以去:

cat /var/log/messages

发现这样一堆东西:

Dec 31 21:32:56 uclibc user.debug kernel: [42949461.000001] cpufreq-core: target for CPU 0: 0 kHz, relation 0
Dec 31 21:32:56 uclibc user.debug kernel: [42949461.200000] cpufreq-core: target for CPU 0: 0 kHz, relation 0
Dec 31 21:32:56 uclibc user.debug kernel: [42949461.400000] cpufreq-core: target for CPU 0: 69642 kHz, relation 0
Dec 31 21:32:56 uclibc user.debug kernel: [42949461.600000] cpufreq-core: target for CPU 0: 23214 kHz, relation 0
Dec 31 21:32:57 uclibc user.debug kernel: [42949461.800000] cpufreq-core: target for CPU 0: 0 kHz, relation 0
Dec 31 21:32:57 uclibc user.debug kernel: [42949462.000000] cpufreq-core: target for CPU 0: 0 kHz, relation 0
Dec 31 21:33:00 uclibc user.warn kernel: [42949465.600000] __ratelimit: 17 callbacks suppressed
Dec 31 21:33:00 uclibc user.debug kernel: [42949465.600011] cpufreq-core: target for CPU 0: 0 kHz, relation 0
Dec 31 21:33:01 uclibc user.debug kernel: [42949465.800000] cpufreq-core: target for CPU 0: 0 kHz, relation 0
Dec 31 21:33:01 uclibc user.debug kernel: [42949466.000000] cpufreq-core: target for CPU 0: 0 kHz, relation 0
Dec 31 21:33:01 uclibc user.debug kernel: [42949466.200000] cpufreq-core: target for CPU 0: 0 kHz, relation 0
Dec 31 21:33:01 uclibc user.debug kernel: [42949466.400000] cpufreq-core: target for CPU 0: 0 kHz, relation 0

2.去System.map中,找到了函数__ratelimit,说明此函数,是内核里面有源码的。

3.去source Insight中搜索__ratelimit,发现其中一处:

int printk_ratelimit(void)
{
return __ratelimit(&printk_ratelimit_state);
}
EXPORT_SYMBOL(printk_ratelimit);

【解决办法】

上面信息,加上前面的log中的信息,所以想到了,估计是printk中的打印导致的,因为cpu freq core中,加了debug支持,所以会打印这些东西,而且由于cpu freq的调用频率很高,所以导致printk输出来不及了,所以提示__ratelimit: XXX callbacks suppressed。

知道原因,办法很简单,就是去kernel配置menuconfig中,把debug支持去掉:

CPU Power Management —>    [ ]   Enable CPUfreq debugging

然后同时也把内核启动参数bootargs中的cpufreq.debug=1也去掉,cpu freq code就会不会打印这么多信息了,就不会提示你打印太多,printk都来不及打印了。

【提示】

其他人出现此类问题,很可能也是这类原因,解决办法就是,找到你的内核中到底打印了哪些东西:

cat /var/log/messages

(注意此会无尽的输出,所以等输出一段,看清楚内容后,即可Ctrl +C 中止)

就知道是哪一部分的原因了。比如,USB相关打印太多,导致printk来不及打印等等。

转载请注明:在路上 » 【已解决】__ratelimit: XXX callbacks suppressed

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
79 queries in 0.161 seconds, using 22.11MB memory