From nobody Thu Apr 3 14:05:57 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 4ZT3Rp1BYhz5rxBl; Thu, 03 Apr 2025 14:05:58 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZT3Rp0T64z41dl; Thu, 03 Apr 2025 14:05:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1743689158; 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=jklQIm9EIUROMO+uEfPHZk3n1f/T2dyitxJMwU98l54=; b=IKN6JgRUoZFT6XpkY02t5agUde/vCPJFmJTCJNFS/85KDP/oOx2jTKbLLM65dD//7Hjkpn lPiqmMVtNPW8jT9CJ9RfmbvbHFJr6aeRcAKc2YU3gBmB4Y3qiThJqOmgRuQ/OvdyGlOG50 AL6rQRN//BcQPeu/XOhMoQHrEH2V/ibbCZCQ7Xwzx4lKYguLQ1wzMysGwpmz722utCREgW tPLs1qajv+JrFYgU7Fv8Ak/gsYeVh7ObWXH3c+lJPLRj/DJ23pk34JBAiBH7mGgTw3XS9R 5MUoWRUYTyKfLyvF/wvH6ULKbt5ThNLspZD/t7PV4rMuklgbAMGDFN1AaI8NEw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1743689158; a=rsa-sha256; cv=none; b=cRa6L1vnHFKl3jCIOmpyO+AgRb/csbcrJIp9JcTy5I329wsAjpS9tydRWh4HFyJ1rlDX9o Nv31F6xzyds27tFluMeYVtnHQXa5t8monqpRSXXs4FNzGtHaW6XCEQ6FhoTFXz7GU7ht3/ Nfuh4GPlLL3ysZhVD8Tv3whpOo/U0spelEPCnYbRRHWu5pLV4J5gbaxZ6pRnfRbhoCqnDV hYwg6Y/LGBZj9Wk/enRL5SJ1KLbAS/gw6MLQz+qpmSTCs507cDs9m0CZrwc08lqouXWYM/ NH4HORAfUgR+kKkxlesXxkoXjQv2yB7YOyiEeOdnMfCqJ9K/rJWL7NGwW4KJtA== 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=1743689158; 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=jklQIm9EIUROMO+uEfPHZk3n1f/T2dyitxJMwU98l54=; b=gyCwOyvkLsBp/mWy6sM4Z9RszdEuqd3jC4Fb4WICvQjTk+2NC6/ONrzxdiIea6szig1nOi opeK3bsszFfbaT11GaRdpP4oGlZ9SG2F9i5cMpCYisBEIRD0ZTLAmPrm9NHzifZuL4oMBm TFvktCkpb+rEiaJTVj3Cifcd7rfeeApQZl1eWfSYMVk79DYtvkp7XQts+yoBjdIxpLwENz za0Kdhk9BUNYtbBopgUzY/g9UV9cHFAMC22s4SSh04WP9bq4lgZIHMN/zTcouS/ShLDe9c qUtReLGKjsskz3t8eisfRPjlZH3N1MyTJ8abXVcsFMnECuZ6QH//y7+9roJ7bw== 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 4ZT3Rn6v25z14RY; Thu, 03 Apr 2025 14:05:57 +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 533E5vlk024547; Thu, 3 Apr 2025 14:05:57 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 533E5vEY024544; Thu, 3 Apr 2025 14:05:57 GMT (envelope-from git) Date: Thu, 3 Apr 2025 14:05:57 GMT Message-Id: <202504031405.533E5vEY024544@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: 944eda42fa6e - main - openfirm: Add OF_device_unregister_xref 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: kevans X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 944eda42fa6e449ec802958d41302e71a125ca5f Auto-Submitted: auto-generated The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=944eda42fa6e449ec802958d41302e71a125ca5f commit 944eda42fa6e449ec802958d41302e71a125ca5f Author: Emannuel Vadot AuthorDate: 2025-04-03 13:54:41 +0000 Commit: Kyle Evans CommitDate: 2025-04-03 14:03:44 +0000 openfirm: Add OF_device_unregister_xref When a device fails to attach, or a module is unloaded, we want to be able to unregister the xref as the device goes away. While the device_t may still be valid, it won't be providing whatever functionality the consumer that follows the xref wants it for and thus, we should not keep it discoverable. [Commit message re-worded by kevans@] Reviewed by: ian, imp Differential Revision: https://reviews.freebsd.org/D22945 --- share/man/man9/OF_device_from_xref.9 | 14 +++++++++++++- sys/dev/ofw/openfirm.c | 19 +++++++++++++++++++ sys/dev/ofw/openfirm.h | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/share/man/man9/OF_device_from_xref.9 b/share/man/man9/OF_device_from_xref.9 index 85a19df6641b..0b858866b654 100644 --- a/share/man/man9/OF_device_from_xref.9 +++ b/share/man/man9/OF_device_from_xref.9 @@ -23,19 +23,22 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd April 9, 2018 +.Dd April 3, 2025 .Dt OF_DEVICE_FROM_XREF 9 .Os .Sh NAME .Nm OF_device_from_xref , .Nm OF_xref_from_device , .Nm OF_device_register_xref +.Nm OF_device_unregister_xref .Nd "manage mappings between xrefs and devices" .Sh SYNOPSIS .In dev/ofw/ofw_bus.h .In dev/ofw/ofw_bus_subr.h .Ft int .Fn OF_device_register_xref "phandle_t xref" "device_t dev" +.Ft void +.Fn OF_device_unregister_xref "phandle_t xref" "device_t dev" .Ft device_t .Fn OF_device_from_xref "phandle_t xref" .Ft phandle_t @@ -57,6 +60,15 @@ If a mapping entry for already exists, it is replaced with the new one. The function always returns 0. .Pp +.Fn OF_device_unregister_xref +removes a map entry from the effective phandle +.Fa xref +to device +.Fa dev . +If a mapping entry for +.Fa xref +does not exists, it silently returns. +.Pp .Fn OF_device_from_xref returns a device_t instance associated with the effective phandle .Fa xref . diff --git a/sys/dev/ofw/openfirm.c b/sys/dev/ofw/openfirm.c index f9c73122b454..22e8d470e6c9 100644 --- a/sys/dev/ofw/openfirm.c +++ b/sys/dev/ofw/openfirm.c @@ -187,6 +187,15 @@ xrefinfo_add(phandle_t node, phandle_t xref, device_t dev) return (xi); } +static void +xrefinfo_remove(struct xrefinfo *xi) +{ + + mtx_lock(&xreflist_lock); + SLIST_REMOVE(&xreflist, xi, xrefinfo, next_entry); + mtx_unlock(&xreflist_lock); +} + /* * OFW install routines. Highest priority wins, equal priority also * overrides allowing last-set to win. @@ -704,6 +713,16 @@ OF_device_register_xref(phandle_t xref, device_t dev) panic("Attempt to register device before xreflist_init"); } +void +OF_device_unregister_xref(phandle_t xref, device_t dev) +{ + struct xrefinfo *xi; + + if ((xi = xrefinfo_find(xref, FIND_BY_XREF)) == NULL) + return; + xrefinfo_remove(xi); +} + /* Call the method in the scope of a given instance. */ int OF_call_method(const char *method, ihandle_t instance, int nargs, int nreturns, diff --git a/sys/dev/ofw/openfirm.h b/sys/dev/ofw/openfirm.h index 30203404a6b0..4e2b035827cb 100644 --- a/sys/dev/ofw/openfirm.h +++ b/sys/dev/ofw/openfirm.h @@ -149,6 +149,7 @@ phandle_t OF_xref_from_node(phandle_t node); device_t OF_device_from_xref(phandle_t xref); phandle_t OF_xref_from_device(device_t dev); int OF_device_register_xref(phandle_t xref, device_t dev); +void OF_device_unregister_xref(phandle_t xref, device_t dev); /* Device I/O functions */ ihandle_t OF_open(const char *path);