* [PATCH v2 0/2] PPTT handle Handle architecturally unknown cache types
@ 2018-09-14 16:28 Jeffrey Hugo
2018-09-14 16:28 ` [PATCH v2 1/2] drivers: base: cacheinfo: Do not populate sysfs for " Jeffrey Hugo
2018-09-14 16:28 ` [PATCH v2 2/2] ACPI/PPTT: Handle architecturally " Jeffrey Hugo
0 siblings, 2 replies; 7+ messages in thread
From: Jeffrey Hugo @ 2018-09-14 16:28 UTC (permalink / raw)
To: sudeep.holla, gregkh, rjw, linux-acpi, jeremy.linton
Cc: linux-kernel, vkilari, Jeffrey Hugo
The ARM Architecture Reference Manual allows for caches to be "invisible" and
thus not specified in the system registers under some scenarios such as if the
cache cannot be managed by set/way operations.
However, such caches may be specified in the ACPI PPTT table for workload
performance/scheduling optimizations.
Currently such caches can cause an error in lscpu -
lscpu: cannot open /sys/devices/system/cpu/cpu0/cache/index3/type: No such
file or directory
and result in no output, providing a poor user experience. lstopo is also
affected as such caches are not included in the output.
Address these issues by attempting to be a little more discerning about when
cache information is provided to userspace, and also utilize all sources for
cache information when possible.
[v2]
-Updated cacheinfo per Sudeep's suggestion
-Integrated the PPTT fix into existing PPTT code per Sudeep's suggestion
Jeffrey Hugo (2):
drivers: base: cacheinfo: Do not populate sysfs for unknown cache
types
ACPI/PPTT: Handle architecturally unknown cache types
drivers/acpi/pptt.c | 15 +++++++++++----
drivers/base/cacheinfo.c | 2 ++
2 files changed, 13 insertions(+), 4 deletions(-)
--
Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v2 1/2] drivers: base: cacheinfo: Do not populate sysfs for unknown cache types 2018-09-14 16:28 [PATCH v2 0/2] PPTT handle Handle architecturally unknown cache types Jeffrey Hugo @ 2018-09-14 16:28 ` Jeffrey Hugo 2018-09-14 17:14 ` Jeremy Linton 2018-09-14 16:28 ` [PATCH v2 2/2] ACPI/PPTT: Handle architecturally " Jeffrey Hugo 1 sibling, 1 reply; 7+ messages in thread From: Jeffrey Hugo @ 2018-09-14 16:28 UTC (permalink / raw) To: sudeep.holla, gregkh, rjw, linux-acpi, jeremy.linton Cc: linux-kernel, vkilari, Jeffrey Hugo If a cache has an unknown type because neither the hardware nor the firmware told us, an entry in the sysfs tree will be made, but the type file will not be present. lscpu depends on the type file being present for every entry, and will error out without printing system information if lscpu cannot open the type file. Presenting information about a cache without indicating its type is not useful, therefore if we hit a cache with an unknown type, stop populating sysfs so that userspace has the maximum amount of useful information. This addresses the following lscpu error, which prevents any output. lscpu: cannot open /sys/devices/system/cpu/cpu0/cache/index3/type: No such file or directory Suggested-by: Sudeep Holla <sudeep.holla@arm.com> Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org> --- drivers/base/cacheinfo.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c index 5d5b598..cf78fa6 100644 --- a/drivers/base/cacheinfo.c +++ b/drivers/base/cacheinfo.c @@ -615,6 +615,8 @@ static int cache_add_dev(unsigned int cpu) this_leaf = this_cpu_ci->info_list + i; if (this_leaf->disable_sysfs) continue; + if (this_leaf->type == CACHE_TYPE_NOCACHE) + break; cache_groups = cache_get_attribute_groups(this_leaf); ci_dev = cpu_device_create(parent, this_leaf, cache_groups, "index%1u", i); -- Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] drivers: base: cacheinfo: Do not populate sysfs for unknown cache types 2018-09-14 16:28 ` [PATCH v2 1/2] drivers: base: cacheinfo: Do not populate sysfs for " Jeffrey Hugo @ 2018-09-14 17:14 ` Jeremy Linton 0 siblings, 0 replies; 7+ messages in thread From: Jeremy Linton @ 2018-09-14 17:14 UTC (permalink / raw) To: Jeffrey Hugo, sudeep.holla, gregkh, rjw, linux-acpi; +Cc: linux-kernel, vkilari Hi, On 09/14/2018 11:28 AM, Jeffrey Hugo wrote: > If a cache has an unknown type because neither the hardware nor the > firmware told us, an entry in the sysfs tree will be made, but the type > file will not be present. lscpu depends on the type file being present > for every entry, and will error out without printing system information > if lscpu cannot open the type file. > > Presenting information about a cache without indicating its type is not > useful, therefore if we hit a cache with an unknown type, stop populating > sysfs so that userspace has the maximum amount of useful information. > > This addresses the following lscpu error, which prevents any output. > lscpu: cannot open /sys/devices/system/cpu/cpu0/cache/index3/type: No such > file or directory > > Suggested-by: Sudeep Holla <sudeep.holla@arm.com> > Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org> > --- > drivers/base/cacheinfo.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c > index 5d5b598..cf78fa6 100644 > --- a/drivers/base/cacheinfo.c > +++ b/drivers/base/cacheinfo.c > @@ -615,6 +615,8 @@ static int cache_add_dev(unsigned int cpu) > this_leaf = this_cpu_ci->info_list + i; > if (this_leaf->disable_sysfs) > continue; > + if (this_leaf->type == CACHE_TYPE_NOCACHE) > + break; > cache_groups = cache_get_attribute_groups(this_leaf); > ci_dev = cpu_device_create(parent, this_leaf, cache_groups, > "index%1u", i); > Looks fine to me: Reviewed-by: Jeremy Linton <jeremy.linton@arm.com> Thanks, ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 2/2] ACPI/PPTT: Handle architecturally unknown cache types 2018-09-14 16:28 [PATCH v2 0/2] PPTT handle Handle architecturally unknown cache types Jeffrey Hugo 2018-09-14 16:28 ` [PATCH v2 1/2] drivers: base: cacheinfo: Do not populate sysfs for " Jeffrey Hugo @ 2018-09-14 16:28 ` Jeffrey Hugo 2018-09-17 16:17 ` Sudeep Holla 1 sibling, 1 reply; 7+ messages in thread From: Jeffrey Hugo @ 2018-09-14 16:28 UTC (permalink / raw) To: sudeep.holla, gregkh, rjw, linux-acpi, jeremy.linton Cc: linux-kernel, vkilari, Jeffrey Hugo The type of a cache might not be specified by architectural mechanisms (ie system registers), but its type might be specified in the PPTT. In this case, we should populate the type of the cache, rather than leave it undefined. This fixes the issue where the cacheinfo driver will not populate sysfs for such caches, resulting in the information missing from utilities like lstopo and lscpu, thus degrading the user experience. Fixes: 2bd00bcd73e5 (ACPI/PPTT: Add Processor Properties Topology Table parsing) Reported-by: Vijaya Kumar K <vkilari@codeaurora.org> Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org> --- drivers/acpi/pptt.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c index d1e26cb..bb00ed9 100644 --- a/drivers/acpi/pptt.c +++ b/drivers/acpi/pptt.c @@ -402,11 +402,18 @@ static void update_cache_properties(struct cacheinfo *this_leaf, } } /* - * If the above flags are valid, and the cache type is NOCACHE - * update the cache type as well. + * If cache type is NOCACHE, then the cache hasn't been specified + * via other mechanisms. Update the type if either the cache has + * been fully specified in PPTT, or a cache type has been provided. + * + * Note, we assume such caches are unified based on conventional system + * design and known examples. Significant work is required elsewhere to + * fully support data/instruction only type caches which are only + * specified in PPTT. */ - if (this_leaf->type == CACHE_TYPE_NOCACHE && - valid_flags == PPTT_CHECKED_ATTRIBUTES) + if ((this_leaf->type == CACHE_TYPE_NOCACHE) && + (valid_flags == PPTT_CHECKED_ATTRIBUTES || + found_cache->flags & ACPI_PPTT_CACHE_TYPE_VALID)) this_leaf->type = CACHE_TYPE_UNIFIED; } -- Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] ACPI/PPTT: Handle architecturally unknown cache types 2018-09-14 16:28 ` [PATCH v2 2/2] ACPI/PPTT: Handle architecturally " Jeffrey Hugo @ 2018-09-17 16:17 ` Sudeep Holla 2018-09-17 22:46 ` Jeffrey Hugo 0 siblings, 1 reply; 7+ messages in thread From: Sudeep Holla @ 2018-09-17 16:17 UTC (permalink / raw) To: Jeffrey Hugo, gregkh, rjw, linux-acpi, jeremy.linton Cc: Sudeep Holla, linux-kernel, vkilari On 14/09/18 17:28, Jeffrey Hugo wrote: > The type of a cache might not be specified by architectural mechanisms (ie > system registers), but its type might be specified in the PPTT. In this > case, we should populate the type of the cache, rather than leave it > undefined. > > This fixes the issue where the cacheinfo driver will not populate sysfs > for such caches, resulting in the information missing from utilities like > lstopo and lscpu, thus degrading the user experience. > > Fixes: 2bd00bcd73e5 (ACPI/PPTT: Add Processor Properties Topology Table parsing) > Reported-by: Vijaya Kumar K <vkilari@codeaurora.org> > Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org> > --- > drivers/acpi/pptt.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c > index d1e26cb..bb00ed9 100644 > --- a/drivers/acpi/pptt.c > +++ b/drivers/acpi/pptt.c > @@ -402,11 +402,18 @@ static void update_cache_properties(struct cacheinfo *this_leaf, > } > } > /* > - * If the above flags are valid, and the cache type is NOCACHE > - * update the cache type as well. > + * If cache type is NOCACHE, then the cache hasn't been specified > + * via other mechanisms. Update the type if either the cache has > + * been fully specified in PPTT, or a cache type has been provided. > + * > + * Note, we assume such caches are unified based on conventional system > + * design and known examples. Significant work is required elsewhere to > + * fully support data/instruction only type caches which are only > + * specified in PPTT. > */ > - if (this_leaf->type == CACHE_TYPE_NOCACHE && > - valid_flags == PPTT_CHECKED_ATTRIBUTES) > + if ((this_leaf->type == CACHE_TYPE_NOCACHE) && > + (valid_flags == PPTT_CHECKED_ATTRIBUTES || > + found_cache->flags & ACPI_PPTT_CACHE_TYPE_VALID)) > this_leaf->type = CACHE_TYPE_UNIFIED; I thought I did mention that we can drop the valid_flags altogether unless Jeremy has reasons not to. -- Regards, Sudeep ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] ACPI/PPTT: Handle architecturally unknown cache types 2018-09-17 16:17 ` Sudeep Holla @ 2018-09-17 22:46 ` Jeffrey Hugo 2018-09-17 22:59 ` Jeremy Linton 0 siblings, 1 reply; 7+ messages in thread From: Jeffrey Hugo @ 2018-09-17 22:46 UTC (permalink / raw) To: Sudeep Holla, gregkh, rjw, linux-acpi, jeremy.linton Cc: linux-kernel, vkilari On 9/17/2018 10:17 AM, Sudeep Holla wrote: > > > On 14/09/18 17:28, Jeffrey Hugo wrote: >> The type of a cache might not be specified by architectural mechanisms (ie >> system registers), but its type might be specified in the PPTT. In this >> case, we should populate the type of the cache, rather than leave it >> undefined. >> >> This fixes the issue where the cacheinfo driver will not populate sysfs >> for such caches, resulting in the information missing from utilities like >> lstopo and lscpu, thus degrading the user experience. >> >> Fixes: 2bd00bcd73e5 (ACPI/PPTT: Add Processor Properties Topology Table parsing) >> Reported-by: Vijaya Kumar K <vkilari@codeaurora.org> >> Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org> >> --- >> drivers/acpi/pptt.c | 15 +++++++++++---- >> 1 file changed, 11 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c >> index d1e26cb..bb00ed9 100644 >> --- a/drivers/acpi/pptt.c >> +++ b/drivers/acpi/pptt.c >> @@ -402,11 +402,18 @@ static void update_cache_properties(struct cacheinfo *this_leaf, >> } >> } >> /* >> - * If the above flags are valid, and the cache type is NOCACHE >> - * update the cache type as well. >> + * If cache type is NOCACHE, then the cache hasn't been specified >> + * via other mechanisms. Update the type if either the cache has >> + * been fully specified in PPTT, or a cache type has been provided. >> + * >> + * Note, we assume such caches are unified based on conventional system >> + * design and known examples. Significant work is required elsewhere to >> + * fully support data/instruction only type caches which are only >> + * specified in PPTT. >> */ >> - if (this_leaf->type == CACHE_TYPE_NOCACHE && >> - valid_flags == PPTT_CHECKED_ATTRIBUTES) >> + if ((this_leaf->type == CACHE_TYPE_NOCACHE) && >> + (valid_flags == PPTT_CHECKED_ATTRIBUTES || >> + found_cache->flags & ACPI_PPTT_CACHE_TYPE_VALID)) >> this_leaf->type = CACHE_TYPE_UNIFIED; > > I thought I did mention that we can drop the valid_flags altogether > unless Jeremy has reasons not to. > You suggested that perhaps that could be the case. It seemed like an open question to me. I'm at Linaro Connect without access to the device this week, so I guess someone has roughly a week to chime in that the valid flags should be kept, otherwise I'll try a v3 with them removed. -- Jeffrey Hugo Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] ACPI/PPTT: Handle architecturally unknown cache types 2018-09-17 22:46 ` Jeffrey Hugo @ 2018-09-17 22:59 ` Jeremy Linton 0 siblings, 0 replies; 7+ messages in thread From: Jeremy Linton @ 2018-09-17 22:59 UTC (permalink / raw) To: Jeffrey Hugo, Sudeep Holla, gregkh, rjw, linux-acpi; +Cc: linux-kernel, vkilari Hi, On 09/17/2018 05:46 PM, Jeffrey Hugo wrote: > On 9/17/2018 10:17 AM, Sudeep Holla wrote: >> >> >> On 14/09/18 17:28, Jeffrey Hugo wrote: >>> The type of a cache might not be specified by architectural >>> mechanisms (ie >>> system registers), but its type might be specified in the PPTT. In this >>> case, we should populate the type of the cache, rather than leave it >>> undefined. >>> >>> This fixes the issue where the cacheinfo driver will not populate sysfs >>> for such caches, resulting in the information missing from utilities >>> like >>> lstopo and lscpu, thus degrading the user experience. >>> >>> Fixes: 2bd00bcd73e5 (ACPI/PPTT: Add Processor Properties Topology >>> Table parsing) >>> Reported-by: Vijaya Kumar K <vkilari@codeaurora.org> >>> Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org> >>> --- >>> drivers/acpi/pptt.c | 15 +++++++++++---- >>> 1 file changed, 11 insertions(+), 4 deletions(-) >>> >>> diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c >>> index d1e26cb..bb00ed9 100644 >>> --- a/drivers/acpi/pptt.c >>> +++ b/drivers/acpi/pptt.c >>> @@ -402,11 +402,18 @@ static void update_cache_properties(struct >>> cacheinfo *this_leaf, >>> } >>> } >>> /* >>> - * If the above flags are valid, and the cache type is NOCACHE >>> - * update the cache type as well. >>> + * If cache type is NOCACHE, then the cache hasn't been specified >>> + * via other mechanisms. Update the type if either the cache has >>> + * been fully specified in PPTT, or a cache type has been provided. >>> + * >>> + * Note, we assume such caches are unified based on conventional >>> system >>> + * design and known examples. Significant work is required >>> elsewhere to >>> + * fully support data/instruction only type caches which are only >>> + * specified in PPTT. >>> */ >>> - if (this_leaf->type == CACHE_TYPE_NOCACHE && >>> - valid_flags == PPTT_CHECKED_ATTRIBUTES) >>> + if ((this_leaf->type == CACHE_TYPE_NOCACHE) && >>> + (valid_flags == PPTT_CHECKED_ATTRIBUTES || >>> + found_cache->flags & ACPI_PPTT_CACHE_TYPE_VALID)) >>> this_leaf->type = CACHE_TYPE_UNIFIED; >> >> I thought I did mention that we can drop the valid_flags altogether >> unless Jeremy has reasons not to. >> > > You suggested that perhaps that could be the case. It seemed like an > open question to me. I'm at Linaro Connect without access to the device > this week, so I guess someone has roughly a week to chime in that the > valid flags should be kept, otherwise I'll try a v3 with them removed. > The point of the valid_flags/CHECKED_ATTRIBUTE was to help assure that a minimum set of attributes were being provided by the firmware. If we are going to reset the CACHE_TYPE, then we might as well remove the valid_flag/CHECKED_ATTRIBUTE counts as it can be easily bypassed. So, yes please, remove the valid_flags with this change. Thanks, ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-09-17 22:59 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-09-14 16:28 [PATCH v2 0/2] PPTT handle Handle architecturally unknown cache types Jeffrey Hugo 2018-09-14 16:28 ` [PATCH v2 1/2] drivers: base: cacheinfo: Do not populate sysfs for " Jeffrey Hugo 2018-09-14 17:14 ` Jeremy Linton 2018-09-14 16:28 ` [PATCH v2 2/2] ACPI/PPTT: Handle architecturally " Jeffrey Hugo 2018-09-17 16:17 ` Sudeep Holla 2018-09-17 22:46 ` Jeffrey Hugo 2018-09-17 22:59 ` Jeremy Linton
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