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

记录人生第一个Linux内核Patch被采纳的经历

最近运气不错提交的一个关于 Linux 内核 SMMUv3 驱动的补丁Patch被采纳了。虽然只是一个边界条件的微调但作为自己的第一个 Patch过程还挺有意思的中间也暴露出自己不少技术盲区。趁着记忆热乎把这次经历和踩坑记录下来。起因发现一处“不合理”的重试逻辑最近在看 smmuv3的驱动代码drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c。在读到 arm_smmu_init_one_queue() 这个初始化硬件队列的函数时我注意到它的内存分配重试逻辑。驱动在申请队列内存时如果调用 dmam_alloc_coherent() 失败会在一个循环里不断把队列大小减半max_n_shift--并重新尝试直到成功或者尺寸小于一个页面。原有的边界判断是这样的do { qsz ((1 q-llq.max_n_shift) * dwords) 3; q-base dmam_alloc_coherent(smmu-dev, qsz, q-base_dma, GFP_KERNEL); if (q-base || qsz PAGE_SIZE) break; q-llq.max_n_shift--; } while (1);我当时下意识地认为DMA 内存分配底层都是按页PAGE_SIZE通常 4KB对齐的单次分配不可能小于一个 Page。如果连一个 Page 大小的内存都申请失败了再去减半尺寸重试在逻辑上是冗余的而且万一刚好赶上内存释放重试小尺寸成功了硬件就会配置成一个很小的队列但实际上底层还是占用了整页内存这不就导致性能降级和内存浪费吗我觉得这地方是个可以优化的点于是就写了补丁发到了邮件列表。https://lore.kernel.org/linux-iommu/tencent_F6E384A40D990A279B460A0CDE1927FDF509qq.com过程大牛的现场教学补丁发出去之后很快收到了社区维护者的回复整个过程对我来说是一次很好的技术“上课”。首先是 ARM64 架构和 SMMU 的主要维护者 Will Deacon。他指出了我的一个低级错误我当时在 Commit 签名里用了 LoserJL。Will 直接回复“No pseudonyms, please.”请不要用伪名。内核社区是很严肃的必须用真名Real Name提交这是对代码终身负责的态度。这算是我在社区礼仪上踩的第一个坑。接着IOMMU 领域的资深专家 Robin Murphy 对我的技术理由提出了质疑。他指出DMA API 本身并没有承诺分配的内存一定不小于 PAGE_SIZE。在某些特殊配置下比如设备命中了 per-device 或全局的 coherent pool 内存池分配小于一个 Page 的尺寸是完全可能的。而且如果系统真的连 PAGE_SIZE 都拿不出来后面的 stream table 大概率也会失败驱动基本上就 Probe 失败了所以不用太纠结 over-allocate过度分配的问题。看到这里我发现自己对 DMA API 的底层细节理解确实不够全面想当然了。就在我以为这个补丁要被拒绝的时候Will Deacon 出来查了历史提交记录commit d25f6ead162e并在邮件里公开表示Robin 说的没错不过看了下当年的代码这里确实是他自己把边界条件写错了原本的设计意图就是到 PAGE_SIZE 为止。并说虽然我写的理由不太对但改动本身是符合最初代码预期的。提交 v2 patch的流程既然maintainer认可了改动的核心方向也指出了问题我感觉这个patch被采纳的希望大增我立刻调整心态准备了 v2 版本把作者和签名改成了真名Leo Jiang。删掉了我之前写得比较累赘的代码注释。把原有的判断条件利落地改成了 qsz PAGE_SIZE。- if (q-base || qsz PAGE_SIZE) if (q-base || qsz PAGE_SIZE) break;但是这次发送的patch直接回复到了之前的邮件列表过了几天收到Pranjal Shrivastava回复指导我v2要以全新邮件形式发送避免在社区讨论中被忽略。v2 patch的applied在Pranjal Shrivastava的指导下我这才明白内核patch提交的基本流程与规范随即感谢指导之后以全新邮件发送了v2 patch。https://lore.kernel.org/all/tencent_F13723B53F68DC857410D3DBE4F6C895C106qq.com/过了几天收到了Will 发来的邮件表示这个改动已经正式入库Applied to iommu (arm/smmu/updates), thanks!。至此我人生的第一个patch被正式采纳了。几点体会这次提交的patch虽然只是一个边界条件的微调但收获确实比预想的多顶级维护者的严谨与胸怀。 大佬们在技术细节上非常敏锐DMA 内存池那种边缘场景他们信手拈来。但同时他们也极其客观即便我的理由说偏了Will 发现是自己当年的手误后依然非常大方地承认并帮忙推进合并。这种对事不对人、只看代码质量的氛围让人很舒服。对底层的敬畏。 写内核代码真的不能靠“我觉得”或者“通常情况下”。一个看似理所当然的常识在复杂的体系结构和子系统交叉下都可能有特例。以后看代码和提 Patch理论功课还得做得更扎实。社区沟通要直白、严谨。 用真名、写清晰的 Commit Message、不加戏。第一次内核提 Patch 顺利收尾算是摸到了开源社区的门槛。以后继续努力争取能提交一些更有含金量的patch。

