mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 12:05:10 +07:00
powerpc: Warn about use of smt_snooze_delay
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: 3fa8cad82b
("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
This commit is contained in:
parent
8f55984f53
commit
a02f6d4235
@ -32,29 +32,27 @@
|
|||||||
|
|
||||||
static DEFINE_PER_CPU(struct cpu, cpu_devices);
|
static DEFINE_PER_CPU(struct cpu, cpu_devices);
|
||||||
|
|
||||||
/*
|
|
||||||
* SMT snooze delay stuff, 64-bit only for now
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef CONFIG_PPC64
|
#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,
|
static ssize_t store_smt_snooze_delay(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
const char *buf,
|
const char *buf,
|
||||||
size_t count)
|
size_t count)
|
||||||
{
|
{
|
||||||
struct cpu *cpu = container_of(dev, struct cpu, dev);
|
pr_warn_once("%s (%d) stored to unsupported smt_snooze_delay, which has no effect.\n",
|
||||||
ssize_t ret;
|
current->comm, current->pid);
|
||||||
long snooze;
|
|
||||||
|
|
||||||
ret = sscanf(buf, "%ld", &snooze);
|
|
||||||
if (ret != 1)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
per_cpu(smt_snooze_delay, cpu->dev.id) = snooze;
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,9 +60,9 @@ static ssize_t show_smt_snooze_delay(struct device *dev,
|
|||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
char *buf)
|
char *buf)
|
||||||
{
|
{
|
||||||
struct cpu *cpu = container_of(dev, struct cpu, dev);
|
pr_warn_once("%s (%d) read from unsupported smt_snooze_delay\n",
|
||||||
|
current->comm, current->pid);
|
||||||
return sprintf(buf, "%ld\n", per_cpu(smt_snooze_delay, cpu->dev.id));
|
return sprintf(buf, "100\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEVICE_ATTR(smt_snooze_delay, 0644, show_smt_snooze_delay,
|
static DEVICE_ATTR(smt_snooze_delay, 0644, show_smt_snooze_delay,
|
||||||
@ -72,16 +70,10 @@ static DEVICE_ATTR(smt_snooze_delay, 0644, show_smt_snooze_delay,
|
|||||||
|
|
||||||
static int __init setup_smt_snooze_delay(char *str)
|
static int __init setup_smt_snooze_delay(char *str)
|
||||||
{
|
{
|
||||||
unsigned int cpu;
|
|
||||||
long snooze;
|
|
||||||
|
|
||||||
if (!cpu_has_feature(CPU_FTR_SMT))
|
if (!cpu_has_feature(CPU_FTR_SMT))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
snooze = simple_strtol(str, NULL, 10);
|
pr_warn("smt-snooze-delay command line option has no effect\n");
|
||||||
for_each_possible_cpu(cpu)
|
|
||||||
per_cpu(smt_snooze_delay, cpu) = snooze;
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("smt-snooze-delay=", setup_smt_snooze_delay);
|
__setup("smt-snooze-delay=", setup_smt_snooze_delay);
|
||||||
|
Loading…
Reference in New Issue
Block a user