mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jeremy Linton <jeremy.linton@arm.com>
To: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Hanjun Guo <hanjun.guo@linaro.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux PM <linux-pm@vger.kernel.org>,
	jhugo@codeaurora.org, wangxiongfeng2@huawei.com,
	Jonathan.Zhang@cavium.com, Al Stone <ahs3@redhat.com>,
	Jayachandran.Nair@cavium.com, austinwc@codeaurora.org,
	Len Brown <lenb@kernel.org>
Subject: Re: [PATCH v5 4/9] drivers: base cacheinfo: Add support for ACPI based firmware tables
Date: Tue, 12 Dec 2017 16:55:01 -0600	[thread overview]
Message-ID: <9bb1c58a-8d48-9952-e292-60b2bcb87a51@arm.com> (raw)
In-Reply-To: <CAJZ5v0hHdfE3khVvuqQm5JFMgY5R054c8UB9Nixii9ucq0Ecnw@mail.gmail.com>

Hi,

On 12/12/2017 11:25 AM, Rafael J. Wysocki wrote:
> On Tue, Dec 12, 2017 at 6:03 PM, Jeremy Linton <jeremy.linton@arm.com> wrote:
>> Hi,
>>
>>
>> On 12/11/2017 07:11 PM, Rafael J. Wysocki wrote:
>>>
>>> On Friday, December 1, 2017 11:23:25 PM CET Jeremy Linton wrote:
>>>>
>>>> Add a entry to to struct cacheinfo to maintain a reference to the PPTT
>>>> node which can be used to match identical caches across cores. Also
>>>> stub out cache_setup_acpi() so that individual architectures can
>>>> enable ACPI topology parsing.
>>>>
>>>> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
>>>> ---
>>>>    drivers/acpi/pptt.c       |  1 +
>>>>    drivers/base/cacheinfo.c  | 20 ++++++++++++++------
>>>>    include/linux/cacheinfo.h | 13 ++++++++++++-
>>>>    3 files changed, 27 insertions(+), 7 deletions(-)
>>>>
>>>> diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c
>>>> index 0f8a1631af33..a35e457cefb7 100644
>>>> --- a/drivers/acpi/pptt.c
>>>> +++ b/drivers/acpi/pptt.c
>>>> @@ -329,6 +329,7 @@ static void update_cache_properties(struct cacheinfo
>>>> *this_leaf,
>>>>    {
>>>>          int valid_flags = 0;
>>>>    +     this_leaf->firmware_node = cpu_node;
>>>>          if (found_cache->flags & ACPI_PPTT_SIZE_PROPERTY_VALID) {
>>>>                  this_leaf->size = found_cache->size;
>>>>                  valid_flags++;
>>>> diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c
>>>> index eb3af2739537..ba89f9310e6f 100644
>>>> --- a/drivers/base/cacheinfo.c
>>>> +++ b/drivers/base/cacheinfo.c
>>>> @@ -86,7 +86,10 @@ static int cache_setup_of_node(unsigned int cpu)
>>>>    static inline bool cache_leaves_are_shared(struct cacheinfo *this_leaf,
>>>>                                             struct cacheinfo *sib_leaf)
>>>>    {
>>>> -       return sib_leaf->of_node == this_leaf->of_node;
>>>> +       if (acpi_disabled)
>>>> +               return sib_leaf->of_node == this_leaf->of_node;
>>>> +       else
>>>> +               return sib_leaf->firmware_node ==
>>>> this_leaf->firmware_node;
>>>>    }
>>>>      /* OF properties to query for a given cache type */
>>>> @@ -215,6 +218,11 @@ static inline bool cache_leaves_are_shared(struct
>>>> cacheinfo *this_leaf,
>>>>    }
>>>>    #endif
>>>>    +int __weak cache_setup_acpi(unsigned int cpu)
>>>> +{
>>>> +       return -ENOTSUPP;
>>>> +}
>>>> +
>>>>    static int cache_shared_cpu_map_setup(unsigned int cpu)
>>>>    {
>>>>          struct cpu_cacheinfo *this_cpu_ci = get_cpu_cacheinfo(cpu);
>>>> @@ -225,11 +233,11 @@ static int cache_shared_cpu_map_setup(unsigned int
>>>> cpu)
>>>>          if (this_cpu_ci->cpu_map_populated)
>>>>                  return 0;
>>>>    -     if (of_have_populated_dt())
>>>> +       if (!acpi_disabled)
>>>> +               ret = cache_setup_acpi(cpu);
>>>> +       else if (of_have_populated_dt())
>>>>                  ret = cache_setup_of_node(cpu);
>>>> -       else if (!acpi_disabled)
>>>> -               /* No cache property/hierarchy support yet in ACPI */
>>>> -               ret = -ENOTSUPP;
>>>> +
>>>>          if (ret)
>>>>                  return ret;
>>>>    @@ -286,7 +294,7 @@ static void cache_shared_cpu_map_remove(unsigned
>>>> int cpu)
>>>>      static void cache_override_properties(unsigned int cpu)
>>>>    {
>>>> -       if (of_have_populated_dt())
>>>> +       if (acpi_disabled && of_have_populated_dt())
>>>>                  return cache_of_override_properties(cpu);
>>>>    }
>>>>    diff --git a/include/linux/cacheinfo.h b/include/linux/cacheinfo.h
>>>> index 3d9805297cda..7ebff157ae6c 100644
>>>> --- a/include/linux/cacheinfo.h
>>>> +++ b/include/linux/cacheinfo.h
>>>> @@ -37,6 +37,8 @@ enum cache_type {
>>>>     * @of_node: if devicetree is used, this represents either the cpu node
>>>> in
>>>>     *    case there's no explicit cache node or the cache node itself in
>>>> the
>>>>     *    device tree
>>>> + * @firmware_node: When not using DT, this may contain pointers to other
>>>> + *     firmware based values. Particularly ACPI/PPTT unique values.
>>>>     * @disable_sysfs: indicates whether this node is visible to the user
>>>> via
>>>>     *    sysfs or not
>>>>     * @priv: pointer to any private data structure specific to particular
>>>> @@ -65,8 +67,8 @@ struct cacheinfo {
>>>>    #define CACHE_ALLOCATE_POLICY_MASK    \
>>>>          (CACHE_READ_ALLOCATE | CACHE_WRITE_ALLOCATE)
>>>>    #define CACHE_ID              BIT(4)
>>>> -
>>>>          struct device_node *of_node;
>>>> +       void *firmware_node;
>>>
>>>
>>> What about converting this to using struct fwnode instead of adding
>>> fields to it?
>>
>>
>> I didn't really want to add another field here, but I've also pointed out
>> how I thought converting it to a fwnode wasn't a good choice.
>>
>> https://lkml.org/lkml/2017/11/20/502
>>
>> Mostly because IMHO its even more misleading (lacking any fwnode_operations)
>> than misusing the of_node as a void *.
> 
> I'm not sure what you mean.

Converting the DT drivers/cacheinfo.c code to use a fwnode_handle is 
straightforward. But IMHO it doesn't solve the readability problem of 
either casting the ACPI/PPTT token directly to the resulting 
fwnode_handle *, or alternatively an actual fwnode_handle with bogus 
fwnode_operations to wrap that token.


> 
> Anyway, the idea is to have one pointer in there instead of two that
> cannot be used at the same time and there's no reason why of_node
> should be special.

	Avoid two pointers for size, or readability? Because the last version 
had a union with of_node, which isn't strictly necessary as I can just 
cast the pptt token to of_node. There is exactly one line of code after 
that which uses the token and it doesn't care about type.

(in cache_leaves_are_shared())

> 
> of_node should just be one of multiple choices.
> 
>> Given that I'm in the minority thinking this, how far down the fwnode path
>> on the ACPI side do we want to go?
> 
> I have no idea. :-)
> 
>> Is simply treating it as a void pointer
>> sufficient for the ACPI side, considering all the PPTT code needs is a
>> unique token?
> 
> I guess you can think about it as of_node under a different name, but
> whether or not this is sufficient depends on what you need it for.

> 
> Thanks,
> Rafael
> 

  reply	other threads:[~2017-12-12 22:55 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-01 22:23 [PATCH v5 0/9] Support PPTT for ARM64 Jeremy Linton
2017-12-01 22:23 ` [PATCH v5 1/9] arm64/acpi: Create arch specific cpu to acpi id helper Jeremy Linton
2017-12-01 22:23 ` [PATCH v5 2/9] ACPI/PPTT: Add Processor Properties Topology Table parsing Jeremy Linton
2017-12-12  1:10   ` Rafael J. Wysocki
2017-12-01 22:23 ` [PATCH v5 3/9] ACPI: Enable PPTT support on ARM64 Jeremy Linton
2017-12-13 17:26   ` Lorenzo Pieralisi
2018-01-05 21:58     ` Jeremy Linton
2018-01-05 22:07       ` Rafael J. Wysocki
2017-12-01 22:23 ` [PATCH v5 4/9] drivers: base cacheinfo: Add support for ACPI based firmware tables Jeremy Linton
2017-12-12  1:11   ` Rafael J. Wysocki
2017-12-12 17:03     ` Jeremy Linton
2017-12-12 17:25       ` Rafael J. Wysocki
2017-12-12 22:55         ` Jeremy Linton [this message]
2017-12-12 23:02           ` Rafael J. Wysocki
2017-12-12 23:37             ` Jeremy Linton
2017-12-12 23:41               ` Rafael J. Wysocki
2018-01-03 14:21               ` Sudeep Holla
2018-01-04 11:46                 ` Sudeep Holla
2017-12-01 22:23 ` [PATCH v5 5/9] arm64: " Jeremy Linton
2017-12-01 22:23 ` [PATCH v5 6/9] ACPI/PPTT: Add topology parsing code Jeremy Linton
2017-12-12  1:12   ` Rafael J. Wysocki
2017-12-12 16:13     ` Jeremy Linton
2017-12-13 17:38       ` Lorenzo Pieralisi
2017-12-13 22:28         ` Rafael J. Wysocki
2017-12-13 23:06           ` Jeremy Linton
2017-12-13 23:09             ` Rafael J. Wysocki
2018-01-03  8:49               ` vkilari
2018-01-03 16:57                 ` Jeremy Linton
2018-01-04  6:48                   ` vkilari
2018-01-04 17:50                     ` Jeremy Linton
2017-12-01 22:23 ` [PATCH v5 7/9] arm64: Topology, rename cluster_id Jeremy Linton
2017-12-13 18:02   ` Lorenzo Pieralisi
2017-12-15 16:36     ` Jeremy Linton
2017-12-18 12:42       ` Morten Rasmussen
2017-12-18 15:47         ` Lorenzo Pieralisi
2017-12-19  9:38           ` Morten Rasmussen
2018-01-02  2:29         ` Xiongfeng Wang
2018-01-02 11:30           ` Morten Rasmussen
2018-01-03 14:29           ` Sudeep Holla
2018-01-03 17:32             ` Jeremy Linton
2018-01-03 17:43               ` Sudeep Holla
2018-01-04  3:59               ` Xiongfeng Wang
2018-01-04 18:00                 ` Jeremy Linton
2018-01-04  4:14               ` Xiongfeng Wang
2017-12-01 22:23 ` [PATCH v5 8/9] arm64: topology: Enable ACPI/PPTT based CPU topology Jeremy Linton
2017-12-13 18:22   ` Lorenzo Pieralisi
2017-12-15 17:42     ` Jeremy Linton
2017-12-01 22:23 ` [PATCH v5 9/9] ACPI: Add PPTT to injectable table list Jeremy Linton

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=9bb1c58a-8d48-9952-e292-60b2bcb87a51@arm.com \
    --to=jeremy.linton@arm.com \
    --cc=Jayachandran.Nair@cavium.com \
    --cc=Jonathan.Zhang@cavium.com \
    --cc=ahs3@redhat.com \
    --cc=austinwc@codeaurora.org \
    --cc=catalin.marinas@arm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hanjun.guo@linaro.org \
    --cc=jhugo@codeaurora.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=rafael@kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=sudeep.holla@arm.com \
    --cc=viresh.kumar@linaro.org \
    --cc=wangxiongfeng2@huawei.com \
    --cc=will.deacon@arm.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

Powered by JetHome