1、 在kernel中调用__dma_flush_range,底层是如何操作的呢?

/* remove any dirty cache lines on the kernel alias */__dma_flush_range(ptr, ptr + size);
/**  __dma_flush_range(start, end)*  - start   - virtual start address of region*    - end     - virtual end address of region*/
ENTRY(__dma_flush_range)dcache_line_size x2, x3    //获取cache line size, 保存在x2中sub   x3, x2, #1          //x3=x2-1,用于对其的Maskbic x0, x0, x3          //地址对齐,x0就是__dma_flush_range(ptr, ptr + size)中的ptr虚拟地址
1:  dc  civac, x0           // invalid一行cache line,下面这一段是一个循环add x0, x0, x2          //x0 = x0 + cache line sizecmp    x0, x1              //比较x0和__dma_flush_range(ptr, ptr + size)中的ptr+sizeb.lo   1bdsb   syret
ENDPIPROC(__dma_flush_range)
/** dcache_line_size - get the minimum D-cache line size from the CTR register.*/.macro  dcache_line_size, reg, tmpmrs   \tmp, ctr_el0           // read CTRubfm \tmp, \tmp, #16, #19        // cache line size encodingmov  \reg, #4            // bytes per wordlsl    \reg, \reg, \tmp        // actual cache line size

附上civac的寄存器和指令:

最后总结一下,__dma_flush_range(ptr, ptr+size)其实就是 invalid cache这一段虚拟地址

linux kernel中cache代码解读相关推荐

  1. Linux kernel 中模块化的平台驱动代码介绍

    介绍 在linux kernel中通过module_platform_driver来实现模块化平台驱动.大量的设备驱动程序都基于该种方式来实现,使用频次非常的高,在linux kernel 5.4.1 ...

  2. Linux kernel中常见的宏整理

    0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识 ...

  3. linux kernel中的栈的介绍

    目录 1.linux kernel中的中断irq的栈stack (1).arm32体系的irq的栈 (2).arm64体系的irq的栈 2.linux kernel中的栈stack (1).概念介绍: ...

  4. linux kernel中的进程栈

    1.linux中的user mode的进程栈 在thread_info.h中,设置进程栈的大小为16k #define THREAD_SIZE 16384 #define THREAD_START_S ...

  5. linux内核多队列,Linux Kernel 中 Workqueue 使用系统默认队列和创建队列的方法

    关于workqueue,我们还是有很多话要说. 想必大家对workqueue相关的函数(schedule_work .queue_work.INIT_WORK.create_singlethread_ ...

  6. Linux Kernel中AEP的现状和发展

    阿里 石洋内核月谈Yesterday AEP简介 AEP是Intel推出的一种新型的非易失Optane Memory设备,又被称作Apache Pass,所以一般习惯称作AEP.在这之前也有类似的设备 ...

  7. 内存访问顺序 - part2: 屏障及Linux kernel中屏障的使用

    文章目录 屏障是什么 Linux Kernel 中的屏障 Linux 屏障 API 一般的屏障 强制性屏障 SMP 条件屏障 隐式屏障 其他屏障 屏障的开销 未来的文章 本文翻译自 Memory ac ...

  8. linux内核中链表代码分析---list.h头文件分析(一)

    linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17:13:14 在学习数据结构时,有一个重要的知识点就是链表.对于链表的一些基本操作,它的最好学习资料就是内核中的li ...

  9. linux内核中链表代码分析---list.h头文件分析(二)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...

最新文章

  1. 标准氨基酸和质子化氨基酸 三字母 单字母 对应表
  2. 『ExtJS』01 009. ExtJS 4 方法重载
  3. 10月第3周安全回顾 中小企业易受攻击 RealPlayer现漏洞
  4. Jackson ObjectMapper
  5. window系统下安装TensorFlow-gpu
  6. 1564: Strange Class
  7. 【存储过程】Merge Into语句实现Insert/Update在Oracle中的应用
  8. Go-json解码到结构体
  9. spring-security-学习笔记-01-基本概念
  10. go 微服务框架_清晰架构(Clean Architecture)的Go微服务
  11. ajax 验证成功 转跳,利用ajax实现登录:验证完用户信息后如何保存用户信息并实现跳转...
  12. VB界面设计与测试规则
  13. 利用Samba搭建Backup Server配置文件
  14. 软件工程经济学课后答案
  15. 2022年深圳杯数学建模A题代码思路-- 破除“尖叫效应”与“回声室效应”,走出“信息茧房”
  16. 第21课: JSP语句 if判断语句 (JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  17. ArcGIS地理配准(Georeferencing)详解
  18. Win10系统怎么安装cab文件?
  19. 新型企业最重视的评估手段:360评估
  20. 基于精英反向学习的逐维改进蜻蜓算法-附代码

热门文章

  1. 特斯拉:已在中国建立数据中心,以实现数据存储本地化
  2. abstractset java_AbstractSet源码分析-java8
  3. 成功解决windows开机时,系统提示此windows副本不是正版
  4. 成功解决ValueError: row index was 65536, not allowed by .xls format
  5. DL:神经网络算法简介之耗算力的简介、原因、经典模型耗算力计算、GPU使用之详细攻略
  6. py之patsy:patsy的简介、安装、使用方法之详细攻略
  7. Algorithm之OP:OP之GA遗传算法思路理解相关配图资料
  8. 深入浅出统计学 第一章 数据的可视化
  9. HTMLTestRunner加入logging输出
  10. xshell xftp使用