powerpc: Warn about use of smt_snooze_delay
authorJoel Stanley <joel@jms.id.au>
Wed, 2 Sep 2020 00:00:11 +0000 (09:30 +0930)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Nov 2020 10:07:02 +0000 (11:07 +0100)
commit a02f6d42357acf6e5de6ffc728e6e77faf3ad217 upstream.

It's not done anything for a long time. Save the percpu variable, and
emit a warning to remind users to not expect it to do anything.

This uses pr_warn_once instead of pr_warn_ratelimit as testing
'ppc64_cpu --smt=off' on a 24 core / 4 SMT system showed the warning
to be noisy, as the online/offline loop is slow.

Fixes: 3fa8cad82b94 ("powerpc/pseries/cpuidle: smt-snooze-delay cleanup.")
Cc: stable@vger.kernel.org # v3.14
Signed-off-by: Joel Stanley <joel@jms.id.au>
Acked-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200902000012.3440389-1-joel@jms.id.au
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/powerpc/kernel/sysfs.c

index 4437c70c7c2b34db9725744c162af41ed57cdebe..952fbc2d4abc89eec5cc7780003d70ef746a7052 100644 (file)
 
 static DEFINE_PER_CPU(struct cpu, cpu_devices);
 
-/*
- * SMT snooze delay stuff, 64-bit only for now
- */
-
 #ifdef CONFIG_PPC64
 
-/* Time in microseconds we delay before sleeping in the idle loop */
-static DEFINE_PER_CPU(long, smt_snooze_delay) = { 100 };
+/*
+ * Snooze delay has not been hooked up since 3fa8cad82b94 ("powerpc/pseries/cpuidle:
+ * smt-snooze-delay cleanup.") and has been broken even longer. As was foretold in
+ * 2014:
+ *
+ *  "ppc64_util currently utilises it. Once we fix ppc64_util, propose to clean
+ *  up the kernel code."
+ *
+ * powerpc-utils stopped using it as of 1.3.8. At some point in the future this
+ * code should be removed.
+ */
 
 static ssize_t store_smt_snooze_delay(struct device *dev,
                                      struct device_attribute *attr,
                                      const char *buf,
                                      size_t count)
 {
-       struct cpu *cpu = container_of(dev, struct cpu, dev);
-       ssize_t ret;
-       long snooze;
-
-       ret = sscanf(buf, "%ld", &snooze);
-       if (ret != 1)
-               return -EINVAL;
-
-       per_cpu(smt_snooze_delay, cpu->dev.id) = snooze;
+       pr_warn_once("%s (%d) stored to unsupported smt_snooze_delay, which has no effect.\n",
+                    current->comm, current->pid);
        return count;
 }
 
@@ -58,9 +56,9 @@ static ssize_t show_smt_snooze_delay(struct device *dev,
                                     struct device_attribute *attr,
                                     char *buf)
 {
-       struct cpu *cpu = container_of(dev, struct cpu, dev);
-
-       return sprintf(buf, "%ld\n", per_cpu(smt_snooze_delay, cpu->dev.id));
+       pr_warn_once("%s (%d) read from unsupported smt_snooze_delay\n",
+                    current->comm, current->pid);
+       return sprintf(buf, "100\n");
 }
 
 static DEVICE_ATTR(smt_snooze_delay, 0644, show_smt_snooze_delay,
@@ -68,16 +66,10 @@ static DEVICE_ATTR(smt_snooze_delay, 0644, show_smt_snooze_delay,
 
 static int __init setup_smt_snooze_delay(char *str)
 {
-       unsigned int cpu;
-       long snooze;
-
        if (!cpu_has_feature(CPU_FTR_SMT))
                return 1;
 
-       snooze = simple_strtol(str, NULL, 10);
-       for_each_possible_cpu(cpu)
-               per_cpu(smt_snooze_delay, cpu) = snooze;
-
+       pr_warn("smt-snooze-delay command line option has no effect\n");
        return 1;
 }
 __setup("smt-snooze-delay=", setup_smt_snooze_delay);