Linus 亲手帮英特尔优化 LAM 代码
去年年底英特尔将 LAM(Linear Address Masking :线性地址掩码) 功能提交到 Linux 6.2 的合并窗口,但该功能受到 Linus 的批评并拒绝合并。在经历了一段时间的代码改进后,Linus 终于同意将 LAM 代码合并到 Linux 6.4 窗口。
但 Linus 似乎仍对英特尔工程师提交的代码不太满意,在合并了 LAM 代码后,先是写了一个使 access_ok() 独立于 LAM 的新补丁,而后又亲手写了多个补丁对 LAM 代码进行了优化。
在最新提交的 LAM 优化补丁中,Linus 解释了自己的动机:
我对此版本中的 LAM(“线性地址掩码”)的 “access_ok()” 的完成方式感到很不爽,而且它实际上也有一些小 Bug ,所以我动手清理了代码。
改动主要集中在以下几方面:
- 使用 __user 指针的符号位而不是屏蔽地址,并根据 TASK_SIZE 范围检查它。 get/put_user() 端做了这部分,但是 'access_ok()' 做了天真的“掩码和范围检查”,它不仅生成多余的代码,还意味着 __access_ok 本身的任务做得不好, copy_from_user_nmi() 没有得到正确的检查。
- 将所有 64 位代码仅移动到 64 位版本的头文件中,这样就不会污染共享的 x86 代码,也不会误导用户 LAM 可以在 32 位环境中工作。
- 修复地址掩码中的 Bug(这不重要,只是完全删除了错误的代码)。
- 几个简单的清理,并添加了关于 access_ok() 规则的注释。
Linus 重新编写了约一百行代码来清理 LAM ,这意味着如果测试没问题, 就可以在 Linux 6.4 中顺利启用 LAM 功能。不过这次 Linus 竟然亲自动手为英特尔工程师修改“有瑕疵的代码”,这种情况相当少见。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
seL4 微内核获得 2022 ACM 软件系统奖
美国计算机协会 (ACM) 宣布将 2022 年ACM 软件系统奖项授予 seL4 微内核团队,以表彰他们开发了第一个具有工业强度的高性能操作系统;该系统目前已通过完整的、机械检查的全功能正确性证明。 “2009 年,软件系统获奖者展示了 seL4 微内核,它成为有史以来第一个具有工业强度的通用操作系统,并正式证明了实现的正确性。在随后的几年中,该团队进一步补充证明了 seL4 强制执行完整性和机密性的核心安全属性,将证明扩展到内核的二进制代码,并对一个 protected mode OS 进行了首次健全和完整的最坏情况下的执行时间分析。 seL4 高可靠微内核从根本上改变了研究界对形式化方法所能完成的认识:它表明不仅可以为工业级操作系统完成正确性和安全性的形式化证明,而且可以在不影响性能或通用性的情况下完成。seL4 上持续维护和增长的证明帮助产生了证明工程的新学科 —— 证明过程建模、工作量估算和大规模证明的系统处理的艺术。” 团队成员包括 Gernot Heiser(新南威尔士大学)、Gerwin Klein(Proofcraft)、Harvey Tuch(谷歌)、Kevin E...
- 下一篇
几种常见的Python数据结构
摘要:本文主要为大家讲解在Python开发中常见的几种数据结构。 本文分享自华为云社区《Python的常见数据结构》,作者: timerring 。 数据结构和序列 元组 元组是一个固定长度,不可改变的Python序列对象。创建元组的最简单方式,是用逗号分隔一列值: In [1]: tup = 4, 5, 6 当用复杂的表达式定义元组,最好将值放到圆括号内,如下所示: In [3]: nested_tup = (4, 5, 6), (7, 8) In [4]: nested_tup Out[4]: ((4, 5, 6), (7, 8)) 用 tuple 可以将任意序列或迭代器转换成元组: In [5]: tuple([4, 0, 2]) Out[5]: (4, 0, 2) In [6]: tup = tuple('string') In [7]: tup Out[7]: ('s', 't', 'r', 'i', 'n', 'g') 可以用方括号访问元组中的元素。和C、C++、JAVA等语言一样,序列是从0开始的: In [8]: tup[0] Out[8]: 's' 元组...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G