v2
2026-10-19
vmap 失败时回滚部分映射 · v2
修复vmap映射失败时的KMSAN影子映射与部分映射清理,并移除powerpc/percpu中冗余unmap路径。
原始补丁链接
子 Patch(5)
1/5
mm/kmsan: undo the shadow mapping when the origin mapping fails
kmsan_vmap_pages_range_noflush() 在 origin 映射失败时调用 __vunmap_range_noflush() 回滚已建 shadow PTE,避免残留映射导致后续 vmap 命中旧 PTE 触发 BUG 或 -EBUSY。
2/5
mm/kmsan: skip vunmap_range_noflush when KMSAN is disabled
KMSAN 关闭时 vmap 直接返回 0,但 unmap 路径仍遍历 shadow/origin 页表;在 kmsan_vunmap_range_noflush() 加 kmsan_enabled 早退,避免无意义页表操作。
3/5
mm/vmalloc: undo partial mappings inside the mapping functions
把失败回滚下沉到 __vmap_pages_range_noflush()/vmap_page_range(),失败用 __vunmap_range_noflush() 清 PTE;统一清理责任,避免残留 PTE 让再次映射 BUG/WARN。
4/5
powerpc: drop redundant unmaps of failed vmap mappings
vmap_page_range()/ioremap_page_range() 失败时已清 PTE,删除 remap_isa_base() 与 ioremap_phb() 中多余的 vunmap_range() 回滚,避免重复清理。
5/5
mm/percpu: stop unmapping the CPU that failed to map
__pcpu_map_pages() 失败时自行清除本 CPU 已建 PTE,pcpu_map_pages() 只需回滚此前成功映射的 CPU,删除对失败 CPU 的重复 unmap。