相关文章:

记录人生第一个Linux内核Patch被采纳的经历

最近运气不错,提交的一个关于 Linux 内核 SMMUv3 驱动的补丁(Patch)被采纳了。虽然只是一个边界条件的微调,但作为自己的第一个 Patch,过程还挺有意思的,中间也暴露出自己不少技术盲区。趁着记忆热乎&#…...

qwen3.6-35b-a3b关闭思考-AI问答效果比对(文心)

...

Claude Code Unpacked:终端里的AI编程革命,一图胜千言

Claude Code Unpacked:终端里的AI编程革命,一图胜千言 还记得那个在Hacker News上一夜之间收获480票的项目吗?当开发者们第一次看到Claude Code在终端中流畅地理解代码、自动重构、甚至主动提出优化建议时,整个社区都沸腾了。这不…...

GraphRAG生态全景:6大主流方案盘点

在大模型应用加速落地的过程中,RAG已经成为企业构建智能知识库、智能问答系统和行业大模型应用的重要技术路线。但随着场景从简单文档问答进入复杂业务推理,传统RAG的能力边界正在逐渐显现。尤其是在公安、海关、保险、电力、军事等行业中,企…...

像素风机甲对战小游戏HTML

先放效果图🎮 游戏玩法设计功能说明: 双人对战:两个玩家在同一键盘上对战 移动系统:左右移动 跳跃(带重力物理) 攻击系统: 近战攻击,有冷却时间和范围判定 防御系统:…...

电源大电流走线的过孔怎么打?这2个细节决定板子扛不扛得住

电源大电流走线的过孔怎么打?这2个细节决定板子扛不扛得住做硬件工程师这些年,见过太多电源板炸的、烧的、虚焊的。说实话,一大半问题出在过孔上——不是过孔打少了,是打得不对。上周五快下班了,测试的兄弟急吼吼跑过来…...

AI MV 工具评测指南 2026:多模态音视频自动生成系统

AI MV 工具评测指南 2026:多模态音视频自动生成系统 适用读者:需要批量生产音乐可视化内容的自媒体创作者、社交媒体运营者、短视频内容创作者一、技术定义与核心功能 AI MV 工具是实现音频到视频自动转化的多模态生成系统。其工作原理是:输入…...

实时洞察,视觉赋能:国内情绪识别API公司推荐及计算机视觉流派深度解析

引言在人工智能与各行业深度融合的今天,通过非接触方式理解用户情绪、生理状态与心理倾向,已成为人机交互、安全防控、健康管理等领域的关键能力。本文围绕提供情绪识别类API的公司类型,梳理国内情绪识别的主流技术路径,并重点解析…...

周村区哪家烧烤好吃?开荤烧烤:12 年匠心,地道烟火味

好的,这是一篇为您撰写的宣传文章,符合CSDN发文规范,突出开荤烧烤的特色:匠心十二载,烟火满周村:探寻地道淄博烧烤——开荤烧烤在美食江湖中,烧烤,尤其是以“小饼烤炉加蘸料”三件套…...

