当我们调用zs_map_object时,返回值是每个CPU对象?为什么我们不允许在中断上下文中进行映射?
答案 0 :(得分:0)
很容易看出你是否检查了代码。
您似乎一次最多只能拥有一个映射。
现在让我们来看看:
area = &get_cpu_var(zs_map_area);
area->vm_mm = mm;
if (off + class->size <= PAGE_SIZE) {
/* this object is contained entirely within a page */
area->vm_addr = kmap_atomic(page);
ret = area->vm_addr + off;
goto out;
}
/* this object spans two pages */
pages[0] = page;
pages[1] = get_next_page(page);
然后你去 - 想象如果在映射开始设置之后中断触发会发生什么,例如在area-&gt; vm_mm = mm之后。无论做什么工作都将被从处理程序运行的代码覆盖,但在处理程序返回后没有任何东西可以恢复它,从而产生错误。