只显示一次warning
前沿
在kmalloc的代码中逻辑树复杂,很可能出现异常。但是出现异常由于kmalloc是非常频繁被调用的函数,所以异常不能每次都打印报错,怎么办?WARN_ON_ONCE来解决
用法:
if (WARN_ON_ONCE(size > KMALLOC_MAX_CACHE_SIZE))
return NULL;
定义:
原理:
定义一个static 然后执行warn_on
举例:kmalloc_slab中判断异常进入的代码
技巧
用在自己的内核代码 有异常只希望全局打印一次。但是可能被频繁调用的地方。
这是一个优雅的函数,你迁怒与我,我只表达一次,后面就不报错了。节约资源。
解决刷屏问题
综述
某些代码逻辑不应该进入,但是可能进入就需要打印,但是又不希望打印多次。本来可以用static自己设置,内核封装一个宏定义搞定。