Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp37192pxb; Mon, 8 Feb 2021 14:27:29 -0800 (PST) X-Google-Smtp-Source: ABdhPJzWOS21w3UvrlqWxQ8VGfeNfzHThjTEEzrJ+zj3/Qm+sAllptuNMsMpm1FV61u8Nk4nsH/R X-Received: by 2002:a05:6402:268a:: with SMTP id w10mr19479999edd.331.1612823249002; Mon, 08 Feb 2021 14:27:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612823248; cv=none; d=google.com; s=arc-20160816; b=aDUVQRI3cV1+no07vaakSoIQHudppMUqFH7VyENwDvQx4GF8q7GqCAhtg+/0c/o/5N 1zCL8yX6PuubR5q5AmldPkLdDxeR3qAg9WMZSQYquv0EgiNPMqrRbyeqxgSdMse+UrIa VOm2IwmKE6K0Jnl+zxk0+cVe9RVf/aQHuU5Z5bPfT7x7wk7M3V9gwkw1vNxh7U/3f/Ll z/cjaNvOt6V2r8OjiOdJ4g2GY6Basi92QG4dMqBtFhf16WSdfle2KBtSmNRVK1zfyWPW QFzZY0utn6EVVOmFhj98w9hr6w0uTg+zmqTxYw+aJioPh3wOY6Bor5g/vbgkGZsKd2k1 941Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=vLRnoGxEN6mEa0qtlcgGpBhqz1knkaBZ5M0gAygIwQ0=; b=XUW5kWwCssEDvuR+2M0zubz2hygoclPNTkmJ//0vBmR2IWtg8TKn0I+BwjdepM1dfA d6nMWGtTs4/K9K8Q4+KpzQlsBR9YwZhVgJqxmguR5ThYO2PWvQ8sYsSl6/tODitbBkWE nXagbCgvm5gsO4X4XH/l3VDCxLySqciTWIS1rsxUgWrshBwSxwgHtdI00+ZX0FEFW1fO +JW+Ka8fEsk1eqPvCSBV81uSNHmxEmKlv1kzWFhRTBtEDPr8rvOVmX4fj+0kGML5sg8K kUMUWKLNZxvuhAhul4U6HS042NNtmESajdGnZoVaSP3hO400bvd8vxEd/Ay6qDWjSeoJ VYcw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g10si2493235ejw.681.2021.02.08.14.26.52; Mon, 08 Feb 2021 14:27:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231628AbhBHWZZ (ORCPT + 99 others); Mon, 8 Feb 2021 17:25:25 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:53483 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229760AbhBHWYt (ORCPT ); Mon, 8 Feb 2021 17:24:49 -0500 Received: from orion.localdomain ([95.115.15.83]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MmD2M-1lZSw122Zk-00iCcL; Mon, 08 Feb 2021 23:22:13 +0100 From: "Enrico Weigelt, metux IT consult" To: linux-kernel@vger.kernel.org Cc: rafael@kernel.org, info@metux.net, linus.walleij@linaro.org, bgolaszewski@baylibre.com, robh+dt@kernel.org, frowand.list@gmail.com, pantelis.antoniou@konsulko.com, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org Subject: [RFC PATCH 03/12] of: base: record root node in interator and use it for phandle lookup Date: Mon, 8 Feb 2021 23:21:54 +0100 Message-Id: <20210208222203.22335-4-info@metux.net> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20210208222203.22335-1-info@metux.net> References: <20210208222203.22335-1-info@metux.net> X-Provags-ID: V03:K1:L07WfYEKaUHFQXWge6SNQV7uWaSzApb9DBlUnN7eDKenKnVc9cR wReeAdO0XeeuDjURl89qC/QDWRLaPENdF+n1sDQVpo59lDEM1dNCE5i9CVo/W9irbkivn3M U9JZI099qVXl3Nji6F8vE0xyLS9fRj77i6N+b5JmiLhvG2PReQUZYeF6B2j8IxDWHe0+SeW EVCW878DP7MXUa/3HgaSA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:3sXEFVMRuSo=:oizTkM24xt/Gez0Dn9xwqo 7zUxaRlqh3OeBp8Jjdj06fXRypKJp9Z2gz3RDogbgfNUe6A66ucDw5DD458kDsbKX3eEiZrnf MgAPqiDuLpgytc9GXNdlf1QMaVGRJ+FqSf1ev+EBU9/W3VYqdgkdC28D7FHt7dKrvmJKS0Qgm T256AyPwTPxAGRk3yhsglxBZ6Po/XBpMvC3gEPcqmH0k8trAHOOkCXzeXTuxx5shLtdd2VvA1 v29px/uzWeqPZkKqS/id45qb0JzSWHekMjNBPSHYOTolmwCmzPO/hs6S7dnur5leVDB3ESNDY 5eZT47aNvvvjTkOLhTwXkrAT4S/rbWD6zTfr95T1koqx1oQ7sEXWUREX6RgKYC7B3xhcKFvrR +C8GmSmufHgHJJXV6pWMSjCPmBj47UZVS2cGTKSDWkf6uvCtu45wDs4aAmbdS Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For detached oftree support, find the root node and record it, on iterator creation. If we find the root of the global oftree, record NULL, in order to have a clear distinction between detached and non-detached cases. The recorded root node is then used for resolving phandles. Note that in the detached case, phandle cache can't be used, so we have a little performance penalty on repeated phandle lookups. Signed-off-by: Enrico Weigelt, metux IT consult --- drivers/of/base.c | 13 ++++++++++++- include/linux/of.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 6b3d1e817808..e5ef611ed233 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1249,6 +1249,7 @@ int of_phandle_iterator_init(struct of_phandle_iterator *it, { const __be32 *list; int size; + struct device_node *walk; memset(it, 0, sizeof(*it)); @@ -1270,6 +1271,16 @@ int of_phandle_iterator_init(struct of_phandle_iterator *it, it->phandle_end = list; it->cur = list; + /* + * find the root of our tree and record it, if we're dealing with an + * detached oftree - in non-detached case, we record NULL, for clear + * distinction between these two cases. + */ + for (walk=(struct device_node*)np; + walk->parent; + walk=(struct device_node*)walk->parent); + it->root = ((walk == of_root) ? NULL : walk); + return 0; } EXPORT_SYMBOL_GPL(of_phandle_iterator_init); @@ -1297,7 +1308,7 @@ int of_phandle_iterator_next(struct of_phandle_iterator *it) * Find the provider node and parse the #*-cells property to * determine the argument length. */ - it->node = of_find_node_by_phandle(it->phandle); + it->node = of_find_node_by_phandle_from(it->root, it->phandle); if (it->cells_name) { if (!it->node) { diff --git a/include/linux/of.h b/include/linux/of.h index c285141653e5..dbf2c7442389 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -82,6 +82,7 @@ struct of_phandle_iterator { const char *cells_name; int cell_count; const struct device_node *parent; + struct device_node *root; /* List size information */ const __be32 *list_end; -- 2.11.0