From nobody Mon Jul 18 20:17:22 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4LmtYG3cQTz4X4gh; Mon, 18 Jul 2022 20:17:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LmtYG35Ltz3nnr; Mon, 18 Jul 2022 20:17:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1658175442; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ciBwQiX6JahdlkPklF00a6dOzO2so2S/nlVPNunY1oI=; b=Zx5YSVlLk7q6XJc95VLr/6B3rJguxf1av1vopOWhgXlAmzmMHxv4Cbmsh5JNBcwmr+To/D JRRnMZ91Q2D5P+LgwCGD+VzGhqiqqBOvk7JRBRJXArf8nkUV2kOBH8dSCyBHnrHG8Cve4o TcZ1UH3GPj6o74S5y8W+QXDLUUMaksiV6AczNjDQhizR27uZIoqTKAYMNUZkuu9S8kVC5v 3zsRItWIIqC9IzXf8PWDMusX7gx95z1MW1RFF3KTBIY7YxtyGGGJ4Z+XjuXTNHCevcSo95 GcrAdvnrDA2WaE/557qkTrsEWaSpNsJQ6rRvuRhtz3XwHMLEvl08onIGe0y5IA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4LmtYG1z3mzsMj; Mon, 18 Jul 2022 20:17:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 26IKHMcl098241; Mon, 18 Jul 2022 20:17:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 26IKHMj3098240; Mon, 18 Jul 2022 20:17:22 GMT (envelope-from git) Date: Mon, 18 Jul 2022 20:17:22 GMT Message-Id: <202207182017.26IKHMj3098240@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: bd980ca847b7 - main - sched_ule: Ensure we hold the thread lock when modifying td_flags List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bd980ca847b76439bd27a4144cf0dd69d48b33af Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1658175442; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ciBwQiX6JahdlkPklF00a6dOzO2so2S/nlVPNunY1oI=; b=qEr/efgrHs16Awld8MgOlv58OMPWUDroYsHQvNoC4jR2G64SOi+zDRar46ZGI6aL9Rdu2h pq6uf++DUG5zcfvFid55HdjvKAqx4nlIZigmR2WtGYBntFGcy3FnteppaW9BGL4UEL6p94 ywfZXdBJ17zOsg1KjQ3FWNl3+7f0kbsKKeQNFdcLr3su+N5JsgWe5xXHxH9/1xR63uk7HA YKrPs8bsE9wBjbcy/2E0dQCljXR45TnRbZgIHbtxwMoiVvNSYAuAFbTG0UG1fMorkh18F4 EaDs4XFF96J5M4bWivsGyHxOlKPftv3A0+6XNTeloJzbnthERQWa2ZwxKKIWnA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1658175442; a=rsa-sha256; cv=none; b=Q3OwSHSys8aqJjlGk1rNhQRKjFf/bydYhUZ3Q0icqGnKXaZoe31rRqDoDGW7gNn/+9Qn+X J23JNLkWkPkNUCWvseQN+I1QVtDFLj2HSo6kVCq8vFlSch0O97tJ5Js9x6TAkkpFtwrE8t 4616rbQ9ctwR2tv69m50VxZwH2xZ72C1LLi1FhhTWL3/uLmm+RGR0yNwZa0PVFHJERitN4 VZNldPCjZn3cZ2K/uEk/N7mGK3nzEgy/3rysJoo11jAw5QlC44HiyofIGdmKAX+By9vUM2 cCY2sp4EY1AltHvgrWATjQNHaLv3VDVAEYkRDauFbWFY18U0rnqoAaK/TTVssQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=bd980ca847b76439bd27a4144cf0dd69d48b33af commit bd980ca847b76439bd27a4144cf0dd69d48b33af Author: Mark Johnston AuthorDate: 2022-07-18 19:50:45 +0000 Commit: Mark Johnston CommitDate: 2022-07-18 19:52:27 +0000 sched_ule: Ensure we hold the thread lock when modifying td_flags The load balancer may force a running thread to reschedule and pick a new CPU. To do this it sets some flags in the thread running on a loaded CPU. But the code assumed that a running thread's lock is the same as that of the corresponding runqueue, and there are small windows where this is not true. In this case, we can end up with non-atomic modifications to td_flags. Since this load balancing is best-effort, simply give up if the thread's lock doesn't match; in this case the thread is about to enter the scheduler anyway. Reviewed by: kib Reported by: glebius Fixes: e745d729be60 ("sched_ule(4): Improve long-term load balancer.") MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D35821 --- sys/kern/sched_ule.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c index 138cb13e0fbe..0f5a73767408 100644 --- a/sys/kern/sched_ule.c +++ b/sys/kern/sched_ule.c @@ -871,7 +871,8 @@ sched_balance_group(struct cpu_group *cg) */ TDQ_LOCK(tdq); td = tdq->tdq_curthread; - if ((td->td_flags & TDF_IDLETD) == 0 && + if (td->td_lock == TDQ_LOCKPTR(tdq) && + (td->td_flags & TDF_IDLETD) == 0 && THREAD_CAN_MIGRATE(td)) { td->td_flags |= TDF_NEEDRESCHED | TDF_PICKCPU; if (high != curcpu)