From nobody Sun Sep 06 19:48:31 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 4hdLNb5977z6rcNW for ; Sun, 06 Sep 2026 19:48:31 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hdLNb3RYTz3hfw for ; Sun, 06 Sep 2026 19:48:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788724111; 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=pCJUHkilkFXqaa+puffzjsBS6LygZAF4y64hoiqIRqw=; b=XWWiQzmqyP8u4JfMYY9ZNJGFQ1CIigYicE3zmLWK1iRjCq/cAVYxo1aW6eMHIaKwFqeLmP vbAx8IfywaVDrk/7gn2KencPH2PC3HKHaXJ6n40X5y6UfqqzIlCRnuuL60KvGvzAoCZlqb Sjlhd6GHRtmZGt+sVZ8E6l8emh2CMKZtvtPvqhcpaqOIwcMB8BEpv1J6GnjcDRGYbNiode BT7g9VLD7Lj9WMt0+bxKqKOK1+EqVE4sXlKob/oSqoQv/9df8gQLaj/ULDu7DH0hjkrd75 KJupkOSxpe720ZBu24/GVzuOEVojAMRUk/pyxB0YfZoLesfNlBr/Oz2MNFWEcw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788724111; a=rsa-sha256; cv=none; b=N1nysVDrRmBJk/xSYnSU48k1tkqClW4eYQgrbbR4zlkSnJ+rDAmU2/p6MKFx60pB8O6q8b 9pkVbUGI65lz15nb20tNrOQdo4ZGyM/O2aRlenFkkNWew2K7am7Tceba0nqq3hWg8PXAlc faIcGJ++Vx+QIvwhmHcT4LsWb4pBky1EMVsBzWhXUKLrUitLrHir7Xbss1MwHk0xfyQc/4 M19WwTXRILocv5R435rX38oWaG7dI9Ya7IrU/OqoeXsrQvRLVXsY7cyquiR/2wu5EFtVKB KRPZfFQ4X5lTbHakhh7K0DfZaWhliG/3/yRZEpWULBSso/xesREZPAn2a3ODeA== 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=1788724111; 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=pCJUHkilkFXqaa+puffzjsBS6LygZAF4y64hoiqIRqw=; b=KGr8Z5BIiOr4nIwevU4+u85+03Q/v/QlwvPE+9wD4dQmP/+3yNCSGlEsY86sI+EpkXA6Lp lVpXg5Fm5KNfvm77l2Kk3mbStT2gLYVvU1rGgJYwoHGZa8nK7YG7P4GEoZYolS+8DaQsK8 Bt3ZGSTiKIA5q39dzQhwdz12pfH6+Htpn2EIrmMmjWGPGGqLw1kzyHlb1R28YiSmZEVUEH G3P8dPbhmX5XXQebgYgsfoMJJAAFAuIySNN028zl0RB4jP146ALjXXSwWhJbbRZbVUdPCI FFylMxpQNhVtLunRUaiT+NuLNi3xz1YnuERXGv2smFVWR9luzAXd9LPDlkyU/w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hdLNb23vMzmLb for ; Sun, 06 Sep 2026 19:48:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3d8db by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 06 Sep 2026 19:48:31 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Abdelkader Boudih Subject: git: ba28690cc6e0 - main - apple_bce: fix cold boot panic in mailbox send 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 List-Id: 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: seuros X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ba28690cc6e0ce6f418122d3db0b1eddec3d93a9 Auto-Submitted: auto-generated Date: Sun, 06 Sep 2026 19:48:31 +0000 Message-Id: <6a9dc38f.3d8db.67f88096@gitrepo.freebsd.org> The branch main has been updated by seuros: URL: https://cgit.FreeBSD.org/src/commit/?id=ba28690cc6e0ce6f418122d3db0b1eddec3d93a9 commit ba28690cc6e0ce6f418122d3db0b1eddec3d93a9 Author: Abdelkader Boudih AuthorDate: 2026-09-06 17:55:02 +0000 Commit: Abdelkader Boudih CommitDate: 2026-09-06 19:47:44 +0000 apple_bce: fix cold boot panic in mailbox send Poll mailbox reply registers with DELAY() when the system is still cold, falling back to the interrupt-driven sema_timedwait path once timers are available. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58871 --- sys/dev/apple_bce/apple_bce_mailbox.c | 50 ++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/sys/dev/apple_bce/apple_bce_mailbox.c b/sys/dev/apple_bce/apple_bce_mailbox.c index c19a01b7269c..deacb7ed5317 100644 --- a/sys/dev/apple_bce/apple_bce_mailbox.c +++ b/sys/dev/apple_bce/apple_bce_mailbox.c @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -62,20 +63,41 @@ bce_mailbox_send(struct bce_mailbox *mb, uint64_t msg, uint64_t *recv, return (0); } - /* Wait for interrupt-driven reply */ - if (sema_timedwait(&mb->mb_cmpl, hz * timeout_ms / 1000) != 0) { - /* Timeout -- reset to idle */ - atomic_store_int(&mb->status, 0); - return (ETIMEDOUT); - } - - if (atomic_load_int(&mb->status) != 2) { - atomic_store_int(&mb->status, 0); - return (ETIMEDOUT); + if (cold) { + /* + * During early boot, timer-backed sleeps are not available. + * Poll the hardware directly, but account for an installed + * interrupt handler consuming the reply first. + */ + unsigned int waited = 0; + + while (waited < timeout_ms * 1000) { + if (atomic_load_int(&mb->status) == 2) + break; + (void)bce_mailbox_handle_interrupt(mb); + if (atomic_load_int(&mb->status) == 2) + break; + DELAY(100); + waited += 100; + } + if (atomic_load_int(&mb->status) != 2) { + atomic_store_int(&mb->status, 0); + return (ETIMEDOUT); + } + } else { + /* Wait for interrupt-driven reply */ + if (sema_timedwait(&mb->mb_cmpl, + hz * timeout_ms / 1000) != 0) { + atomic_store_int(&mb->status, 0); + return (ETIMEDOUT); + } + if (atomic_load_int(&mb->status) != 2) { + atomic_store_int(&mb->status, 0); + return (ETIMEDOUT); + } } - if (recv != NULL) - *recv = mb->mb_result; + *recv = mb->mb_result; atomic_store_int(&mb->status, 0); return (0); @@ -106,7 +128,9 @@ bce_mailbox_handle_interrupt(struct bce_mailbox *mb) if (atomic_load_int(&mb->status) == 1) { atomic_store_int(&mb->status, 2); - sema_post(&mb->mb_cmpl); + /* A cold sender polls status and must not leave a token. */ + if (!cold) + sema_post(&mb->mb_cmpl); } return (0);