全周期陪伴式服务成行业趋势,墨石教育以 “录取即终点” 定义管理类联考服务新标准

随着考研培训行业从流量竞争转向服务竞争,《人民日报》《新华网》多次倡导 **“全周期、结果导向”的教育服务模式。管理类联考作为系统性工程,从择校、笔试、面试到调剂,任何环节缺失都可能导致落榜。墨石教育率先打破 “重授课、轻服务” 的…...

数据安全合规实战:等保2.0和GDPR要求下的文件加密配置清单

从“过等保”到“过审计”,一份可直接照抄的配置模板又到了每年合规审计季。去年我们公司同时面临等保2.0三级复测和欧盟客户要求的GDPR合规审查,其中文件加密是两者共同的重点项。我们以天锐绿盾为基础,整理了一套加密合规配置清单&#xff…...

2026年度AI接入方案复盘:六大主流API中转/API聚合平台深度测评与选型建议

2026年度AI接入方案复盘:六大主流API中转平台深度测评与选型建议 站在2026年的技术节点回望,企业在构建大模型应用时,早已告别了单纯追求低价的阶段。经过一整年的行业沉淀,我们发现真正影响生产效率的并非单一Token的成本&#…...

Adams 多体动力学:工业仿真的黄金标准与未来引擎

Adams(Automatic Dynamic Analysis of Mechanical Systems)是全球多体动力学仿真领域的标杆软件,由 MSC Software 公司开发(现隶属于 Hexagon 集团),凭借领先的虚拟样机技术,成为汽车、航空航天…...

本地 AI 编码助手从 0 配起来:先选模型,再接 Ollama、VS Code、Claude Code 和 Codex

配本地 AI 编码助手,我现在最不建议的做法,就是打开 Ollama 以后直接搜一个最大模型下载。 这条路我踩过。 模型能跑起来,不代表能写代码。能写一个函数,不代表能进项目改文件。能在终端里回一句话,也不代表 Claude …...

ceph的块存储如何骗过服务器,让服务器把它当做真实的硬盘

ceph的块存储,就是一块远程网络硬盘。操作系统为啥会读写这块假硬盘呢? 一台服务器要使用CEPH提供的块存储,也是需要ceph的驱动软件来和ceph通讯吧 是的,你的理解完全正确。一台服务器想要使用 Ceph 提供的块存储,必须…...

【tomcat部署前台war包报错】

tomcat部署前台war包报错 背景:tomcat启动前台war包,由zip直接改文件后缀成war包,jdk8 同事好使,我不好使 部署平台日志: 报错一、正常tomcat执行时会把war包解压成对应文件夹,这里应该是没解压成功。没有具…...

CANN-Ascend-C流水线编程-昇腾NPU上Cube和Vector怎么协作

CANN-Ascend-C流水线编程-昇腾NPU上Cube和Vector怎么协作 昇腾NPU的 AI Core 里有两种计算单元:Cube 做矩阵乘法,Vector 做逐元素运算。FlashAttention 这种融合算子需要 Cube 和 Vector 交替工作——先 Cube 算 QK^T,再 Vector 算 Softmax&a…...

2026 渗透测试行业全景解析|机遇、挑战与未来趋势

随着数字化转型的深入和网络威胁的日益复杂化,网络安全渗透测试行业在2025年迎来了前所未有的发展机遇与挑战。本文基于最新行业数据、招聘趋势与技术演进,全面剖析当前渗透测试行业的市场规模、人才供需、薪资水平、技术变革及未来发展方向,…...

网安从业者必学 100 个核心知识点,自查进阶必备

100条必背网络安全知识点,你都掌握了吗? 1988年,一款名为“莫里斯蠕虫”的程序悄然传播,它最初是康奈尔大学研究员的实验项目,目的是测量互联网规模。可谁也没想到,这个程序失控后感染了数千台电脑&#x…...

2026最新测评:4款海外降英文文本AIGC工具实测

我用GPT写了一篇英文技术报告,然后分别扔进4个降AI工具。结果出乎意料。如果你经常用ChatGPT、Claude或Gemini写英文内容——无论是论文摘要、技术文档、公司报告还是博客文章——你一定遇到过这个尴尬:明明内容是自己构思、自己修改的,但Tur…...

