From nobody Sun Sep 27 16:45:01 2026 X-Original-To: dev-commits-src-all@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 4ht9KH3YxZz6tlJj for ; Sun, 27 Sep 2026 16:45:07 +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 4ht9KH1pGCz4t9S for ; Sun, 27 Sep 2026 16:45:07 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790527507; 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=rIUyqSIvdbWtXs/VCwwXW0gzUNCoF8eizsxhWqCwtyc=; b=yoYjn1ZvuiRpJjm8hhy3la392OM+rRpO8uD1ewW5wjTEqDpKuXavZrLWtyoQ1mpORVMrlA pLSBH7AvAUZABb45GpWDCc851fBt88bEqR1sQGuKfNkLv2/OEJn7Y1htzKgDvazWCtCKHZ 7QPY3csCfmwXMksJjax7lPe+rTrpv0mh1Zl7l7AJwn24uBdndbb/6X4P/MWhHLX00JZiay r2UEeZ49lt6PWmDiKuhowzf5ADZH9T2VlwIW+gCGxg8Fg9dqdQeHinc97PHrE48oxH8mbw zsplcptTep+j0YLg4mhdz9t498ot7nNxPJF9JQP+wd6+G/k6a3XcY/eTvUQYKg== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790527507; b=JUu+/vrgiMlI4/F90ZD1qyAPU1Vb2JWwVcM+jtqOwHkMDg8J0UUwFzTdOGHMzV4QD9ikEw jX66O8Ivb952fjFwo3i2ioOt/ZP9qVd+tK3UAcG1kedVVQWHGeDzsOvYWVnY5DfmsV9BjF 2syFJ6Az4m+HOGz2k5KOHM8VV4kCYO2chs5n/gD9r5Ws7fLEBOtY61u0/egRuxL7SbpXLq ZlPCgolIQ1hEAN6Lh5GWuza1nKwS6PE6iXE+8zaxTvDYxAFLrMLKMe44IKyYZi3ko6dXow 9PbNscHvUxQ3I59TKHj6Fqpik2O62B3ocNODHjoCKrY2J/dC4PEsLHVSeJdq2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790527507; 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=rIUyqSIvdbWtXs/VCwwXW0gzUNCoF8eizsxhWqCwtyc=; b=uEyKJco/m6ch7jjYtz+AYxsapfw6MTzCt+5sh0E467MdLT5qIPqvtMBRMIzmRapwZn3Cc6 //jBt0Gca1as1T9M4BN9Y+UNMr/J3r8PRdfDmQzN81okg2Q0kL2/xEyzZdNWn9ffvNsNz9 kKMUCcOPNgHEr0DZYYt7UW/TUWjYRIgGx3p0eV/GHaH7TN7sEnjxXpabcU9VnJTYp/nBVG AZHyQe3OfGvbRY4iVvSjp85c2/TORelwUREmDSG8XbmvVb2NuiAlikJ9bXfV98Tf4PyR6a 5qwOza34QbYbb8N7utxQobP3iAUwfgpueqK3KHzLOQtQ8NQjrKQILR0SwRXYcA== 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 4ht9KH0bL5zqBY for ; Sun, 27 Sep 2026 16:45:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26f62 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 27 Sep 2026 16:45:01 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Joseph Mingrone Subject: git: 943686575d81 - main - tpm: Do not use timed tsleep() while polling during cold boot List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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: jrm X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 943686575d818c5cd3aaf2dfb912fabfb7dd7872 Auto-Submitted: auto-generated Date: Sun, 27 Sep 2026 16:45:01 +0000 Message-Id: <6ab9480d.26f62.b6c24d3@gitrepo.freebsd.org> The branch main has been updated by jrm: URL: https://cgit.FreeBSD.org/src/commit/?id=943686575d818c5cd3aaf2dfb912fabfb7dd7872 commit 943686575d818c5cd3aaf2dfb912fabfb7dd7872 Author: Joseph Mingrone AuthorDate: 2026-09-26 19:12:47 +0000 Commit: Joseph Mingrone CommitDate: 2026-09-27 16:20:34 +0000 tpm: Do not use timed tsleep() while polling during cold boot Commit 4e0f283fb97a made tpm_tis12_init() wait for TPM_STS_CMD_READY after aborting any command. The wait is implemented by the driver's existing tpm_waitfor_poll() loop, which sleeps with a one-tick tsleep() between status reads. Until now, that loop only ran from the resume and command paths after boot. From tpm_attach() it can panic with "timed sleep before timers are working" when the TPM is attached from ACPI during cold boot and the chip does not report ready on the first status read. Before 4e0f283fb97a, tpm_tis12_init() wrote TPM_STS_CMD_READY and returned without waiting, so the polling loops only ran after boot. tpm_request_locality() had the same latent hazard but its fast path returns before sleeping whenever locality is already active. Nothing calls wakeup() on the channels used by these polling loops, so the sleeps are pure delays. Use pause_sig(), which falls back to DELAY() while the kernel is cold and returns EWOULDBLOCK, a value these loops already tolerate. The c argument to tpm_waitfor_poll() is now unused. It is left in place to keep this change minimal for MFC and can be removed in a follow-up. Reviewed by: kbowling Fixes: 4e0f283fb97a ("tpm: Bound TPM 1.2 locality ownership") MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D60050 --- sys/dev/tpm/tpm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/dev/tpm/tpm.c b/sys/dev/tpm/tpm.c index ee886e6ae7f8..109d01af220e 100644 --- a/sys/dev/tpm/tpm.c +++ b/sys/dev/tpm/tpm.c @@ -561,7 +561,7 @@ tpm_request_locality(struct tpm_softc *sc, int l) while ((r = bus_space_read_1(sc->sc_bt, sc->sc_bh, TPM_ACCESS) & (TPM_ACCESS_VALID | TPM_ACCESS_ACTIVE_LOCALITY)) != (TPM_ACCESS_VALID | TPM_ACCESS_ACTIVE_LOCALITY) && to--) { - rv = tsleep(sc->sc_init, PRIBIO | PCATCH, "tpm_locality", 1); + rv = pause_sig("tpm_locality", 1); if (rv && rv != EWOULDBLOCK) { #ifdef TPM_DEBUG printf("tpm_request_locality: interrupted %d\n", rv); @@ -638,7 +638,7 @@ tpm_getburst(struct tpm_softc *sc) if (burst) return burst; - rv = tsleep(sc, PRIBIO | PCATCH, "tpm_getburst", 1); + rv = pause_sig("tpm_getburst", 1); if (rv && rv != EWOULDBLOCK) { return 0; } @@ -807,7 +807,7 @@ tpm_waitfor_poll(struct tpm_softc *sc, u_int8_t mask, int tmo, void *c) * met. */ while (((sc->sc_stat = tpm_status(sc)) & mask) != mask && tmo--) { - rv = tsleep(c, PRIBIO | PCATCH, "tpm_poll", 1); + rv = pause_sig("tpm_poll", 1); if (rv && rv != EWOULDBLOCK) { #ifdef TPM_DEBUG printf("tpm_waitfor_poll: interrupted %d\n", rv);