diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/entry_64.S | 6 | ||||
-rw-r--r-- | arch/x86/kernel/signal_32.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/signal_64.c | 3 |
3 files changed, 9 insertions, 3 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 3a058bb16409..e70f3881d7e4 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -283,7 +283,7 @@ sysret_careful: | |||
283 | sysret_signal: | 283 | sysret_signal: |
284 | TRACE_IRQS_ON | 284 | TRACE_IRQS_ON |
285 | sti | 285 | sti |
286 | testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx | 286 | testl $_TIF_DO_NOTIFY_MASK,%edx |
287 | jz 1f | 287 | jz 1f |
288 | 288 | ||
289 | /* Really a signal */ | 289 | /* Really a signal */ |
@@ -377,7 +377,7 @@ int_very_careful: | |||
377 | jmp int_restore_rest | 377 | jmp int_restore_rest |
378 | 378 | ||
379 | int_signal: | 379 | int_signal: |
380 | testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx | 380 | testl $_TIF_DO_NOTIFY_MASK,%edx |
381 | jz 1f | 381 | jz 1f |
382 | movq %rsp,%rdi # &ptregs -> arg1 | 382 | movq %rsp,%rdi # &ptregs -> arg1 |
383 | xorl %esi,%esi # oldset -> arg2 | 383 | xorl %esi,%esi # oldset -> arg2 |
@@ -603,7 +603,7 @@ retint_careful: | |||
603 | jmp retint_check | 603 | jmp retint_check |
604 | 604 | ||
605 | retint_signal: | 605 | retint_signal: |
606 | testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx | 606 | testl $_TIF_DO_NOTIFY_MASK,%edx |
607 | jz retint_swapgs | 607 | jz retint_swapgs |
608 | TRACE_IRQS_ON | 608 | TRACE_IRQS_ON |
609 | sti | 609 | sti |
diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c index 9bdd83022f5f..20f29e4c1d33 100644 --- a/arch/x86/kernel/signal_32.c +++ b/arch/x86/kernel/signal_32.c | |||
@@ -658,6 +658,9 @@ void do_notify_resume(struct pt_regs *regs, void *_unused, | |||
658 | /* deal with pending signal delivery */ | 658 | /* deal with pending signal delivery */ |
659 | if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) | 659 | if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) |
660 | do_signal(regs); | 660 | do_signal(regs); |
661 | |||
662 | if (thread_info_flags & _TIF_HRTICK_RESCHED) | ||
663 | hrtick_resched(); | ||
661 | 664 | ||
662 | clear_thread_flag(TIF_IRET); | 665 | clear_thread_flag(TIF_IRET); |
663 | } | 666 | } |
diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c index ab086b0357fc..38d806467c0f 100644 --- a/arch/x86/kernel/signal_64.c +++ b/arch/x86/kernel/signal_64.c | |||
@@ -480,6 +480,9 @@ do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) | |||
480 | /* deal with pending signal delivery */ | 480 | /* deal with pending signal delivery */ |
481 | if (thread_info_flags & (_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK)) | 481 | if (thread_info_flags & (_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK)) |
482 | do_signal(regs); | 482 | do_signal(regs); |
483 | |||
484 | if (thread_info_flags & _TIF_HRTICK_RESCHED) | ||
485 | hrtick_resched(); | ||
483 | } | 486 | } |
484 | 487 | ||
485 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) | 488 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) |