From nobody Fri Feb 23 05:20:42 2024 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 4Tgyyf4FGfz5Bl9f; Fri, 23 Feb 2024 05:20:42 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Tgyyf3mFvz4rfv; Fri, 23 Feb 2024 05:20:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1708665642; 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=SXTe/mrqJo5fsTjPeMBqI6POE4wH3fYrzoPasTCdynU=; b=EdkQ+l77dCEF3vtdk5xDjOqLt+IJne2MhDopG16X8QHep785WW9EqdBSre8FLc/HDU6N4O zsqmzNeFWUEsHQDoSwHA2e+nT4xCeJwN/oy91WXb+HExp4nFQqofMM0MKaazytrQLBHBBz RnPL5fLuLOVZU+NautW+enqGIkr59OD6sEoy+OkSiQhq/HKAMxwnBoyXOgpOTmlrttTN1k 56eiEvFMPI09+/VwI9Ml5HWvMqnLazYn/4+wQTLjE5Lt9AjaM9f2vOkLqcAhrn6pxYlAm4 wPG/qVv9JqiYXGYRXH/AzyoZIm49cJaWPlLiQeYCfS0jUSAwY4WGbjVpMIXtFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1708665642; 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=SXTe/mrqJo5fsTjPeMBqI6POE4wH3fYrzoPasTCdynU=; b=ShFuzdmo5KXTk/KphrXm6Kqvo0wbNw1Qr/MiKShWtkb0VEa/xfrj9BoFbCnaxx9kBwnHmO KrXMQqVFOyTEvJ0B7MR5I5tW7OIlXpNMYzrNFq9dXvQKsG+oTXqgAmQxP9CxbwMUR7/taG otjOlPc7Si+d04NEQsxKd5ToSy/AgRPyNNjQwSFBg246yJUaXythDBONWL4tXFdLyk7irg 7RcWiN9A8/L1tBBF+SynaILrPu61lIk0ge8jGrNcpZoxtS5p2SXoCcJRi6aoMs5BhFnrHh igU0vEsiFC329kxyRfJITRqKd9svQk+4Qbppie4WJYtG4bdVJ9aLMuer/WKgRA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1708665642; a=rsa-sha256; cv=none; b=P/Jso4VTbgWU97uJQ4Jpvn5qjt3h9Wvz3u7Roi3SiILUwxU6KloozWYU8euZjTEczoP4Ji iKNmR7rxcM4jAqiGWNSqxBFMjtcqO1jBr41hXo9v7R32XpujF3QhbhGPctUok6fpX9FFhT Sxe4+Y/H+ya1+KULFWOw9K0YRS5Drot/kAGiw4sosg0cd9VB+BXkfm2hMJg3lHxH76rwst CEG2qcv9zn7CyKu6g6BR5ZhPzGoCDTQiv4PX+KTcwmwvoVd7lk5z2ohnhfqMX686fBjJPW 81dACeZj0SL6l5GLdVLJ6sPBd91frMUiy2B4W24Hzq7JkLSfN66DqmBONYUp0A== 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 4Tgyyf2qhDz12VX; Fri, 23 Feb 2024 05:20:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 41N5KgvK029073; Fri, 23 Feb 2024 05:20:42 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 41N5KgED029070; Fri, 23 Feb 2024 05:20:42 GMT (envelope-from git) Date: Fri, 23 Feb 2024 05:20:42 GMT Message-Id: <202402230520.41N5KgED029070@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: John Baldwin Subject: git: c76878c656e9 - stable/14 - acpi: Defer reserving resources for ACPI devices 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org 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/stable/14 X-Git-Reftype: branch X-Git-Commit: c76878c656e91aa595c2c81e86ac5adb59a15c98 Auto-Submitted: auto-generated The branch stable/14 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=c76878c656e91aa595c2c81e86ac5adb59a15c98 commit c76878c656e91aa595c2c81e86ac5adb59a15c98 Author: John Baldwin AuthorDate: 2024-02-22 18:43:43 +0000 Commit: John Baldwin CommitDate: 2024-02-23 00:48:35 +0000 acpi: Defer reserving resources for ACPI devices The goal of reserving firmware-assigned resources is to ensure that "wildcard" resource allocation requests will not claim an address range that is actually in use even if no attached driver is actively using that range. However, the current approach can break in some cases. In particular, ACPI can enumerate devices behind PCI bridges that don't show up in a normal PCI scan, but those device_t objects can end up as direct children of acpi0. Reserving resources for those devices directly from acpi0 ends up conflicting with later attempts to reserve the PCI bridge windows. As a workaround, defer reserving unclaimed resources until after the initial probe and attach scan. Eventually this pass of reserving unclaimed resources can be moved earlier, but it requires changes to other drivers in the tree to permit enumerating devices and reserving firmware-assigned resources in a depth-first traversal before attaching devices whose drivers request wildcard allocations. PR: 272507 Reported by: Justin Tocci Reported by: john@feith.com, many others Tested by: Oleg Sidorkin , dch (cherry picked from commit f2fcb68074a51a8b399dc80d4c03fbe98a0ab92c) --- sys/dev/acpica/acpi.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index 7d1fc10afb9e..61df797c7393 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -1367,8 +1367,17 @@ acpi_sysres_alloc(device_t dev) } /* - * Reserve declared resources for devices found during attach once system - * resources have been allocated. + * Reserve declared resources for active devices found during the + * namespace scan once the boot-time attach of devices has completed. + * + * Ideally reserving firmware-assigned resources would work in a + * depth-first traversal of the device namespace, but this is + * complicated. In particular, not all resources are enumerated by + * ACPI (e.g. PCI bridges and devices enumerate their resources via + * other means). Some systems also enumerate devices via ACPI behind + * PCI bridges but without a matching a PCI device_t enumerated via + * PCI bus scanning, the device_t's end up as direct children of + * acpi0. Doing this scan late is not ideal, but works for now. */ static void acpi_reserve_resources(device_t dev) @@ -2256,9 +2265,6 @@ acpi_probe_children(device_t bus) /* Pre-allocate resources for our rman from any sysresource devices. */ acpi_sysres_alloc(bus); - /* Reserve resources already allocated to children. */ - acpi_reserve_resources(bus); - /* Create any static children by calling device identify methods. */ ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "device identify routines\n")); bus_generic_probe(bus); @@ -2267,6 +2273,12 @@ acpi_probe_children(device_t bus) ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "acpi bus_generic_attach\n")); bus_generic_attach(bus); + /* + * Reserve resources allocated to children but not yet allocated + * by a driver. + */ + acpi_reserve_resources(bus); + /* Attach wake sysctls. */ acpi_wake_sysctl_walk(bus);