git: dd883e9a7e80 - main - weed_inhib(): correct the condition to re-suspend a thread
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 13 Jun 2022 19:33:32 UTC
The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=dd883e9a7e8045d86774fa3f944b53a4f78d0fd0 commit dd883e9a7e8045d86774fa3f944b53a4f78d0fd0 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2022-05-10 23:37:58 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2022-06-13 19:30:03 +0000 weed_inhib(): correct the condition to re-suspend a thread suspended for SINGLE_ALLPROC mode. There is no need to check for boundary state. It is only required to see that the suspension comes from the ALLPROC mode. In collaboration with: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D35310 --- sys/kern/kern_thread.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index 1247d842beb1..de04fee8cb96 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -1144,25 +1144,20 @@ restart: * ALLPROC suspend tries to avoid spurious EINTR for * threads sleeping interruptable, by suspending the * thread directly, similarly to sig_suspend_threads(). - * Since such sleep is not performed at the user - * boundary, TDF_BOUNDARY flag is not set, and TDF_ALLPROCSUSP - * is used to avoid immediate un-suspend. + * Since such sleep is not neccessary performed at the user + * boundary, TDF_ALLPROCSUSP is used to avoid immediate + * un-suspend. */ - if (TD_IS_SUSPENDED(td2) && (td2->td_flags & (TDF_BOUNDARY | - TDF_ALLPROCSUSP)) == 0) { + if (TD_IS_SUSPENDED(td2) && (td2->td_flags & + TDF_ALLPROCSUSP) == 0) { wakeup_swapper |= thread_unsuspend_one(td2, p, false); thread_lock(td2); goto restart; } if (TD_CAN_ABORT(td2)) { - if ((td2->td_flags & TDF_SBDRY) == 0) { - if (!TD_IS_SUSPENDED(td2)) - thread_suspend_one(td2); - td2->td_flags |= TDF_ALLPROCSUSP; - } else { - wakeup_swapper |= sleepq_abort(td2, ERESTART); - return (wakeup_swapper); - } + td2->td_flags |= TDF_ALLPROCSUSP; + wakeup_swapper |= sleepq_abort(td2, ERESTART); + return (wakeup_swapper); } break; default: