From nobody Tue Oct 20 16:47:23 2026 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 4j8JHH2m6Wz6vmCc for ; Tue, 20 Oct 2026 16:47:23 +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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4j8JHH1JM8z4Y2r for ; Tue, 20 Oct 2026 16:47:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792514843; 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=Lr+DrLp0N+nzxaUQlen8uaKJxBc2A0tGOZrTuTPxrFk=; b=jpfRa9YbYPkMsW2Bp0i60LTm4u2xV8f3ZjoAnhsa8tPo3kcnX3FXroXLlUL5U7JccrrHLj Uq5Uqqj6EkbyJBhCH71FnHJ0ZLaG3v2PaAzgzFyh+k0cQfoKGb/HXt82yj0m/9uvTYc9RZ wlvRapCy6ruJqGPrrnXZnGbuCPpAI2YxYATfit7pNc9xgw2DEb9o3igxZwwbmJBKkOUlRi ZQrZTwn9l7ga8Rk1Cok0e6IIfpSvm9hV8/meMPylTnTfFJYwd+vV7TCSg/GnY2nLyxx0ln 77gXbNSI29l9t2M7qWHYbL6tQYBJe1WXL32Pa5cuc/nGRYjX2hp2fQkg99HPag== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792514843; b=ZBmsJKP+PmSBamdkwPJRVi0MEvbr0vnT37EhlDBw6c+79WVh5Yt+Q1uomuin1gO/XGoT8T Hq1F528rbbnUIFm+aNq0xqVYOntHDCIC3s/3WGO1wO9SQ1phvE8hxxgWPlMGRpLOWx42+R Vwspo3JwmaGUb10ck6XaWzmcbBCniCz6BfzDjsgPHsDciDTpBfLcQsT4f95JLTZM79BfbN zCQNyodbd01++TmUTyy4eXe6NDkAepx/P2AqiTyfxPkxlMtlhhy+soRiZwojuJOphR0tsL 0dMlQVLB/n2X/vEMckPsF+gsjVhSGW4mJVLuuw9aq/NHY8ehfh+3YcFV7a1MVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792514843; 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=Lr+DrLp0N+nzxaUQlen8uaKJxBc2A0tGOZrTuTPxrFk=; b=ulgycibd3A4asduI5dzX5rAO+Gghm8u5iBO7z50J2AVfhvNxMxBFa+9teVF+5BgOkpQCqw Nzq7Tm1PKdYCCrVFOoUQInEyoRgKv3vzzKHyq2LXp4Vg+0UFhXAV5FKqVWWXAG+PKdYaWk iW93e/sMdlL6Ws9Ys5pZoGkPu2u7oUkeKvRXDITRnVMmaTzlm3zqo7QFBSacyyFn1Gf/eZ IwiP1+UQ3Nc+IuUR3yBeZDELveI+4DugxHMovKz8eU1WzH/4CzVvoriCnUfxEiynXQp41v a+UJIPDubNwOednhw9yd1wG6qCK9RiBWTwbS60YbuMEDgCik/cC3xcZf7mp6NQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4j8JHH0KmRzFtG for ; Tue, 20 Oct 2026 16:47:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 20ea7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 20 Oct 2026 16:47:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 07ab87b60d08 - main - powerpc: powerpc_ipi_handler(): Stop first, preempt last List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: Commit messages for the main branch of the src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 07ab87b60d08c665eab0b187e81a239145f9961d Auto-Submitted: auto-generated Date: Tue, 20 Oct 2026 16:47:23 +0000 Message-Id: <6ad79b1b.20ea7.5bd96a97@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=07ab87b60d08c665eab0b187e81a239145f9961d commit 07ab87b60d08c665eab0b187e81a239145f9961d Author: Olivier Certner AuthorDate: 2026-10-17 17:38:59 +0000 Commit: Olivier Certner CommitDate: 2026-10-20 16:46:13 +0000 powerpc: powerpc_ipi_handler(): Stop first, preempt last Preemption should happen last so that other IPIs have a chance to be executed in due course, in particular hardclockintr(). So, move handling of IPI_PREEMPT at the end. An IPI_STOP/IPI_STOP_HARD request should be processed immediately to avoid risks that further processing changes the system state on panic, or worse itself causes another panic on corrupted kernel state. While here, move IPI_AST handling just before IPI_PREEMPT. We currently do not need to do anything for it, but if we were to, it is likely that would have to happen after other IPIs but IPI_PREEMPT. Reviewed by: jhibbits Fixes: 9d5a22b928c2 ("MFp4: SMP support") Fixes: 12640815f815 ("MFp4: SMP support") Fixes: 7ed09a6778d3 ("powerpc: Rework IPI message processing") MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D60863 --- sys/powerpc/powerpc/mp_machdep.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/sys/powerpc/powerpc/mp_machdep.c b/sys/powerpc/powerpc/mp_machdep.c index 114990a97cdb..ff08bd56ad58 100644 --- a/sys/powerpc/powerpc/mp_machdep.c +++ b/sys/powerpc/powerpc/mp_machdep.c @@ -302,17 +302,7 @@ powerpc_ipi_handler(void *arg) ipimask = atomic_readandclear_32(&(pcpup->pc_ipimask)); if (ipimask == 0) return (FILTER_STRAY); - if (ipimask & (1 << IPI_AST)) { - CTR1(KTR_SMP, "%s: IPI_AST", __func__); - } - if (ipimask & (1 << IPI_PREEMPT)) { - CTR1(KTR_SMP, "%s: IPI_PREEMPT", __func__); - sched_preempt(curthread); - } - if (ipimask & (1 << IPI_RENDEZVOUS)) { - CTR1(KTR_SMP, "%s: IPI_RENDEZVOUS", __func__); - smp_rendezvous_action(); - } + /* A stop request should not be delayed. Keep it first. */ if (ipimask & (1 << IPI_STOP)) { /* @@ -330,10 +320,26 @@ powerpc_ipi_handler(void *arg) CPU_CLR_ATOMIC(cpuid, &started_cpus); CTR1(KTR_SMP, "%s: IPI_STOP (restart)", __func__); } + if (ipimask & (1 << IPI_RENDEZVOUS)) { + CTR1(KTR_SMP, "%s: IPI_RENDEZVOUS", __func__); + smp_rendezvous_action(); + } if (ipimask & (1 << IPI_HARDCLOCK)) { CTR1(KTR_SMP, "%s: IPI_HARDCLOCK", __func__); hardclockintr(); } + if (ipimask & (1 << IPI_AST)) { + CTR1(KTR_SMP, "%s: IPI_AST", __func__); + } + /* + * sched_preempt() causes an immediate switch to another thread when not + * executing in a critical section. In order to ensure that all other + * IPIs are processed in due course, it has to be called last. + */ + if (ipimask & (1 << IPI_PREEMPT)) { + CTR1(KTR_SMP, "%s: IPI_PREEMPT", __func__); + sched_preempt(curthread); + } return (FILTER_HANDLED); }