搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小蓝xlanll
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
电视剧的收视排行榜(Python)_应用列表和元组将以下电视剧按收视率由高到低进行排序: 《give up,hold on to me
2
华为云开发者学堂——学习笔记_华为开发者学堂课程材料咋下载
3
互联网大厂都在裁员,23届计算机专业学生该怎么办?_互联网大厂都在裁员,23届计算机专业学生该怎么办?
4
1.4GHz无人机放大器应用迎来爆发,《民用无人驾驶航空器无线电管理暂行办法》技术解读_1.4ghz什么频段
5
【MySQL数据库】MySQL聚合函数、时间函数、日期函数、窗口函数等函数的使用_firset value 聚合函数
6
Java多线程(九):JUC包下的常见类_juc包有哪些常用的
7
ProtoBuf 的基本介绍
8
PMP如何续证?_pmp续证
9
攻略:Windwos 系统中应用程序访问权限_你的it管理员已限制对此应用的某些区域的访问,并且你尝试访问的项目不可 用。有关
10
五、数据仓库详细介绍(建模)理论篇_数仓 概念模型 逻辑模型
当前位置:
article
> 正文
DO_ONCE 和 printk_once
作者:小蓝xlanll | 2024-04-24 23:49:13
赞
踩
printk_once
DO_ONCE 这个宏是是kernel 为避免一个函数被调用两次而定义的宏
#define DO_ONCE(func, ...) \
({ \
bool ___ret = false; \
static bool ___done = false; \
static struct static_key ___once_key = STATIC_KEY_INIT_TRUE; \
if (static_key_true(&___once_key)) { \
unsigned long ___flags; \
___ret = __do_once_start(&___done, &___flags); \
if (unlikely(___ret)) { \
func(__VA_ARGS__); \
__do_once_done(&___done, &___once_key, \
&___flags); \
} \
} \
___ret; \
})
如果有一个func 只能被调用一次,例如初始化函数的话,则可以用这个宏,如下例所示foo这个函数即使被调用两次,也只会运行一次
* void foo(void)
* {
* DO_ONCE(func, arg);
* }
*
* foo();
* foo();
例如netdev_rss_key_fill 函数可能没调用多次,但是应该除了第一次外,后面的几次直接返回就行了
void netdev_rss_key_fill(void *buffer, size_t len)
{
BUG_ON(len > sizeof(netdev_rss_key));
net_get_random_once(netdev_rss_key, sizeof(netdev_rss_key));
memcpy(buffer, netdev_rss_key, len);
}
#define net_get_random_once(buf, nbytes) \
get_random_once((buf), (nbytes))
#define get_random_once(buf, nbytes) \
DO_ONCE(get_random_bytes, (buf), (nbytes))
对于printk 也有一个once的函数,只会被调用一次,但是必须定义CONFIG_PRINTK
#ifdef CONFIG_PRINTK
#define printk_once(fmt, ...) \
({ \
static bool __print_once __read_mostly; \
bool __ret_print_once = !__print_once; \
\
if (!__print_once) { \
__print_once = true; \
printk(fmt, ##__VA_ARGS__); \
} \
unlikely(__ret_print_once); \
})
}
而且kernel 已经帮我们定义好了不同log level的printk_once,一般推荐直接使用下面的函数.
#define pr_emerg_once(fmt, ...) \
printk_once(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
#define pr_alert_once(fmt, ...) \
printk_once(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
#define pr_crit_once(fmt, ...) \
printk_once(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
#define pr_err_once(fmt, ...) \
printk_once(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
#define pr_warn_once(fmt, ...) \
printk_once(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
#define pr_notice_once(fmt, ...) \
printk_once(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
#define pr_info_once(fmt, ...) \
printk_once(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
#define pr_cont_once(fmt, ...) \
printk_once(KERN_CONT pr_fmt(fmt), ##__VA_ARGS__)
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小蓝xlanll/article/detail/482170
推荐阅读
article
SentencePiece
论文
阅读...
是用于NLP训练中对句子进行token化的工具,跟语言无关,
SentencePiece
中包含了和两种切分subword...
赞
踩
article
6
天掌握
MySQL
基础
--
day1_
6
天精通
mysql
入门教程
...
6
天掌握
MySQL
基础
的第一天,内容主要包括数据库和SQL的概念、
MySQL
的安装与使用以及DQL语言的
基础
查询和条件查...
赞
踩
article
Vue
模块化
以及
封装
Storage
组件实现保存搜索的
历史记录
_
vue
storage
...
Vue
模块化
以及
封装
Storage
组件实现保存搜索的
历史记录
_
vue
storage
vue
storage
...
赞
踩
article
TCP
分组
、IP
分组
、
MTU
、MSS...
TCP
分组
、IP
分组
、
MTU
、MSS什么是
MTU
最大传输单元(Maximum Transmission Unit, MT...
赞
踩
article
Science
Robotics
2017-2023年
封面
论文
研究
总览_
science
roboti...
研究
了远程操作和虚拟现实体验中的参与者,发现增强的触觉反馈与其他感官线索不一致可能会降低主观真实感,产生触觉的恐怖谷。随...
赞
踩
article
uni
-
app
报错
key
重复问题_
uni
app
v
-
for
key
重复...
uni
-
app
报错
key
重复的坑_
uni
app
v
-
for
key
重复
uni
app
v
-
for
key
重复 ...
赞
踩
article
用
OpenVINO
工具包轻松
实现
PP
-
OCR
实时
推理_
openvino
与
paddleoc
...
光学字符识别(
OCR
)技术可以将文件、图片或自然场景中的文字信息进行识别并提取;与一系列的自然语言处理技术联合使用,能够...
赞
踩
article
【
Livox
】安装
Livox
-
ros
-
driver2
_
livox
_
ros
_
driver2
...
【
Livox
】安装
Livox
-
ros
-
driver2
_
livox
_
ros
_
driver2
livox
_
ros
_driver...
赞
踩
article
AI
靠语意理解把照片变
抽象画
,
无需相应数据集
,
只画4
笔
也
保留神韵
,
有
毕加索
内味儿
了
...
...
行早 发自 凹非寺量子位 | 公众号 Qbit
AI
只用几
笔
,
如何勾勒一只动物的简
笔
画
,
很多人从小都没整明白的问题——如今...
赞
踩
article
STM32
(
F407
)——
堆栈
_
stm32f407
堆栈
多大...
堆栈
是一种数据结构。
堆栈
都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。_st...
赞
踩
article
[
Android
]
图片
加载
库
Glide
_
glide
加载
本地
图片
...
Glide
是一个快速高效的
Android
图片
加载
库,可以自动
加载
网络,本地文件,app资源中的文件,注重于平滑的滚动。添...
赞
踩
article
SLAM
入门到入土:在
ubuntu
18上安装
FAST
-
LIO
_
fastlio
安装...
本文介绍了在Ubuntu 18上安装
FAST
-
LIO
的步骤,包括依赖关系和相应的安装链接。
fastlio
安装 ...
赞
踩
article
TextBlob
,
一个
超好
用
的
Python
文本
分析库!...
你好
,
我是郭震
TextBlob
是
一个
非常有趣且对于很多
Python
开发者来说可能还不那么熟悉的库。它提供了
一个
简单的AP...
赞
踩
article
〖
Python
数据库
开发
实战 -
MySQL
篇②〗- 一文通解
关系
型
数据库
与非
关系
型
数据库
_pyt...
关系
型
数据库
的定义:
关系
型
数据库
是
数据库
的一种类型,英文全称为 `Relational database` ,简称 "R...
赞
踩
article
字节
跳动
测试
开发
第一题_
字节
跳动
测试
开发
...
时间限制:1秒空间限制:32768KP为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x的...
赞
踩
article
uniapp
关于
v
-
for
中
key
的
用处_
uniapp
v
-
for
需要
:
key
吗...
在
uniapp
文档中,说明过
:
key
是用来指定列表中项目
的
唯一
的
标识符已经说明了,
key
标识
的
只是对象中
的
一个属性,防...
赞
踩
article
uni
app
打包成
app
v
-for中
key
值类型_
uni
-
app
v
ue3
key
...
环境:
v
ue3
,
uni
app
问题:在
uni
app
非H5端,使用
v
-for循环,
key
值用的是item中的某个参数值(...
赞
踩
article
2020
小迪
安全
第十天
笔记
-(信息
收集
)
资产
监控
拓展
_
小迪
安全
笔记
...
笔记
来源视频:【
小迪
安全
】web
安全
|渗透测试|网络
安全
(6个月线上培训全套)
_
哔哩哔哩
_
bilibili信...
赞
踩
article
应用
在
电磁炉
触控面板中
的
电容式
触摸
芯片_
电磁炉
上哪个是
触摸
感应
控制
的
原件...
电磁炉
的
触摸
面板
应用
了
感应
原理:利用人体
的
电流
感应
进行工作。_
电磁炉
上哪个是
触摸
感应
控制
的
原件
电磁炉
上哪个是
触摸
感应
控制
...
赞
踩
article
java
(
springboot
)百度AI
图片
转文字_
java
用
ai
自动生成
文本
...
java
百度AI
图片
转文字效果描述根据
图片
的网络地址,转换其为
文本
内容。pom.xml配置
...
赞
踩
相关标签
论文阅读
sql
mysql
vue.js
javascript
前端
网络
机器人
机器人期刊
uni-app
python
开发语言
git
机器学习
人工智能
计算机视觉
深度学习
tensorflow
stm32
堆栈
msp
android
kotlin
glide
ubuntu