去年年底英特爾將 LAM(Linear Address Masking :線性地址掩碼) 功能提交到 Linux 6.2 的合并窗口,但該功能受到 Linus 的批評(píng)并拒絕合并。在經(jīng)歷了一段時(shí)間的代碼改進(jìn)后,Linus 終于同意將 LAM 代碼合并到 Linux 6.4 窗口。
但 Linus 似乎仍對(duì)英特爾工程師提交的代碼不太滿意,在合并了 LAM 代碼后,先是寫(xiě)了一個(gè)使 access_ok () 獨(dú)立于 LAM 的新補(bǔ)丁,而后又親手寫(xiě)了多個(gè)補(bǔ)丁對(duì) LAM 代碼進(jìn)行了優(yōu)化。

在最新提交的 LAM 優(yōu)化補(bǔ)丁中,Linus 解釋了自己的動(dòng)機(jī):
我對(duì)此版本中的 LAM(“線性地址掩碼”)的 “access_ok ()” 的完成方式感到很不爽,而且它實(shí)際上也有一些小 Bug ,所以我動(dòng)手清理了代碼。
改動(dòng)主要集中在以下幾方面:
使用 __user 指針的符號(hào)位而不是屏蔽地址,并根據(jù) TASK_SIZE 范圍檢查它。 get/put_user () 端做了這部分,但是 ‘a(chǎn)ccess_ok ()’ 做了天真的 “掩碼和范圍檢查”,它不僅生成多余的代碼,還意味著 __access_ok 本身的任務(wù)做得不好, copy_from_user_nmi () 沒(méi)有得到正確的檢查。
將所有 64 位代碼僅移動(dòng)到 64 位版本的頭文件中,這樣就不會(huì)污染共享的 x86 代碼,也不會(huì)誤導(dǎo)用戶 LAM 可以在 32 位環(huán)境中工作。
修復(fù)地址掩碼中的 Bug(這不重要,只是完全刪除了錯(cuò)誤的代碼)。
幾個(gè)簡(jiǎn)單的清理,并添加了關(guān)于 access_ok () 規(guī)則的注釋。
Linus 重新編寫(xiě)了約一百行代碼來(lái)清理 LAM ,這意味著如果測(cè)試沒(méi)問(wèn)題, 就可以在 Linux 6.4 中順利啟用 LAM 功能。不過(guò)這次 Linus 竟然親自動(dòng)手為英特爾工程師修改 “有瑕疵的代碼”,這種情況相當(dāng)少見(jiàn)。
審核編輯 :李倩
-
英特爾
+關(guān)注
關(guān)注
61文章
10247瀏覽量
178544 -
Linux
+關(guān)注
關(guān)注
88文章
11581瀏覽量
217176 -
代碼
+關(guān)注
關(guān)注
30文章
4927瀏覽量
72503
原文標(biāo)題:Linus親自修改英特爾的“屎山”代碼
文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
英特爾修改芯片法案協(xié)議 提前獲得約57億美元現(xiàn)金支援
英特爾發(fā)布全新GPU,AI和工作站迎來(lái)新選擇
為什么無(wú)法檢測(cè)到OpenVINO?工具套件中的英特爾?集成圖形處理單元?
請(qǐng)問(wèn)OpenVINO?工具套件英特爾?Distribution是否與Windows? 10物聯(lián)網(wǎng)企業(yè)版兼容?
將英特爾?獨(dú)立顯卡與OpenVINO?工具套件結(jié)合使用時(shí),無(wú)法運(yùn)行推理怎么解決?
英特爾?NCS2運(yùn)行演示時(shí)“無(wú)法在啟動(dòng)后找到啟動(dòng)設(shè)備”怎么解決?
英特爾任命王稚聰擔(dān)任中國(guó)區(qū)副董事長(zhǎng)
英特爾代工或引入多家外部股東
英特爾帶您解鎖云上智算新引擎
英特爾推出全新英特爾銳炫B系列顯卡

Linus親自修改英特爾的“屎山”代碼
評(píng)論