On Tue, 16 Jan 2018 22:24:31 +1100 Michael Ellerman <m...@ellerman.id.au> wrote:
> Expose the state of the RFI flush (enabled/disabled) via debugfs, and > allow it to be enabled/disabled at runtime. > > eg: $ cat /sys/kernel/debug/powerpc/rfi_flush > 1 > $ echo 0 > /sys/kernel/debug/powerpc/rfi_flush > $ cat /sys/kernel/debug/powerpc/rfi_flush > 0 > > Signed-off-by: Michael Ellerman <m...@ellerman.id.au> Reviewed-by: Nicholas Piggin <npig...@gmail.com> > --- > arch/powerpc/kernel/setup_64.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c > index 624d2a62d05d..e67413f4a8f0 100644 > --- a/arch/powerpc/kernel/setup_64.c > +++ b/arch/powerpc/kernel/setup_64.c > @@ -38,6 +38,7 @@ > #include <linux/memory.h> > #include <linux/nmi.h> > > +#include <asm/debugfs.h> > #include <asm/io.h> > #include <asm/kdump.h> > #include <asm/prom.h> > @@ -902,6 +903,35 @@ void __init setup_rfi_flush(enum l1d_flush_type types, > bool 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)