-iomem解析

在看Linux的i2s源码时,里面有个定义:void __iomem *base;

这个__iomem是个什么东西,蒙蔽了。在include/linux/compile.h这个文件查看其宏定义为:

#ifdef __CHECKER__

# define __user __attribute__((noderef, address_space(1)))

# define __kernel __attribute__((address_space(0)))

# define __safe __attribute__((safe))

# define __force __attribute__((force))

# define __nocast __attribute__((nocast))

# define __iomem __attribute__((noderef, address_space(2)))

# define __must_hold(x) __attribute__((context(x,1,1)))

# define __acquires(x) __attribute__((context(x,0,1)))

# define __releases(x) __attribute__((context(x,1,0)))

# define __acquire(x) __context__(x,1)

# define __release(x) __context__(x,-1)

# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)

# define __percpu __attribute__((noderef, address_space(3)))

#ifdef CONFIG_SPARSE_RCU_POINTER

# define __rcu __attribute__((noderef, address_space(4)))

#else

# define __rcu

#endif

iomem这个特性,即__attribute((noderef, address_space(2))),attribute是用来修饰一个变量的,这个变量必须是非解除参考(no dereference)的,即这个变量地址必须是有效的,而且变量所在的地址空间必须是2,即io存储空间。

0.1.2.3分别对应四个空间

address_space(v)

————————————-

v: 0 内核空间

v: 1 用户空间

v: 2 io存储空间

v: 3 cpu空间

那这个address_space(4)又是啥呢,查了一些资料,如下:

# define __rcu __attribute__((noderef, address_space(4)))

1

RCU代表的是 “read, copy, update”。它是一种算法,允许多个读者访问数据,并且同时允许修改者,删除者能够进行操作。

如果内核使用 CONFIG_SPARSE_RCU_POINTER 的编译, __rcu 就会被定义为上面的定义。

这是一种标记,可以给Sparse code 分析工具来对于某些东西进行警告。

引用 http://stackoverflow.com/questions/17128210/what-does-rcu-stands-for-in-linux

可以知道: __rcu sparse 检查:使用__rcu 附上 RCU保护的数据结构,如果你没有使用rcu_dereference()类中某个函数,Sparse就会警告你这个操作。

————————————————

版权声明:本文为CSDN博主「夜风~」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u014470361/java/article/details/80682101

linux分配iomem,linux 下__iomem 解析【转】相关推荐

  1. linux分配iomem,Linux中__iomem

    这是个IO map的问题,根据系统的具体情况,把寄存器映射到虚拟地址的特定位置,这样,访问寄存器就可以像访问普通内存一样简单方便了. __iomem是linux2.6.9内核中加入的特性.是用来个表示 ...

  2. linux分配内核,linux 内核分配算法

    分配 unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) 直接从buddy系统中得到原始页.最原始的分配方式. sla ...

  3. Linux内核很吊之 module_init解析 (下)【转】

    转自:https://blog.csdn.net/richard_liujh/article/details/46758073 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  4. 上海域格ASR和高通模块 USB端口分配及Linux下拨号说明

    上海域格ASR和高通模块 USB端口分配及Linux下拨号说明 一.域格 ASR模块端口分配 1.Windows下模块端口分配如下: interface 0 → RNDIS interface 1 → ...

  5. Linux内核很吊之 module_init解析 (下)

    Linux内核很吊之 module_init解析 (下) 转载 2017年01月23日 13:58:21 标签: 95 编辑 删除 转自: http://blog.csdn.net/richard_l ...

  6. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  7. 蜗蜗 Linux内核芬妮下,Linux内核的整体架构

    作者:蜗蜗 发布于:2014-2-21 13:23 分类:Linux内核分析 1. 前言 本文是"Linux内核分析"系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内 ...

  8. linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...

    第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elasticsearc ...

  9. linux+分配挂载点权限,Linux系统管理(一)——初学者建议

    学习Linux的注意事项(一) Linux严格区分大小写 Linux是严格区分大小写的,这一点和Windows不一样,所以操作时要注意区分大小写的不同,包括文件名和目录名.命令.命令选项.配置文件配置 ...

最新文章

  1. graylog2安装
  2. python画图哆啦a梦-Python小白绘图 哆唻A梦 turtle真的很强大!
  3. UA MATH563 概率论的数学基础 鞅论初步7 停时与Upcrossing不等式
  4. 全球著名 CMS 产品大全
  5. Selenium 与 PhantomJS
  6. 如何处理non-resolvable parent POM的错误
  7. uva minesweep 水题
  8. vue 获取url地址的参数_Vue 网络请求框架 axios 使用教程
  9. 最常用常见通用字体有哪些
  10. Cat5e、Cat6、Cat6a和Cat7网线有什么区别?哪个更好?
  11. 【物联网】全球SIM连接解决IoT设备换卡难问题
  12. 在Pytorch中显示网络每层的输出特征图大小、参数、显存占用、参数量的工具---pytorch-summary
  13. 什么是CBR,VBV,CPB
  14. 暮拾晨花,回望流年——我的2016
  15. 配置路由器console接口密码和vty接口密码
  16. 2022-2028年中国微创治疗行业市场运行态势及发展战略研究报告
  17. 如何评测光源的好坏?
  18. Human Pose Estimation with Spatial Contextual Information(CVPR2019)
  19. 聊一聊Spring中@Transactional注解及其失效的七种场景
  20. gRPC是什么,怎么用

热门文章

  1. c语言编程计算π的值
  2. FreeRTOS应用——消息队列
  3. Shiro 生成秘钥
  4. MLCC陶瓷电容详解
  5. 吉尔布雷斯的动作研究—《可以量化的管理学》
  6. “财界奥斯卡”CGMA全球管理会计中国大奖榜单公布
  7. Metal 系列教程
  8. 男人最渴望拥有的十类妻子
  9. 2021年山东省安全员C证考试题及山东省安全员C证报名考试
  10. Qt官方示例:Fridge Magnets Example(冰箱贴)