Commit 4917d5df authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'powerpc-4.15-8' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux

Pull powerpc fixes from Michael Ellerman:
 "More than we'd like after rc8, but nothing very alarming either, just
  tying up loose ends before the release:

  Since we changed powernv to use cpufreq_get() from show_cpuinfo(), we
  see warnings with PREEMPT enabled. But the preempt_disable() in
  show_cpuinfo() doesn't actually prevent CPU hotplug as it suggests, so
  remove it.

  Two updates to the recently merged RFI flush code. Wire up the generic
  sysfs file to report the status, and add a debugfs file to allow
  enabling/disabling it at runtime.

  Two updates to xmon, one to add the RFI flush related fields to the
  paca dump, and another to not use hashed pointers in the paca dump.

  And one minor fix to add a missing include of linux/types.h in
  asm/hvcall.h, not seen to break the build in upstream, but correct
  anyway.

  Thanks to: Benjamin Herrenschmidt, Michal Suchanek, Nicholas Piggin"

* tag 'powerpc-4.15-8' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
  powerpc/pseries: include linux/types.h in asm/hvcall.h
  powerpc/64s: Allow control of RFI flush via debugfs
  powerpc/64s: Wire up cpu_show_meltdown()
  powerpc: Don't preempt_disable() in show_cpuinfo()
  powerpc/xmon: Don't print hashed pointers in paca dump
  powerpc/xmon: Add RFI flush related fields to paca dump
