查看原文
其他

Linus亲自修改英特尔的“屎山”代码

Linux爱好者 2024-03-09

推荐关注↓

转自:OSC开源社区(ID:oschina2013)

去年年底英特尔将 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 竟然亲自动手为英特尔工程师修改 “有瑕疵的代码”,这种情况相当少见。

相关链接:

  • https://lore.kernel.org/lkml/CAHk-=wgrdOm8RwO+u8bydrbgs0wXJV_9mBYAtzX9d9hEY7a25A@mail.gmail.com/

  • https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d5ed10bb80bb376501cb56015a47457647efaabf


- EOF -

加主页君微信,不仅Linux技能+1

主页君日常还会在个人微信分享Linux相关工具资源精选技术文章,不定期分享一些有意思的活动岗位内推以及如何用技术做业余项目

加个微信,打开一扇窗


推荐阅读  点击标题可跳转

1、省厅选调 VS 阿里算法岗

2、一文搞懂GPU的概念、工作原理,以及与CPU的区别

3、曾被 Linus 点名批评的功能,现已合并到 Linux 6.4 中

看完本文有收获?请分享给更多人

推荐关注「Linux 爱好者」,提升Linux技能

点赞和在看就是最大的支持❤️

继续滑动看下一个

Linus亲自修改英特尔的“屎山”代码

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存