From nobody Wed May 28 13:35:01 2025 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 4b6r8j5H8sz5xVSQ; Wed, 28 May 2025 13:35:01 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4b6r8j2yCTz3Ld9; Wed, 28 May 2025 13:35:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748439301; 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=BTJrzQ+U6jNGIVI1oFH1eUcCzvdsbHlBpZtrUg0YuJg=; b=GLh3t1arfl0dYU0Ffm1lkBGqzTTk5iCrUQJec+IO01AXvtBC3z7kGTYVMT1hpiDCrHOHGb Vu7ayoj2/y4th9k/cdl71IHrnGx970fu35uiQgEB949T/b9j9su77Sb/kj3LlLldtSMUJI gm/KOpr9HQpYxA1ni/2X4cMKhC5FeIeAqAOmDezOfNf1m+vd6ViJ5lUZQTUpzbC08yVzil 8qT0x5xAkSHwr04m8lASZQ8RJSruxaux4AjMITEOg8sQgoIuJ7kZlRSFKaDa5qFoX+QIFe sqTGLLX9tkVYmUtJFGvxv/7G9WirhWqiVBg0xWE6GZGK99Jvbi3qsxyU3Fm1uQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1748439301; a=rsa-sha256; cv=none; b=V0BbU5h5PzrfkBEW+n537UzPTmW3CcwOFRmONABcRjEKpbsbMRlMV5AAtI1WYTkiZs7ah8 xtsvA+h7Jw6ckTsw7IxKUeYR5JsppPc3JMGMp1n8th7vzqSvt4ue6a2QYeqbX0m+4+aTxm 4XpbGrZ6JFlVLM77Rjdt6IyaohnmeZJ5Juvjj4k/59l2InXjzkuto67cjIRfEb1kXRhNZQ x09vADE/9YIdRxzbatWPikhTy0VQ95exDNUG7Dr/KWsm4iYBk8Q4PT3mQKXtVmNcWzFP7W gjNgsNWlrcYFtQXzQFp/9qARAbX9Ql9RZnOV3Mc8lYFjEf98Bi+eCVoiGs5zFw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748439301; 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=BTJrzQ+U6jNGIVI1oFH1eUcCzvdsbHlBpZtrUg0YuJg=; b=q9w2HSOabrI6SdlypghoSK9wFs5i9hxFNKFheVYHwwCISmK7vPWlRQJEJaXIQ0m/bj05H1 AvqVHH/1lJjj3nhEsacD3JO6zRQiDPnhlw+5vzpqmjCk0V3qO57RziKFnDjCGp1tOn14vB 3bU1nTDzq1FZmrIoSAVcf0Fc38pg57oQOzWV7Hgep+8FVyCvqiTPjNORgo0zVmE9JfP5ww piBYZaxQV+/dFa07SnT8hGOTSqWLlxshHZB3yQNwGyBJ6hJNiM8Nrv5w9ww8NeboFSxRH7 wxqP5Vd0NXICQgR1tzojBDubIeBRqQVvOE4pX+4T1iCifZpQ2bwJu2Z+hMlSVA== 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 4b6r8j19dnzg4H; Wed, 28 May 2025 13:35:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 54SDZ1Gk017489; Wed, 28 May 2025 13:35:01 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54SDZ1sF017486; Wed, 28 May 2025 13:35:01 GMT (envelope-from git) Date: Wed, 28 May 2025 13:35:01 GMT Message-Id: <202505281335.54SDZ1sF017486@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 602c858e000d - main - arm64: Reuse aps_started to simplify SMP boot 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: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 602c858e000dafd81bbfbdaf72588fef18fea938 Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=602c858e000dafd81bbfbdaf72588fef18fea938 commit 602c858e000dafd81bbfbdaf72588fef18fea938 Author: Andrew Turner AuthorDate: 2025-05-27 19:38:29 +0000 Commit: Andrew Turner CommitDate: 2025-05-27 19:50:11 +0000 arm64: Reuse aps_started to simplify SMP boot We need to know when all CPUs have booted. Rather than locking and counting when starting CPUs we can count on the boot CPU to set smp_started. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D50366 --- sys/arm64/arm64/mp_machdep.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/sys/arm64/arm64/mp_machdep.c b/sys/arm64/arm64/mp_machdep.c index 4ef0019d3f8f..88d48bceb892 100644 --- a/sys/arm64/arm64/mp_machdep.c +++ b/sys/arm64/arm64/mp_machdep.c @@ -112,9 +112,6 @@ void mpentry_psci(unsigned long cpuid); void mpentry_spintable(void); void init_secondary(uint64_t); -/* Synchronize AP startup. */ -static struct mtx ap_boot_mtx; - /* Used to initialize the PCPU ahead of calling init_secondary(). */ void *bootpcpu; uint64_t ap_cpuid; @@ -143,16 +140,19 @@ static bool wait_for_aps(void) { for (int i = 0, started = 0; i < 2000; i++) { - if (atomic_load_acq_int(&smp_started) != 0) { + int32_t nstarted; + + nstarted = atomic_load_32(&aps_started); + if (nstarted == mp_ncpus - 1) return (true); - } + /* * Don't time out while we are making progress. Some large * systems can take a while to start all CPUs. */ - if (smp_cpus > started) { + if (nstarted > started) { i = 0; - started = smp_cpus; + started = nstarted; } DELAY(1000); } @@ -174,6 +174,7 @@ release_aps(void *dummy __unused) intr_ipi_setup(IPI_STOP_HARD, "stop hard", ipi_stop, NULL); intr_ipi_setup(IPI_HARDCLOCK, "hardclock", ipi_hardclock, NULL); + atomic_store_int(&aps_started, 0); atomic_store_rel_int(&aps_ready, 1); /* Wake up the other CPUs */ __asm __volatile( @@ -187,6 +188,9 @@ release_aps(void *dummy __unused) printf("done\n"); else printf("APs not started\n"); + + smp_cpus = atomic_load_int(&aps_started) + 1; + atomic_store_rel_int(&smp_started, 1); } SYSINIT(start_aps, SI_SUB_SMP, SI_ORDER_FIRST, release_aps, NULL); @@ -263,13 +267,8 @@ init_secondary(uint64_t cpu) dbg_init(); - mtx_lock_spin(&ap_boot_mtx); - atomic_add_rel_32(&smp_cpus, 1); - if (smp_cpus == mp_ncpus) { - /* enable IPI's, tlb shootdown, freezes etc */ - atomic_store_rel_int(&smp_started, 1); - } - mtx_unlock_spin(&ap_boot_mtx); + /* Signal the CPU is ready */ + atomic_add_int(&aps_started, 1); kcsan_cpu_init(cpu); @@ -700,8 +699,6 @@ cpu_mp_start(void) { uint64_t mpidr; - mtx_init(&ap_boot_mtx, "ap boot", NULL, MTX_SPIN); - /* CPU 0 is always boot CPU. */ CPU_SET(0, &all_cpus); mpidr = READ_SPECIALREG(mpidr_el1) & CPU_AFF_MASK;