今日重点:📖 阅读——上一篇阅读(10-02)看的是整封 RFC 的论证结构。 今天往下潜一层,讲句子:内核英文读着累,通常不是因为生词多, 而是修饰语套修饰语。这一篇的封面只有四段话,却集齐了三个「粘句装置」。 认全它们,六十个词的长句也能一眼断出骨架。阅读的第一步,永远是先找主句。

📖 精读原文(真实邮件,逐字引用)

/ section
PCI P2PDMA applies Request and Completion Redirect throughout both paths. This misclassifies asymmetric and nested switches, and reports one answer for every kind of TLP.
Three ACS controls act on TLP attributes the Requester chooses rather than on the topology: Translation Blocking and Direct Translated P2P act on a Request's Address Type, and Completion Redirect skips Completions carrying Relaxed Ordering.
Evaluate each direction at the path divergence, decide every class from the one walk, and treat a client with ATS enabled as translating unless its driver declares per-mapping ATS.

出处:Leon Romanovsky(NVIDIA),[PATCH v10 00/18] PCI/P2PDMA: Route peer-to-peer DMA by TLP class 封面, 2026-10-12 21:08 北京。这封是封面信本身——练习题的 source 链接直接指向它, 点开就能看到上面每一句原文。

📖 装置一:冒号展开

/ column

★ ① 冒号:左边是骨架,右边是脚注

先用主句给结论,冒号后面才展开明细

原句 Three ACS controls act on TLP attributes the Requester chooses rather than on the topology: Translation Blocking and Direct Translated P2P act on a Request's Address Type, and Completion Redirect skips Completions carrying Relaxed Ordering.
拆解 先砍掉冒号右边那一大串,主句是:Three ACS controls act on TLP attributes … rather than on the topology(三个 ACS 控制作用于 TLP 属性,而不是作用于拓扑)。冒号右边用 and 并列两个子句,分别是每个控制的具体作用——它是脚注:不看也不影响你理解主干。这就是内核英文最标准的呈现顺序:结论在前,明细在后,用冒号分开。
顺带 这个主句里还塞了一处:TLP attributes the Requester chooses——省略了关系代词 that 的定语从句,等于 attributes that the Requester chooses。看到「名词 + 主谓」紧挨着,先怀疑这里藏了个省略 that 的从句。

📖 装置二:分号对照

/ column

★ ② 分号:话锋一转

前后要么并列,要么对照——绝不平淡

原句一 This completes the P2PDMA side; dma-buf and mlx5 follow separately.
原句二 Used the PCIe terms Requester and Completer for TLPs, ACS and ports; client and provider remain for P2PDMA objects.
拆解 分号是「话锋一转」的信号。第一句:前半说「P2PDMA 这边收工了」,分号后立刻交代「dma-buf 和 mlx5 另外再来」——说清边界。第二句更典型,作者在 changelog 里讲术语改动:分号前是「把 TLP / ACS / port 改用 PCIe 的 Requester 与 Completer」,分号后是「client 和 provider 这两个词保持不变」。改了什么 / 没改什么,一句话说完。读到分号,先问一句:后半句是「并列补充」还是「对照转折」?

📖 装置三:句尾 unless

/ column

★ ③ 句尾的 unless:条件一成立,前面就作废

先把并列动词数清,再处理尾巴

原句 Evaluate each direction at the path divergence, decide every class from the one walk, and treat a client with ATS enabled as translating unless its driver declares per-mapping ATS.
拆解 这句子有 30 多个词,但主句其实极简单——三个祈使动词并列:Evaluate …、decide …、and treat …。把三个动词切出来,句子就散架成三块。最麻烦的是第三块尾巴上的 unless:treat X as translating unless …。读法固定:unless 引出的条件一旦成立,前面的结论直接作废——驱动声明了 per-mapping ATS,就不按 translating 处理。内核英文里 unless / provided / as long as 这类尾巴,都是「默认结论 + 例外条件」的结构。
顺带 注意 from the one walk 这个说法:the one walk 指「同一次遍历」,one 在这里是强调「就一次,不重复走」。英文里 the + one 常用来强调「同一个」,不是数字。

📖 装置四:压缩定语

/ column

★ ④ 压缩定语:内核英文最爱省的关系从句

with + 过去分词 / 现在分词 / 省略 that

三种压缩(等号左边均为原文,右边是还原出的完整从句) a client with ATS enabled = a client that has ATS enabled(with + 名词 + 过去分词);Completions carrying Relaxed Ordering = Completions that carry Relaxed Ordering(现在分词后置);TLP attributes the Requester chooses(省略关系代词 that,原文即此形)。
拆解 内核英文几乎不用长关系从句,而是压成短语:with 短语表「带着某状态」、现在分词表「正在做某事」、过去分词表「被怎样」。压缩带来一个副作用——名词后面突然出现动词,读者容易断错句。所以遇到「名词 + 动词」贴在一起又没有连词时,先假设这里被省掉了一个 that。
怎么用 自己写的时候也可以这样压:a request carrying Relaxed Ordering、a device with ATS enabled。但要在「省得地道」和「读得清楚」之间取舍——省过头,评审就得回头问你。

✨ 辅助彩蛋:术语跟着层走

/ section

★ Requester / Completer 与 client / provider 的分工

同一份代码里,两套术语各管一层

原句 Used the PCIe terms Requester and Completer for TLPs, ACS and ports; client and provider remain for P2PDMA objects.
中文与语境 PCIe 规范里,发出 TLP 的一方叫 Requester、回应的一方叫 Completer。而 P2PDMA 这套代码有自己的叫法:client 与 provider。作者的取舍是按层次分——讲 TLP、ACS、port 这些 PCIe 概念时用规范原生术语,讲 P2PDMA 对象时保留本层叫法。这不是术语洁癖:评审者看到用词就知道你在说哪一层的对象。
记忆钩子 术语跟着层走,换层就换词。拿一套词硬套两层,是读内核英文时最常见的困惑来源——看到 Requester 和 client 同时出现,先问它们是不是在指同一样东西的不同层次。

✍️ 今日练习

/ column
✍️ 拆下面这句:先断出主句(有几个并列动词?),再说明第三个动词后面挂的尾巴是什么、什么条件下前面的结论会作废。
💡 显示答案
参考作答(仿写示范,非原文):主句是三个祈使动词并列——① Evaluate each direction at the path divergence(在路径分叉处评估每个方向);② decide every class from the one walk(一次遍历决定所有类别);③ treat a client with ATS enabled as translating(把「ATS 已启用的 client」当作正在翻译)。第三个动词后面挂的是一个 unless 条件从句:unless its driver declares per-mapping ATS。含义是「默认按 translating 处理,除非驱动声明了 per-mapping ATS」——条件成立时前面的结论作废。另注:a client with ATS enabled 是压缩定语,等于 a client that has ATS enabled。
📖 原文:Evaluate each direction at the path divergence, decide every class from the one walk, and treat a client with ATS enabled as translating unless its driver declares per-mapping ATS.
📎 原文引用

每日一句:Read for the main clause first. Everything else in a kernel sentence is a footnote hanging off it.

仿写示范