remote_flush_tlb_cpumask() dead locking

refs #728
This commit is contained in:
Tomoki Shirasawa
2016-05-10 14:02:25 +09:00
parent 130b1f4327
commit 9b35eaca42
2 changed files with 24 additions and 9 deletions

View File

@ -898,8 +898,11 @@ void handle_interrupt(int vector, struct x86_user_context *regs)
}
}
check_signal(0, regs, 0);
check_need_resched();
if(interrupt_from_user(regs)){
cpu_enable_interrupt();
check_signal(0, regs, 0);
check_need_resched();
}
set_cputime(0);
--v->in_interrupt;
@ -915,8 +918,11 @@ void gpe_handler(struct x86_user_context *regs)
panic("gpe_handler");
}
set_signal(SIGSEGV, regs, NULL);
check_signal(0, regs, 0);
check_need_resched();
if(interrupt_from_user(regs)){
cpu_enable_interrupt();
check_signal(0, regs, 0);
check_need_resched();
}
set_cputime(0);
// panic("GPF");
}
@ -945,8 +951,11 @@ void debug_handler(struct x86_user_context *regs)
memset(&info, '\0', sizeof info);
info.si_code = si_code;
set_signal(SIGTRAP, regs, &info);
check_signal(0, regs, 0);
check_need_resched();
if(interrupt_from_user(regs)){
cpu_enable_interrupt();
check_signal(0, regs, 0);
check_need_resched();
}
set_cputime(0);
}
@ -964,8 +973,11 @@ void int3_handler(struct x86_user_context *regs)
memset(&info, '\0', sizeof info);
info.si_code = TRAP_BRKPT;
set_signal(SIGTRAP, regs, &info);
check_signal(0, regs, 0);
check_need_resched();
if(interrupt_from_user(regs)){
cpu_enable_interrupt();
check_signal(0, regs, 0);
check_need_resched();
}
set_cputime(0);
}

View File

@ -363,7 +363,10 @@ static void page_fault_handler(void *fault_addr, uint64_t reason, void *regs)
info._sifields._sigfault.si_addr = fault_addr;
set_signal(SIGSEGV, regs, &info);
}
check_signal(0, regs, 0);
if(interrupt_from_user(regs)){
cpu_enable_interrupt();
check_signal(0, regs, 0);
}
goto out;
}