From nobody Wed Sep 30 16:05:16 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 4hw0Hw69BJz6tkk0 for ; Wed, 30 Sep 2026 16:05:16 +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 4hw0Hw5XZ9z4WX8 for ; Wed, 30 Sep 2026 16:05:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790784316; 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=Zn0a+TBvBl4DZol8Os3gtV7gvA3lVQU1CbWJodUchb4=; b=nZ6U3fm3kcPQJm2ah4ZL7JFEVcGjorCPr9oMam+bLuKznHZxiDwZ9CB12MSr2s5AoaR9Ys eFoPt2q19Nc4J2r4xkClTtvrfmkVgV1L/btg4klsFjUhXr8RSJZUzvMD2uwM2acnuiQbuS KpKRTkVa77+vTDwkS6umHiSnJe4KgMpo2nao3sV9cHr8KIuEV/huj0UTq4pdOUbF7ZwgfN Z5QnZx4tOCUcKJ5CGX/pgQvnXATIplG0zd5DLyCvwmdNRjXhfWRA7LFq7O5zno7Ud2JXBs 0A6AZkb/zAusjEN0JAETy0nhm3C9Tx9MlpH4C//dCAxbYkoDlR2bvEokRcUB2Q== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790784316; b=bCvzH7McUrQksAyUxcyJT2qJMgbfP42hYx8T7FFYol3AWQA3zhN2T5bO8UrXxFyxn9DUIj ZNAez6cz0FiAbrvwlYHMAxp3ftLIizYDN67kHe1o44FHBwVcJUYHA4HfJCCQuzy3P9630g cLQt9Sqru02YyGyj9XCg30ruOPnyzTgWGzL6J9QTePAu0SlEQxGxlKHenlVC+Fuo+2cnq/ ZGgNoNRO3I9mKwvuzZyMYoPgLcPLyj79G5HccQzyDUTZ7p3A3LKsPnWdBS8f5llYu8dv4W mHPlFnN+LYFNTMdp2gVRamRgMszmPq1Un1RBPaIYxBnF74us+skeOtR9x/y72A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790784316; 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=Zn0a+TBvBl4DZol8Os3gtV7gvA3lVQU1CbWJodUchb4=; b=xCIZV1Z/mzDlj6XMKlEdbioSAYSmEbm961u/hTcrbdxmrkbBrxBZkRebN7/EsWi/OH0YW9 sAFo3q2iDP1bTP4W1RBvft2bcwsMkwvQjgZMIK8E7sr87jWlXjz33O0GM5u8F6IgsMuQQl fTIkHlJ4WvnCuRT0yoGMQUdNVgtq/GGF1sXmeTL2kc4z+8oYW8kEVLcUJLacCT/5VyxT3H XcNGo6Sk977J4uHeWi+zaJKCENr3B+f130nYZsw/bnsbWiIPx18WhbZrbXa4J50NLtcQZV CKkgHHzfDlTr+nEUw6uZufvJsrDFuLvhZ2ak9CTXFn4joIiHBNT1v1ISZ+fnNw== 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 4hw0Hw4J9PzsWL for ; Wed, 30 Sep 2026 16:05:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33675 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 30 Sep 2026 16:05:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: d23d186ff212 - main - acpi_timer: Trim some more leftovers from the ACPI-safe timer 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: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d23d186ff212023c4e1ff61a0f488dc4dcb1b75c Auto-Submitted: auto-generated Date: Wed, 30 Sep 2026 16:05:16 +0000 Message-Id: <6abd333c.33675.5a0e1a85@gitrepo.freebsd.org> The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=d23d186ff212023c4e1ff61a0f488dc4dcb1b75c commit d23d186ff212023c4e1ff61a0f488dc4dcb1b75c Author: John Baldwin AuthorDate: 2026-09-30 16:04:59 +0000 Commit: John Baldwin CommitDate: 2026-09-30 16:04:59 +0000 acpi_timer: Trim some more leftovers from the ACPI-safe timer The "safe" variant of the hook to read the timer is no longer used and can be removed. Instead, initialize the get_timecount member of acpi_timer_timecounter to the normal hook statically. While here, initialize a few more fields in acpi_timer_timecounter statically. I've kept the name as just "ACPI" instead of "ACPI-fast" now. During device probe there is no longer any reason to alloc the register resource since it is not used, so remove all that. While here, defer registration of the timecounter until attach (kind of odd to do such a thing during probe leaving a window where the timer register was unallocated but in theory could still be read via the timecounter). Reviewed by: cperciva Fixes: 00d061855deb ("Garbage-collect ACPI-safe timer and friends") Differential Revision: https://reviews.freebsd.org/D59933 --- sys/dev/acpica/acpi_timer.c | 82 +++++++++------------------------------------ 1 file changed, 15 insertions(+), 67 deletions(-) diff --git a/sys/dev/acpica/acpi_timer.c b/sys/dev/acpica/acpi_timer.c index 08bfa292bf90..6fe0b6b80310 100644 --- a/sys/dev/acpica/acpi_timer.c +++ b/sys/dev/acpica/acpi_timer.c @@ -72,7 +72,6 @@ static void acpi_timer_resume_handler(struct timecounter *, static void acpi_timer_suspend_handler(struct timecounter *, enum power_stype); static u_int acpi_timer_get_timecount(struct timecounter *tc); -static u_int acpi_timer_get_timecount_safe(struct timecounter *tc); static int acpi_timer_sysctl_freq(SYSCTL_HANDLER_ARGS); static device_method_t acpi_timer_methods[] = { @@ -93,12 +92,13 @@ DRIVER_MODULE(acpi_timer, acpi, acpi_timer_driver, 0, 0); MODULE_DEPEND(acpi_timer, acpi, 1, 1, 1); static struct timecounter acpi_timer_timecounter = { - acpi_timer_get_timecount_safe, /* get_timecount function */ + acpi_timer_get_timecount, /* get_timecount function */ 0, /* no poll_pps */ 0, /* no default counter_mask */ 0, /* no default frequency */ "ACPI", /* name */ - -1 /* quality (chosen later) */ + 900, /* quality */ + TC_FLAGS_SUSPEND_SAFE /* flags */ }; static __inline uint32_t @@ -153,51 +153,14 @@ acpi_timer_identify(driver_t *driver, device_t parent) static int acpi_timer_probe(device_t dev) { - int rid, rtype; - ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); if (dev != acpi_timer_dev) return (ENXIO); - switch (AcpiGbl_FADT.XPmTimerBlock.SpaceId) { - case ACPI_ADR_SPACE_SYSTEM_MEMORY: - rtype = SYS_RES_MEMORY; - break; - case ACPI_ADR_SPACE_SYSTEM_IO: - rtype = SYS_RES_IOPORT; - break; - default: - return (ENXIO); - } - rid = 0; - acpi_timer_reg = bus_alloc_resource_any(dev, rtype, &rid, RF_ACTIVE); - if (acpi_timer_reg == NULL) { - device_printf(dev, "couldn't allocate resource (%s 0x%lx)\n", - (rtype == SYS_RES_IOPORT) ? "port" : "mem", - (u_long)AcpiGbl_FADT.XPmTimerBlock.Address); - return (ENXIO); - } - acpi_timer_bsh = rman_get_bushandle(acpi_timer_reg); - acpi_timer_bst = rman_get_bustag(acpi_timer_reg); - if (AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER) - acpi_timer_timecounter.tc_counter_mask = 0xffffffff; - else - acpi_timer_timecounter.tc_counter_mask = 0x00ffffff; - acpi_timer_timecounter.tc_frequency = acpi_timer_frequency; - acpi_timer_timecounter.tc_flags = TC_FLAGS_SUSPEND_SAFE; - - acpi_timer_timecounter.tc_name = "ACPI-fast"; - acpi_timer_timecounter.tc_get_timecount = acpi_timer_get_timecount; - acpi_timer_timecounter.tc_quality = 900; - tc_init(&acpi_timer_timecounter); - device_set_descf(dev, "%d-bit timer at %u.%06uMHz", (AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER) != 0 ? 32 : 24, acpi_timer_frequency / 1000000, acpi_timer_frequency % 1000000); - - /* Release the resource, we'll allocate it again during attach. */ - bus_release_resource(dev, rtype, rid, acpi_timer_reg); return (0); } @@ -227,8 +190,19 @@ acpi_timer_attach(device_t dev) /* Register suspend event handler. */ if (EVENTHANDLER_REGISTER(power_suspend, acpi_timer_suspend_handler, - &acpi_timer_timecounter, EVENTHANDLER_PRI_LAST) == NULL) + &acpi_timer_timecounter, EVENTHANDLER_PRI_LAST) == NULL) { device_printf(dev, "failed to register suspend event handler\n"); + bus_release_resource(dev, acpi_timer_reg); + return (ENXIO); + } + + if (AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER) + acpi_timer_timecounter.tc_counter_mask = 0xffffffff; + else + acpi_timer_timecounter.tc_counter_mask = 0x00ffffff; + acpi_timer_timecounter.tc_frequency = acpi_timer_frequency; + + tc_init(&acpi_timer_timecounter); return (0); } @@ -285,38 +259,12 @@ acpi_timer_suspend_handler(struct timecounter *newtc, enum power_stype stype) } } -/* - * Fetch current time value from reliable hardware. - */ static u_int acpi_timer_get_timecount(struct timecounter *tc) { return (acpi_timer_read()); } -/* - * Fetch current time value from hardware that may not correctly - * latch the counter. We need to read until we have three monotonic - * samples and then use the middle one, otherwise we are not protected - * against the fact that the bits can be wrong in two directions. If - * we only cared about monosity, two reads would be enough. - */ -static u_int -acpi_timer_get_timecount_safe(struct timecounter *tc) -{ - u_int u1, u2, u3; - - u2 = acpi_timer_read(); - u3 = acpi_timer_read(); - do { - u1 = u2; - u2 = u3; - u3 = acpi_timer_read(); - } while (u1 > u2 || u2 > u3); - - return (u2); -} - /* * Timecounter frequency adjustment interface. */