From: Rob Herring <robh@kernel.org>
To: Dawei Li <dawei.li@shingroup.cn>
Cc: frowand.list@gmail.com, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, set_pte_at@outlook.com
Subject: Re: [PATCH 1/2] of: Introduce __of_phandle_update_cache
Date: Wed, 31 Jan 2024 15:29:38 -0600 [thread overview]
Message-ID: <20240131212938.GB2303754-robh@kernel.org> (raw)
In-Reply-To: <20240130105236.3097126-2-dawei.li@shingroup.cn>
On Tue, Jan 30, 2024 at 06:52:35PM +0800, Dawei Li wrote:
> For system with CONFIG_OF_DYNAMIC=y, device nodes can be inserted/removed
> dynamically from device tree. Meanwhile phandle_cache is created for fast
> lookup from phandle to device node.
Why do we need it to be fast? What's the usecase (upstream dynamic DT
usecases are limited) and what's the performance difference? We'll
already cache the new phandle on the first lookup. Plus with only 128
entries you are likely evicting an entry.
> For node detach, phandle cache of removed node is invalidated to maintain
> the mapping up to date, but the counterpart operation on node attach is
> not implemented yet.
>
> Thus, implement the cache updating operation on node attach.
Except this patch does not do that. The next patch does.
>
> Signed-off-by: Dawei Li <dawei.li@shingroup.cn>
> ---
> drivers/of/base.c | 16 ++++++++++++++++
> drivers/of/of_private.h | 1 +
> 2 files changed, 17 insertions(+)
>
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index b0ad8fc06e80..8b7da27835eb 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -163,6 +163,22 @@ void __of_phandle_cache_inv_entry(phandle handle)
> phandle_cache[handle_hash] = NULL;
> }
>
> +void __of_phandle_update_cache(struct device_node *np, bool lock)
> +{
> + u32 hash;
> +
> + if (lock)
> + lockdep_assert_held(&devtree_lock);
I don't think this is a good use of a function parameter.
> +
> + if (unlikely(!np || !np->phandle))
> + return;
> +
> + hash = of_phandle_cache_hash(np->phandle);
> +
> + if (!phandle_cache[hash])
> + phandle_cache[hash] = np;
Okay, so you don't evict existing entries. I'm not sure what makes more
sense. I would imagine old entries are less likely to be accessed than
new phandles for just added nodes given DT is kind of parse it all once
(e.g. at boot time). Again, need to understand your usecase and
performance differences.
Rob
next prev parent reply other threads:[~2024-01-31 21:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-30 10:52 [PATCH 0/2] Update phandle cache on device node attach Dawei Li
2024-01-30 10:52 ` [PATCH 1/2] of: Introduce __of_phandle_update_cache Dawei Li
2024-01-31 21:29 ` Rob Herring [this message]
2024-02-01 10:00 ` Dawei Li
2024-02-01 21:09 ` Rob Herring
2024-01-30 10:52 ` [PATCH 2/2] of: Implment cache update operation on device node attach Dawei Li
2024-01-31 21:12 ` Rob Herring
2024-02-01 10:03 ` Dawei Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240131212938.GB2303754-robh@kernel.org \
--to=robh@kernel.org \
--cc=dawei.li@shingroup.cn \
--cc=devicetree@vger.kernel.org \
--cc=frowand.list@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=set_pte_at@outlook.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).