Thread (32 messages) 32 messages, 6 authors, 2022-07-19

Re: [PATCH v6 09/21] arch_topology: Add support to parse and detect cache attributes

From: Conor Dooley <hidden>
Date: 2022-07-19 14:41:26
Also in: linux-riscv, lkml

On 19/07/2022 15:22, Geert Uytterhoeven wrote:
Hi Sudeep,
Hey Geert,

  
On Mon, Jul 4, 2022 at 12:19 PM Sudeep Holla [off-list ref] wrote:
quoted
Currently ACPI populates just the minimum information about the last
level cache from PPTT in order to feed the same to build sched_domains.
Similar support for DT platforms is not present.

In order to enable the same, the entire cache hierarchy information can
be built as part of CPU topoplogy parsing both on ACPI and DT platforms.

Note that this change builds the cacheinfo early even on ACPI systems,
but the current mechanism of building llc_sibling mask remains unchanged.

Tested-by: Ionela Voinescu <redacted>
Reviewed-by: Gavin Shan <redacted>
Signed-off-by: Sudeep Holla <redacted>
Thanks for your patch!
quoted
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -7,6 +7,7 @@
   */

  #include <linux/acpi.h>
+#include <linux/cacheinfo.h>
  #include <linux/cpu.h>
  #include <linux/cpufreq.h>
  #include <linux/device.h>
@@ -780,15 +781,28 @@ __weak int __init parse_acpi_topology(void)
  #if defined(CONFIG_ARM64) || defined(CONFIG_RISCV)
  void __init init_cpu_topology(void)
  {
+       int ret, cpu;
+
         reset_cpu_topology();
+       ret = parse_acpi_topology();
+       if (!ret)
+               ret = of_have_populated_dt() && parse_dt_topology();

-       /*
-        * Discard anything that was parsed if we hit an error so we
-        * don't use partial information.
-        */
-       if (parse_acpi_topology())
-               reset_cpu_topology();
-       else if (of_have_populated_dt() && parse_dt_topology())
+       if (ret) {
+               /*
+                * Discard anything that was parsed if we hit an error so we
+                * don't use partial information.
+                */
                 reset_cpu_topology();
+               return;
+       }
+
+       for_each_possible_cpu(cpu) {
+               ret = detect_cache_attributes(cpu);
+               if (ret) {
+                       pr_info("Early cacheinfo failed, ret = %d\n", ret);
This is triggered

     Early cacheinfo failed, ret = -12

on all my RV64 platforms (K210, PolarFire, StarLight).
This should be fixed by Sudeeps most recent patchset, at least
it was when I tested it!
https://lore.kernel.org/all/20220713133344.1201247-1-sudeep.holla@arm.com/ (local)
-12 = -ENOMEM.

The boot continues regardless, and the K210 even has enough spare
RAM after boot to run "ls", unlike two weeks ago ;-)
quoted
+                       break;
+               }
+       }
  }
Gr{oetje,eeting}s,

                         Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                 -- Linus Torvalds

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help