作者: humjb_1983 时间: 2014-12-23 14:42
看似可以的~,因为在进入vma的nopage/fault 流程进行IO操作前,就已经开中断了,此时其实是可以睡眠的。
__do_page_fault(struct pt_regs *regs, unsigned long error_code)
{
...
/*
* It's safe to allow irq's after cr2 has been saved and the
* vmalloc fault has been handled.
*
* User-mode registers count as a user access even for any
* potential system fault or CPU buglet:
*/
/*
* 开中断,这种情况下(cr2已经保存,并且vmalloc fault已经处理过了),是安全的,可以缩短因缺页异常导致的关中断时长。
*/
if (user_mode_vm(regs)) {
local_irq_enable();
error_code |= PF_USER;
} else {
if (regs->flags & X86_EFLAGS_IF)
local_irq_enable();
}
...
/*
* 分配物理内存,缺页异常的正常处理主函数
* 可能的情况有:1、请求调页/按需分配;2、COW;3、缺的页位于交换分区,
* 需要换入。
*/
fault = handle_mm_fault(mm, vma, address, flags);
...
}作者: NewThinker_wei 时间: 2014-12-24 00:24 回复 3# humjb_1983