tile: nohz: warn if nohz_full uses hypervisor shared cores
[platform/kernel/linux-starfive.git] / arch / tile / kernel / setup.c
index 864eea6..7833b2c 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/hugetlb.h>
 #include <linux/start_kernel.h>
 #include <linux/screen_info.h>
+#include <linux/tick.h>
 #include <asm/setup.h>
 #include <asm/sections.h>
 #include <asm/cacheflush.h>
@@ -215,12 +216,11 @@ early_param("mem", setup_mem);  /* compatibility with x86 */
 
 static int __init setup_isolnodes(char *str)
 {
-       char buf[MAX_NUMNODES * 5];
        if (str == NULL || nodelist_parse(str, isolnodes) != 0)
                return -EINVAL;
 
-       nodelist_scnprintf(buf, sizeof(buf), isolnodes);
-       pr_info("Set isolnodes value to '%s'\n", buf);
+       pr_info("Set isolnodes value to '%*pbl'\n",
+               nodemask_pr_args(&isolnodes));
        return 0;
 }
 early_param("isolnodes", setup_isolnodes);
@@ -1315,11 +1315,9 @@ early_param("disabled_cpus", disabled_cpus);
 
 void __init print_disabled_cpus(void)
 {
-       if (!cpumask_empty(&disabled_map)) {
-               char buf[100];
-               cpulist_scnprintf(buf, sizeof(buf), &disabled_map);
-               pr_info("CPUs not available for Linux: %s\n", buf);
-       }
+       if (!cpumask_empty(&disabled_map))
+               pr_info("CPUs not available for Linux: %*pbl\n",
+                       cpumask_pr_args(&disabled_map));
 }
 
 static void __init setup_cpu_maps(void)
@@ -1393,6 +1391,28 @@ static int __init dataplane(char *str)
 
 early_param("dataplane", dataplane);
 
+#ifdef CONFIG_NO_HZ_FULL
+/* Warn if hypervisor shared cpus are marked as nohz_full. */
+static int __init check_nohz_full_cpus(void)
+{
+       struct cpumask shared;
+       int cpu;
+
+       if (hv_inquire_tiles(HV_INQ_TILES_SHARED,
+                            (HV_VirtAddr) shared.bits, sizeof(shared)) < 0) {
+               pr_warn("WARNING: No support for inquiring hv shared tiles\n");
+               return 0;
+       }
+       for_each_cpu(cpu, &shared) {
+               if (tick_nohz_full_cpu(cpu))
+                       pr_warn("WARNING: nohz_full cpu %d receives hypervisor interrupts!\n",
+                              cpu);
+       }
+       return 0;
+}
+arch_initcall(check_nohz_full_cpus);
+#endif
+
 #ifdef CONFIG_CMDLINE_BOOL
 static char __initdata builtin_cmdline[COMMAND_LINE_SIZE] = CONFIG_CMDLINE;
 #endif