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

Linux之arm SMMUv3 驱动重要宏和函数解析(11)

1.ARM_LPAE_LVL_SHIFT

ARM_LPAE_LVL_SHIFT宏计算第l级页表在虚拟地址中的偏移。如果页表大小为4KB,采用4级页表,具体如下:

  • 级别3(最低级):(4-3)*9 + 3 = 12 比特偏移
  • 级别2:(4-2)*9 + 3 = 21 比特偏移
  • 级别1:(4-1)*9 + 3 = 30 比特偏移
  • 级别0(根级):(4-0)*9 + 3 = 39 比特偏移
[drivers/iommu/io-pgtable-arm.c]
#define ARM_LPAE_MAX_ADDR_BITS             52
#define ARM_LPAE_S2_MAX_CONCAT_PAGES       16
#define ARM_LPAE_MAX_LEVELS                4
/* 4KB : bits_per_level == 9,* 16KB: bits_per_level == 11,* 64KB: bits_per_level == 13,* ilog2(sizeof(arm_lpae_iopte)) == 3*/
#define ARM_LPAE_LVL_SHIFT(l,d)                                 \(((ARM_LPAE_MAX_LEVELS - (l)) * (d)->bits_per_level) +  \ilog2(sizeof(arm_lpae_iopte)))

2.ARM_LPAE_GRANULE

ARM_LPAE_GRANULE宏用于计算页表(除了根页表大小)大小。

[drivers/iommu/io-pgtable-arm.c]
// 4KB = (0x8 << 9), 16KB = (0x8 << 11), 64KB = (0x8 << 13), 
#define ARM_LPAE_GRANULE(d)                   \(sizeof(arm_lpae_iopte) << (d)->bits_per_level)

3.ARM_LPAE_PGD_SIZE

ARM_LPAE_PGD_SIZE宏用于计算根页表大小,通常情况下,根页表和其他页表大小相等。由于根页表访问频率较高,有些系统中会进行优化,根页表大小可能会大于其他页表。

[drivers/iommu/io-pgtable-arm.c]
// 4KB = (0x8 << 9)
#define ARM_LPAE_PGD_SIZE(d)                      \(sizeof(arm_lpae_iopte) << (d)->pgd_bits)

4.ARM_LPAE_PTES_PER_TABLE

ARM_LPAE_PTES_PER_TABLE用于计算每个页表包含的页表项数量。

  1. 4KB粒度,8字节页表项
    1. ARM_LPAE_GRANULE(d) = 4096(4KB)
    2. sizeof(arm_lpae_iopte) = 8(字节)
    3. ilog2(8) = 3(因为2^3=8)
    4. 计算:4096 >> 3 = 4096 ÷ 8 = 512个页表项
  2. 16KB粒度,8字节页表项
    1. ARM_LPAE_GRANULE(d) = 16384(16KB)
    2. sizeof(arm_lpae_iopte) = 8
    3. ilog2(8) = 3
    4. 计算:16384 >> 3 = 16384 ÷ 8 = 2048个页表项
  3. 64KB粒度,8字节页表项
http://www.dtcms.com/a/569701.html

相关文章:

  • 网站功能介绍是什么自贡网站设计
  • 做企业网站设wordpress多媒体权限
  • CTF WEB入门 命令执行篇 50-70
  • 利用网上菜谱做网站公众号开发公司排行榜
  • 免费搭建视频网站硬件开发板
  • Mysql中页分裂、合并的问题
  • Qt 的 QSqlDatabase 不能跨线程复用
  • Qt-QtCharts
  • 某番切小说畅听红果等提示“低版本不安全”的解决方案
  • 昆明网站seo技术厂家网站设计远程培训
  • Linux基本架构
  • 任务调度框架:PowerJob、XXL-Job、OpenJob
  • 做模型挣钱的网站wordpress中英文切换
  • TensorFlow Keras
  • 萧山做网站的企业wordpress集成关注公众和登陆
  • 详解EtherNet/IP转CAN边缘计算网关:基恩士PLC与CAN IO卡通讯配置步骤
  • 网站权重的提升河北网站制作多少钱
  • .net实现redis下单超卖(jmeter高并发测试)(自己记录用)
  • 全自动壁纸采集源码
  • 公司用员工信息做网站域名备案网站建站描述撰写
  • Python类中方法种类介绍
  • AI研究:大语言模型(LLMs)需要怎样的硬件算力
  • 贵阳网站建设方案报价查企业资质上什么网站
  • Parasoft C/C++test中Trace32调试器的配置与单元测试执行
  • 基于大语言模型(LLM)的多智能体应用的新型服务框架——Tokencake
  • 单元测试(TestNG+PowerMock)
  • 哪家公司网站建设好点襄樊网站建设哪家好
  • 公司网站做推广预装wordpress主机
  • CSS 文本和字体属性、列表属性
  • 网站布局结构图百度关键词排名销售