parents 9abc9378 1b689a95
...@@ -166,6 +166,7 @@ config PPC ...@@ -166,6 +166,7 @@ config PPC
select GENERIC_CLOCKEVENTS_BROADCAST if SMP select GENERIC_CLOCKEVENTS_BROADCAST if SMP
select GENERIC_CMOS_UPDATE select GENERIC_CMOS_UPDATE
select GENERIC_CPU_AUTOPROBE select GENERIC_CPU_AUTOPROBE
select GENERIC_CPU_VULNERABILITIES if PPC_BOOK3S_64
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select GENERIC_IRQ_SHOW_LEVEL select GENERIC_IRQ_SHOW_LEVEL
select GENERIC_SMP_IDLE_THREAD select GENERIC_SMP_IDLE_THREAD
......
...@@ -353,6 +353,7 @@ ...@@ -353,6 +353,7 @@
#define PROC_TABLE_GTSE 0x01 #define PROC_TABLE_GTSE 0x01
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <linux/types.h>
/** /**
* plpar_hcall_norets: - Make a pseries hypervisor call with no return arguments * plpar_hcall_norets: - Make a pseries hypervisor call with no return arguments
......
...@@ -242,14 +242,6 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -242,14 +242,6 @@ static int show_cpuinfo(struct seq_file *m, void *v)
unsigned short maj; unsigned short maj;
unsigned short min; unsigned short min;
/* We only show online cpus: disable preempt (overzealous, I
* knew) to prevent cpu going down. */
preempt_disable();
if (!cpu_online(cpu_id)) {
preempt_enable();
return 0;
}
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
pvr = per_cpu(cpu_pvr, cpu_id); pvr = per_cpu(cpu_pvr, cpu_id);
#else #else
...@@ -358,9 +350,6 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -358,9 +350,6 @@ static int show_cpuinfo(struct seq_file *m, void *v)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
seq_printf(m, "\n"); seq_printf(m, "\n");
#endif #endif
preempt_enable();
/* If this is the last cpu, print the summary */ /* If this is the last cpu, print the summary */
if (cpumask_next(cpu_id, cpu_online_mask) >= nr_cpu_ids) if (cpumask_next(cpu_id, cpu_online_mask) >= nr_cpu_ids)
show_cpuinfo_summary(m); show_cpuinfo_summary(m);
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <linux/memory.h> #include <linux/memory.h>
#include <linux/nmi.h> #include <linux/nmi.h>
#include <asm/debugfs.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/kdump.h> #include <asm/kdump.h>
#include <asm/prom.h> #include <asm/prom.h>
...@@ -901,4 +902,41 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable) ...@@ -901,4 +902,41 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
if (!no_rfi_flush) if (!no_rfi_flush)
rfi_flush_enable(enable); rfi_flush_enable(enable);
} }
#ifdef CONFIG_DEBUG_FS
static int rfi_flush_set(void *data, u64 val)
{
if (val == 1)
rfi_flush_enable(true);
else if (val == 0)
rfi_flush_enable(false);
else
return -EINVAL;
return 0;
}
static int rfi_flush_get(void *data, u64 *val)
{
*val = rfi_flush ? 1 : 0;
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(fops_rfi_flush, rfi_flush_get, rfi_flush_set, "%llu\n");
static __init int rfi_flush_debugfs_init(void)
{
debugfs_create_file("rfi_flush", 0600, powerpc_debugfs_root, NULL, &fops_rfi_flush);
return 0;
}
device_initcall(rfi_flush_debugfs_init);
#endif
ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf)
{
if (rfi_flush)
return sprintf(buf, "Mitigation: RFI Flush\n");
return sprintf(buf, "Vulnerable\n");
}
#endif /* CONFIG_PPC_BOOK3S_64 */ #endif /* CONFIG_PPC_BOOK3S_64 */
...@@ -2344,10 +2344,10 @@ static void dump_one_paca(int cpu) ...@@ -2344,10 +2344,10 @@ static void dump_one_paca(int cpu)
DUMP(p, kernel_toc, "lx"); DUMP(p, kernel_toc, "lx");
DUMP(p, kernelbase, "lx"); DUMP(p, kernelbase, "lx");
DUMP(p, kernel_msr, "lx"); DUMP(p, kernel_msr, "lx");
DUMP(p, emergency_sp, "p"); DUMP(p, emergency_sp, "px");
#ifdef CONFIG_PPC_BOOK3S_64 #ifdef CONFIG_PPC_BOOK3S_64
DUMP(p, nmi_emergency_sp, "p"); DUMP(p, nmi_emergency_sp, "px");
DUMP(p, mc_emergency_sp, "p"); DUMP(p, mc_emergency_sp, "px");
DUMP(p, in_nmi, "x"); DUMP(p, in_nmi, "x");
DUMP(p, in_mce, "x"); DUMP(p, in_mce, "x");
DUMP(p, hmi_event_available, "x"); DUMP(p, hmi_event_available, "x");
...@@ -2375,17 +2375,21 @@ static void dump_one_paca(int cpu) ...@@ -2375,17 +2375,21 @@ static void dump_one_paca(int cpu)
DUMP(p, slb_cache_ptr, "x"); DUMP(p, slb_cache_ptr, "x");
for (i = 0; i < SLB_CACHE_ENTRIES; i++) for (i = 0; i < SLB_CACHE_ENTRIES; i++)
printf(" slb_cache[%d]: = 0x%016lx\n", i, p->slb_cache[i]); printf(" slb_cache[%d]: = 0x%016lx\n", i, p->slb_cache[i]);
DUMP(p, rfi_flush_fallback_area, "px");
DUMP(p, l1d_flush_congruence, "llx");
DUMP(p, l1d_flush_sets, "llx");
#endif #endif
DUMP(p, dscr_default, "llx"); DUMP(p, dscr_default, "llx");
#ifdef CONFIG_PPC_BOOK3E #ifdef CONFIG_PPC_BOOK3E
DUMP(p, pgd, "p"); DUMP(p, pgd, "px");
DUMP(p, kernel_pgd, "p"); DUMP(p, kernel_pgd, "px");
DUMP(p, tcd_ptr, "p"); DUMP(p, tcd_ptr, "px");
DUMP(p, mc_kstack, "p"); DUMP(p, mc_kstack, "px");
DUMP(p, crit_kstack, "p"); DUMP(p, crit_kstack, "px");
DUMP(p, dbg_kstack, "p"); DUMP(p, dbg_kstack, "px");
#endif #endif
DUMP(p, __current, "p"); DUMP(p, __current, "px");
DUMP(p, kstack, "lx"); DUMP(p, kstack, "lx");
printf(" kstack_base = 0x%016lx\n", p->kstack & ~(THREAD_SIZE - 1)); printf(" kstack_base = 0x%016lx\n", p->kstack & ~(THREAD_SIZE - 1));
DUMP(p, stab_rr, "lx"); DUMP(p, stab_rr, "lx");
...@@ -2403,7 +2407,7 @@ static void dump_one_paca(int cpu) ...@@ -2403,7 +2407,7 @@ static void dump_one_paca(int cpu)
#endif #endif
#ifdef CONFIG_PPC_POWERNV #ifdef CONFIG_PPC_POWERNV
DUMP(p, core_idle_state_ptr, "p"); DUMP(p, core_idle_state_ptr, "px");
DUMP(p, thread_idle_state, "x"); DUMP(p, thread_idle_state, "x");
DUMP(p, thread_mask, "x"); DUMP(p, thread_mask, "x");
DUMP(p, subcore_sibling_mask, "x"); DUMP(p, subcore_sibling_mask, "x");
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment