linux kernel中cache代码解读
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代码解读相关推荐
- Linux kernel 中模块化的平台驱动代码介绍
介绍 在linux kernel中通过module_platform_driver来实现模块化平台驱动.大量的设备驱动程序都基于该种方式来实现,使用频次非常的高,在linux kernel 5.4.1 ...
- Linux kernel中常见的宏整理
0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识 ...
- linux kernel中的栈的介绍
目录 1.linux kernel中的中断irq的栈stack (1).arm32体系的irq的栈 (2).arm64体系的irq的栈 2.linux kernel中的栈stack (1).概念介绍: ...
- linux kernel中的进程栈
1.linux中的user mode的进程栈 在thread_info.h中,设置进程栈的大小为16k #define THREAD_SIZE 16384 #define THREAD_START_S ...
- linux内核多队列,Linux Kernel 中 Workqueue 使用系统默认队列和创建队列的方法
关于workqueue,我们还是有很多话要说. 想必大家对workqueue相关的函数(schedule_work .queue_work.INIT_WORK.create_singlethread_ ...
- Linux Kernel中AEP的现状和发展
阿里 石洋内核月谈Yesterday AEP简介 AEP是Intel推出的一种新型的非易失Optane Memory设备,又被称作Apache Pass,所以一般习惯称作AEP.在这之前也有类似的设备 ...
- 内存访问顺序 - part2: 屏障及Linux kernel中屏障的使用
文章目录 屏障是什么 Linux Kernel 中的屏障 Linux 屏障 API 一般的屏障 强制性屏障 SMP 条件屏障 隐式屏障 其他屏障 屏障的开销 未来的文章 本文翻译自 Memory ac ...
- linux内核中链表代码分析---list.h头文件分析(一)
linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17:13:14 在学习数据结构时,有一个重要的知识点就是链表.对于链表的一些基本操作,它的最好学习资料就是内核中的li ...
- linux内核中链表代码分析---list.h头文件分析(二)【转】
转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...
最新文章
- 标准氨基酸和质子化氨基酸 三字母 单字母 对应表
- 『ExtJS』01 009. ExtJS 4 方法重载
- 10月第3周安全回顾 中小企业易受攻击 RealPlayer现漏洞
- Jackson ObjectMapper
- window系统下安装TensorFlow-gpu
- 1564: Strange Class
- 【存储过程】Merge Into语句实现Insert/Update在Oracle中的应用
- Go-json解码到结构体
- spring-security-学习笔记-01-基本概念
- go 微服务框架_清晰架构(Clean Architecture)的Go微服务
- ajax 验证成功 转跳,利用ajax实现登录:验证完用户信息后如何保存用户信息并实现跳转...
- VB界面设计与测试规则
- 利用Samba搭建Backup Server配置文件
- 软件工程经济学课后答案
- 2022年深圳杯数学建模A题代码思路-- 破除“尖叫效应”与“回声室效应”,走出“信息茧房”
- 第21课: JSP语句 if判断语句 (JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
- ArcGIS地理配准(Georeferencing)详解
- Win10系统怎么安装cab文件?
- 新型企业最重视的评估手段:360评估
- 基于精英反向学习的逐维改进蜻蜓算法-附代码
热门文章
- 特斯拉:已在中国建立数据中心,以实现数据存储本地化
- abstractset java_AbstractSet源码分析-java8
- 成功解决windows开机时,系统提示此windows副本不是正版
- 成功解决ValueError: row index was 65536, not allowed by .xls format
- DL:神经网络算法简介之耗算力的简介、原因、经典模型耗算力计算、GPU使用之详细攻略
- py之patsy:patsy的简介、安装、使用方法之详细攻略
- Algorithm之OP:OP之GA遗传算法思路理解相关配图资料
- 深入浅出统计学 第一章 数据的可视化
- HTMLTestRunner加入logging输出
- xshell xftp使用