syscall: the signal received during system call processing is not processed.

Refs: #1176
Fujitsu: POSTK_DEBUG_TEMP_FIX_56
Change-Id: I410160ccbcef3ef49a0e37611a608bc87c97e63b
This commit is contained in:
Tomoki Shirasawa
2018-09-07 14:54:45 +09:00
committed by Masamichi Takagi
parent e4da71010c
commit 5e760db417
10 changed files with 485 additions and 22 deletions

View File

@ -9523,11 +9523,8 @@ set_cputime(int mode)
long syscall(int num, ihk_mc_user_context_t *ctx)
{
long l;
#if !defined(POSTK_DEBUG_TEMP_FIX_60) && !defined(POSTK_DEBUG_TEMP_FIX_56)
struct thread *thread = cpu_local_var(current);
#else /* !defined(POSTK_DEBUG_TEMP_FIX_60) && !defined(POSTK_DEBUG_TEMP_FIX_56) */
struct thread *thread = cpu_local_var(current);
#endif /* !defined(POSTK_DEBUG_TEMP_FIX_60) && !defined(POSTK_DEBUG_TEMP_FIX_56) */
struct cpu_local_var *v = get_this_cpu_local_var();
struct thread *thread = v->current;
#ifdef DISABLE_SCHED_YIELD
if (num != __NR_sched_yield)
@ -9629,22 +9626,9 @@ long syscall(int num, ihk_mc_user_context_t *ctx)
}
#endif // PROFILE_ENABLE
#if defined(POSTK_DEBUG_TEMP_FIX_60) && defined(POSTK_DEBUG_TEMP_FIX_56)
check_need_resched();
#elif defined(POSTK_DEBUG_TEMP_FIX_60) /* sched_yield called check_signal fix. */
if (num != __NR_futex) {
if (v->flags & CPU_FLAG_NEED_RESCHED) {
check_need_resched();
}
#elif defined(POSTK_DEBUG_TEMP_FIX_56) /* in futex_wait() signal handring fix. */
if (num != __NR_sched_yield) {
check_need_resched();
}
#else /* POSTK_DEBUG_TEMP_FIX_60 && POSTK_DEBUG_TEMP_FIX_56 */
if (num != __NR_sched_yield &&
num != __NR_futex) {
check_need_resched();
}
#endif /* POSTK_DEBUG_TEMP_FIX_60 && POSTK_DEBUG_TEMP_FIX_56 */
if (!list_empty(&thread->sigpending) ||
!list_empty(&thread->sigcommon->sigpending)) {