零基础学 Web 安全 20256最全系统入门攻略

“未知攻,焉知防”——真正的安全始于理解攻击者的思维 在日益数字化的世界中,Web安全工程师已成为企业防护体系的“数字盾牌”。本文将提供一条清晰的进阶路径,助你在2025年的网络安全领域脱颖而出。 一、认知篇:理解安全本质 …...

1分钟带你认识分辨率 帧率, 码率 HDR 的作用

日常刷视频,刷到关于剪辑的只是,就会老是听到一些分辨率,帧率 码率 HDR 这个名字,那你一定很好奇,这些是什么,有什么作用,今天小编就用最简单直白的话,一分钟带你搞懂四大核心参数的…...

龙芯LS2K PMON启动全解析:从内核到U盘识别的奥秘

【龙芯LS2K PMON终极干货】整机设备启动全景图:从 mainbus 开机到 U 盘识别全流程 一、整篇总纲(最强一句话) 内核启动 → 读 ioconf.c/cfdata 硬件族谱 → 从根总线 mainbus 开始遍历 → 逐级 attach 设备 → 启动 PCI → 扫描到 OTG 控制器 → 加载 dwc2 驱动 → 开启 U…...

实用购机指南:屏幕出色、流畅耐用续航拉满的手机

一、前言2026 年上半年,智能手机市场迎来新一轮旗舰迭代,用户购机核心需求已从单一参数比拼,转向流畅不卡顿、性能强劲、屏幕护眼优质、续航持久耐用的全能体验,同时兼顾影像创作与美学设计。为帮消费者精准筛选高适配机型&#x…...

微信聊天记录丢了怎么找回?这份教程很实用

你是否经历过这样的崩溃瞬间:手机清理空间时不小心删了微信聊天记录,或者重装微信后发现重要的对话全部消失?别慌,本文将系统梳理微信聊天记录丢失的常见原因,并提供多种经过验证的恢复方案,从微信官方自带…...

液压液水解安定性检测:核心原理与全行业应用场景解析

液压系统是各类工业、工程、交通设备的动力核心,而液压液作为系统的工作介质,其性能稳定性直接决定设备的运行精度、故障率以及使用寿命。在复杂工况中,水分侵入是导致液压液失效的核心诱因之一,油液遇水发生水解反应后&#xff0…...

Unity预加载:减少游戏中首次加载资源时的卡顿

遇到的问题&#xff0c;如标题所示&#xff0c;所以写了如下模块。模块功能就是初始化时候&#xff0c;加载零散/文件夹的物体&#xff0c;代码如下&#xff1a;#region 启动预加载模块/// <summary> 预加载间隔&#xff08;分帧防卡顿&#xff09; </summary>priv…...

从RSSI走向信道探测,蓝牙设备的“距离感知”能力已至“厘米级”

长期以来&#xff0c;物联网&#xff08;IoT&#xff09;无线连接技术的发展重心主要聚焦于通信性能、通信功耗与组网效率等方面&#xff1b;然而&#xff0c;随着智能家居、数字车钥匙、工业自动化、智慧门禁、资产管理以及地理围栏等应用的快速扩张&#xff0c;行业正在提出一…...

C++函数对象与仿函数

C函数对象与仿函数函数对象是重载了函数调用运算符operator()的类对象&#xff0c;也称为仿函数。它们可以像函数一样被调用&#xff0c;但比普通函数更灵活&#xff0c;可以保存状态和配置。函数对象的基本实现通过重载operator()实现。#include #include #includeclass Multi…...

【基于项目代码实测:XCP/CCP 模块“标定差异”全流程深度操作指南无标题】

在实际项目的 XCP/CCP 标定业务中&#xff0c;核对与同步底层内存参数是一项极其高频的操作。本指南将完全基于最新版“标定差异&#xff08;Calibration Difference&#xff09;”界面的真实功能逻辑&#xff0c;为你提供一份严谨、详细、且立即可用的三倍容量操作手册。无论你…...