手撕烂笔头-内核中一些不错的宏定义代码工具之WARN_ON_ONCE-解决异常刷屏问题

文章讨论了在Linux内核kmalloc函数中使用WARN_ON_ONCE处理逻辑树复杂可能导致的异常情况,该方法允许异常只被全局打印一次,避免频繁报错和资源浪费。它提供了一种优雅且节约资源的方式来解决代码中特定异常的打印问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只显示一次warning

前沿

在kmalloc的代码中逻辑树复杂,很可能出现异常。但是出现异常由于kmalloc是非常频繁被调用的函数,所以异常不能每次都打印报错,怎么办?WARN_ON_ONCE来解决

用法:

		if (WARN_ON_ONCE(size > KMALLOC_MAX_CACHE_SIZE))
			return NULL;

定义:

在这里插入图片描述

原理:

定义一个static 然后执行warn_on

举例:kmalloc_slab中判断异常进入的代码

在这里插入图片描述

技巧

用在自己的内核代码 有异常只希望全局打印一次。但是可能被频繁调用的地方。
这是一个优雅的函数,你迁怒与我,我只表达一次,后面就不报错了。节约资源。
解决刷屏问题

综述

某些代码逻辑不应该进入,但是可能进入就需要打印,但是又不希望打印多次。本来可以用static自己设置,内核封装一个宏定义搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值