当前位置: 首页 > news >正文

lockdep状态相关定义如LOCK_ENABLED_HARDIRQ

文章目录

  • 1. LOCK_ENABLED_HARDIRQ定义在哪?
  • 2. HARDIRQ和SOFTIRQ
    • 2.1 基础枚举型 enum lock_usage_bit
    • 2.2 Usage-state bitmasks

1. LOCK_ENABLED_HARDIRQ定义在哪?

诸多上下文状态如LOCK_ENABLED_HARDIRQ等直接搜索没看到定义。它的定义在头文件lockdep_internals.h中,而lockdep_internals.h引用的头文件是lockdep_states.h。

  • lockdep_internals.h
  • lockdep_states.h

2. HARDIRQ和SOFTIRQ

lockdep_internals.h文件中定义了很多型如下面宏定义的数据结构:

#define LOCKDEP_STATE(__STATE) //定义
....
#include "lockdep_states.h"   //包含
#undef LOCKDEP_STATE          //取消定义

都是“定义 > 包含 > 取消定义” 》“定义 > 包含 > 取消定义” 》…

2.1 基础枚举型 enum lock_usage_bit

看第一个例子:enum lock_usage_bit

enum lock_usage_bit {
#define LOCKDEP_STATE(__STATE)		\LOCK_USED_IN_##__STATE,		\LOCK_USED_IN_##__STATE##_READ,	\LOCK_ENABLED_##__STATE,		\LOCK_ENABLED_##__STATE##_READ,
#include "lockdep_states.h"
#undef LOCKDEP_STATELOCK_USED,LOCK_USAGE_STATES
};

将lockdep_states.h两行包含进来:

LOCKDEP_STATE(HARDIRQ)
LOCKDEP_STATE(SOFTIRQ)

变成:

enum lock_usage_bit {
#define LOCKDEP_STATE(__STATE)		\LOCK_USED_IN_##__STATE,			\LOCK_USED_IN_##__STATE##_READ,	\LOCK_ENABLED_##__STATE,			\LOCK_ENABLED_##__STATE##_READ,LOCKDEP_STATE(HARDIRQ)			//(1)LOCKDEP_STATE(SOFTIRQ)			//(2)
#undef LOCKDEP_STATELOCK_USED,LOCK_USAGE_STATES
};

(1) 和 (2)分别展开也即__STATE分别替换成HARDIRQ和SOFTIRQ:

/** Lock-class usage-state bits:*/
enum lock_usage_bit {LOCK_USED_IN_HARDIRQ,	LOCK_USED_IN_HARDIRQ_READ,	LOCK_ENABLED_HARDIRQ,LOCK_ENABLED_HARDIRQ_READ,LOCK_USED_IN_SOFTIRQ,	LOCK_USED_IN_SOFTIRQ_READ,	LOCK_ENABLED_SOFTIRQ,LOCK_ENABLED_SOFTIRQ_READ,LOCK_USED,LOCK_USAGE_STATES
};

这个是基础,其他枚举或宏均基于这个枚举。

2.2 Usage-state bitmasks

/** Usage-state bitmasks:*/
enum {LOCKF_USED_IN_HARDIRQ =  (1 << LOCK_USED_IN_HARDIRQ),LOCKF_USED_IN_HARDIRQ_READ =  (1 << LOCK_USED_IN_HARDIRQ_READ),LOCKF_ENABLED_HARDIRQ =  (1 << LOCK_ENABLED_HARDIRQ),LOCKF_ENABLED_HARDIRQ_READ =  (1 << LOCK_ENABLED_HARDIRQ_READ),LOCKF_USED_IN_SOFTIRQ =  (1 << LOCK_USED_IN_SOFTIRQ),LOCKF_USED_IN_SOFTIRQ_READ =  (1 << LOCK_USED_IN_SOFTIRQ_READ),LOCKF_ENABLED_SOFTIRQ =  (1 << LOCK_ENABLED_SOFTIRQ),LOCKF_ENABLED_SOFTIRQ_READ =  (1 << LOCK_ENABLED_SOFTIRQ_READ),LOCKF_USED = (1 << LOCK_USAGE_STATES),
};static const unsigned long LOCKF_ENABLED_IRQ = LOCKF_ENABLED_HARDIRQ | LOCKF_ENABLED_SOFTIRQ | 0;
static const unsigned long LOCKF_USED_IN_IRQ = LOCKF_USED_IN_HARDIRQ | LOCKF_USED_IN_SOFTIRQ | 0;
static const unsigned long LOCKF_ENABLED_IRQ_READ = LOCKF_ENABLED_HARDIRQ_READ | LOCKF_ENABLED_SOFTIRQ_READ | 0;
static const unsigned long LOCKF_USED_IN_IRQ_READ = LOCKF_USED_IN_HARDIRQ_READ | LOCKF_USED_IN_SOFTIRQ_READ | 0;
http://www.dtcms.com/a/601682.html

相关文章:

  • seo优化网站查询网站流量狂刷器
  • 网页制作门户网站案例joomla 2.5:你的网站建设_使用与管理
  • BUUCTF-Misc
  • DFS-排列数字和n皇后-java实现
  • 3.2 自注意力与多头注意力:并行计算不同特征的秘密武器
  • 宁夏建设教育协会网站如何建立公司邮箱
  • 基于昇腾 配置pytorch环境
  • 武威做网站品牌平价网站建设
  • SpringBoot19-@Qualifier用法
  • 工程公司的会计做账有哪些科目官网seo怎么做
  • C语言:一种编译器?| 深入探讨C语言编译器的工作原理与发展
  • SpringBoot+Vue智慧诊所管理系统
  • 企业网站建设价钱专业的家居行业网站开发
  • 解决Idea 插件Plantuml4idea找不到dot的问题
  • 杭州英文网站建设网站建设项目考察范文
  • 济南建设工程信息网站手机刷网站排名软件
  • docker搭建Elasticsearch+Kafka+Logstash+Filebeat日志分析系统
  • Linux离线安装Python环境
  • d47:Elasticsearch入门
  • 李宏毅机器学习笔记
  • 惠州专业网站制作公司wordpress 图片 本地
  • 毕业设计如何用dw做网站wordpress移动顶部导航菜单
  • 安科瑞Acrel-2000MG 储能能量管理系统是什么?什么场景需要用到?
  • 政策加码:中小学人工智能教育新图景
  • 全域释放活力,增长质效兼收——2025年“双11”大促第一周期观察
  • 上海华东建设发展设计有限公司网站网址域名ip
  • 平邑网站制作在线做头像的网站有哪些
  • 沈阳工务建设集团网站淘客cms建站系统
  • 深度学习_神经网络中最常用的学习率优化算法
  • INT301 Bio-computation 生物计算(神经网络)Pt.7 时间序列预测和Elman网络