* [PATCH v2 0/3] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E @ 2018-06-11 12:53 Diana Craciun 2018-06-11 12:53 ` [PATCH v2 1/3] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun ` (3 more replies) 0 siblings, 4 replies; 12+ messages in thread From: Diana Craciun @ 2018-06-11 12:53 UTC (permalink / raw) To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun Implement barrier_nospec for NXP PowerPC Book3E processors. Diana Craciun (3): Disable the speculation barrier from the command line Add barrier_nospec implementation for NXP PowerPC Book3E Implement cpu_show_spectre_v1/v2 for NXP PowerPC Book3E arch/powerpc/Kconfig | 2 +- arch/powerpc/include/asm/barrier.h | 10 +++++++++ arch/powerpc/include/asm/setup.h | 2 +- arch/powerpc/kernel/Makefile | 2 +- arch/powerpc/kernel/module.c | 5 +++-- arch/powerpc/kernel/security.c | 42 +++++++++++++++++++++++++++++++++++++- arch/powerpc/kernel/setup_32.c | 5 +++++ arch/powerpc/kernel/setup_64.c | 6 ++++++ arch/powerpc/kernel/vmlinux.lds.S | 4 +++- arch/powerpc/lib/feature-fixups.c | 35 ++++++++++++++++++++++++++++++- 10 files changed, 105 insertions(+), 8 deletions(-) -- History: v1 --> v2 - added implementation for cpu_show_spectre_x functions - the mitigation is no longer enabled through device tree options 2.5.5 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 1/3] powerpc/fsl: Disable the speculation barrier from the command line 2018-06-11 12:53 [PATCH v2 0/3] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun @ 2018-06-11 12:53 ` Diana Craciun 2018-07-03 7:25 ` Michael Ellerman 2018-06-11 12:53 ` [PATCH v2 2/3] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E Diana Craciun ` (2 subsequent siblings) 3 siblings, 1 reply; 12+ messages in thread From: Diana Craciun @ 2018-06-11 12:53 UTC (permalink / raw) To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun The speculation barrier can be disabled from the command line with the parameter: "nospectre_v1". Signed-off-by: Diana Craciun <diana.craciun@nxp.com> --- arch/powerpc/kernel/security.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c index 3eb9c45..c55e102 100644 --- a/arch/powerpc/kernel/security.c +++ b/arch/powerpc/kernel/security.c @@ -16,6 +16,7 @@ unsigned long powerpc_security_features __read_mostly = SEC_FTR_DEFAULT; bool barrier_nospec_enabled; +static bool no_nospec; static void enable_barrier_nospec(bool enable) { @@ -42,9 +43,18 @@ void setup_barrier_nospec(void) enable = security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) && security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR); - enable_barrier_nospec(enable); + if (!no_nospec) + enable_barrier_nospec(enable); } +static int __init handle_nospectre_v1(char *p) +{ + no_nospec = true; + + return 0; +} +early_param("nospectre_v1", handle_nospectre_v1); + #ifdef CONFIG_DEBUG_FS static int barrier_nospec_set(void *data, u64 val) { -- 2.5.5 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2 1/3] powerpc/fsl: Disable the speculation barrier from the command line 2018-06-11 12:53 ` [PATCH v2 1/3] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun @ 2018-07-03 7:25 ` Michael Ellerman 0 siblings, 0 replies; 12+ messages in thread From: Michael Ellerman @ 2018-07-03 7:25 UTC (permalink / raw) To: Diana Craciun, linuxppc-dev Cc: oss, leoyang.li, bharat.bhushan, Diana Craciun Diana Craciun <diana.craciun@nxp.com> writes: > The speculation barrier can be disabled from the command line > with the parameter: "nospectre_v1". Can you please send another patch adding it to Documentation/admin-guide/kernel-parameters.txt You should mark it as "PPC" only for now. cheers ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 2/3] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E 2018-06-11 12:53 [PATCH v2 0/3] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun 2018-06-11 12:53 ` [PATCH v2 1/3] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun @ 2018-06-11 12:53 ` Diana Craciun 2018-07-03 7:26 ` Michael Ellerman 2018-06-11 12:53 ` [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 " Diana Craciun 2018-06-29 14:34 ` [PATCH v2 0/3] powerpc/fsl: Speculation barrier " Diana Madalina Craciun 3 siblings, 1 reply; 12+ messages in thread From: Diana Craciun @ 2018-06-11 12:53 UTC (permalink / raw) To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun Implement the barrier_nospec as a isync;sync instruction sequence. The implementation uses the infrastructure built for BOOK3S 64. Signed-off-by: Diana Craciun <diana.craciun@nxp.com> --- arch/powerpc/include/asm/barrier.h | 10 ++++++++++ arch/powerpc/include/asm/setup.h | 2 +- arch/powerpc/kernel/Makefile | 2 +- arch/powerpc/kernel/module.c | 5 +++-- arch/powerpc/kernel/security.c | 15 +++++++++++++++ arch/powerpc/kernel/setup_32.c | 5 +++++ arch/powerpc/kernel/setup_64.c | 6 ++++++ arch/powerpc/kernel/vmlinux.lds.S | 4 +++- arch/powerpc/lib/feature-fixups.c | 35 ++++++++++++++++++++++++++++++++++- 9 files changed, 78 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h index f67b3f6..405d572 100644 --- a/arch/powerpc/include/asm/barrier.h +++ b/arch/powerpc/include/asm/barrier.h @@ -86,6 +86,16 @@ do { \ // This also acts as a compiler barrier due to the memory clobber. #define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "memory") +#elif defined(CONFIG_PPC_FSL_BOOK3E) +/* + * Prevent the execution of subsequent instructions speculatively using a + * isync;sync instruction sequence. + */ +#define barrier_nospec_asm NOSPEC_BARRIER_FIXUP_SECTION; nop; nop + +// This also acts as a compiler barrier due to the memory clobber. +#define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "memory") + #else /* !CONFIG_PPC_BOOK3S_64 */ #define barrier_nospec_asm #define barrier_nospec() diff --git a/arch/powerpc/include/asm/setup.h b/arch/powerpc/include/asm/setup.h index 8721fd0..67a2810 100644 --- a/arch/powerpc/include/asm/setup.h +++ b/arch/powerpc/include/asm/setup.h @@ -56,7 +56,7 @@ void setup_barrier_nospec(void); void do_barrier_nospec_fixups(bool enable); extern bool barrier_nospec_enabled; -#ifdef CONFIG_PPC_BOOK3S_64 +#if defined(CONFIG_PPC_BOOK3S_64) || defined(CONFIG_PPC_FSL_BOOK3E) void do_barrier_nospec_fixups_range(bool enable, void *start, void *end); #else static inline void do_barrier_nospec_fixups_range(bool enable, void *start, void *end) { }; diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 2b4c40b2..d9dee43 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -76,7 +76,7 @@ endif obj64-$(CONFIG_HIBERNATION) += swsusp_asm64.o obj-$(CONFIG_MODULES) += module.o module_$(BITS).o obj-$(CONFIG_44x) += cpu_setup_44x.o -obj-$(CONFIG_PPC_FSL_BOOK3E) += cpu_setup_fsl_booke.o +obj-$(CONFIG_PPC_FSL_BOOK3E) += cpu_setup_fsl_booke.o security.o obj-$(CONFIG_PPC_DOORBELL) += dbell.o obj-$(CONFIG_JUMP_LABEL) += jump_label.o diff --git a/arch/powerpc/kernel/module.c b/arch/powerpc/kernel/module.c index 1b3c683..96a9821 100644 --- a/arch/powerpc/kernel/module.c +++ b/arch/powerpc/kernel/module.c @@ -72,13 +72,14 @@ int module_finalize(const Elf_Ehdr *hdr, do_feature_fixups(powerpc_firmware_features, (void *)sect->sh_addr, (void *)sect->sh_addr + sect->sh_size); - +#endif /* CONFIG_PPC64 */ +#if defined(CONFIG_PPC64) || defined(CONFIG_PPC_FSL_BOOK3E) sect = find_section(hdr, sechdrs, "__spec_barrier_fixup"); if (sect != NULL) do_barrier_nospec_fixups_range(barrier_nospec_enabled, (void *)sect->sh_addr, (void *)sect->sh_addr + sect->sh_size); -#endif +#endif /* CONFIG_PPC64 || CONFIG_PPC_FSL_BOOK3E */ sect = find_section(hdr, sechdrs, "__lwsync_fixup"); if (sect != NULL) diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c index c55e102..797c975 100644 --- a/arch/powerpc/kernel/security.c +++ b/arch/powerpc/kernel/security.c @@ -13,7 +13,9 @@ #include <asm/setup.h> +#ifdef CONFIG_PPC_BOOK3S_64 unsigned long powerpc_security_features __read_mostly = SEC_FTR_DEFAULT; +#endif /* CONFIG_PPC_BOOK3S_64 */ bool barrier_nospec_enabled; static bool no_nospec; @@ -24,6 +26,7 @@ static void enable_barrier_nospec(bool enable) do_barrier_nospec_fixups(enable); } +#ifdef CONFIG_PPC_BOOK3S_64 void setup_barrier_nospec(void) { bool enable; @@ -46,6 +49,15 @@ void setup_barrier_nospec(void) if (!no_nospec) enable_barrier_nospec(enable); } +#endif /* CONFIG_PPC_BOOK3S_64 */ + +#ifdef CONFIG_PPC_FSL_BOOK3E +void setup_barrier_nospec(void) +{ + if (!no_nospec) + enable_barrier_nospec(true); +} +#endif /* CONFIG_PPC_FSL_BOOK3E */ static int __init handle_nospectre_v1(char *p) { @@ -92,6 +104,7 @@ static __init int barrier_nospec_debugfs_init(void) device_initcall(barrier_nospec_debugfs_init); #endif /* CONFIG_DEBUG_FS */ +#ifdef CONFIG_PPC_BOOK3S_64 ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf) { bool thread_priv; @@ -168,3 +181,5 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, c return s.len; } +#endif /* CONFIG_PPC_BOOK3S_64 */ + diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 7445748..80c1e6e 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c @@ -116,6 +116,11 @@ notrace void __init machine_init(u64 dt_ptr) /* Do some early initialization based on the flat device tree */ early_init_devtree(__va(dt_ptr)); + /* Apply the speculation barrier fixup */ +#ifdef CONFIG_PPC_FSL_BOOK3E + setup_barrier_nospec(); +#endif + early_init_mmu(); setup_kdump_trampoline(); diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 7a7ce8a..b2a644a 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c @@ -327,6 +327,12 @@ void __init early_setup(unsigned long dt_ptr) /* Apply all the dynamic patching */ apply_feature_fixups(); + + /* Apply the speculation barrier fixup */ +#ifdef CONFIG_PPC_FSL_BOOK3E + setup_barrier_nospec(); +#endif /* CONFIG_PPC_FSL_BOOK3E */ + setup_feature_keys(); /* Initialize the hash table or TLB handling */ diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index ff73f49..af513e6 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S @@ -139,14 +139,16 @@ SECTIONS *(__rfi_flush_fixup) __stop___rfi_flush_fixup = .; } +#endif /* CONFIG_PPC64 */ +#if defined(CONFIG_PPC64) || defined(CONFIG_PPC_FSL_BOOK3E) . = ALIGN(8); __spec_barrier_fixup : AT(ADDR(__spec_barrier_fixup) - LOAD_OFFSET) { __start___barrier_nospec_fixup = .; *(__barrier_nospec_fixup) __stop___barrier_nospec_fixup = .; } -#endif +#endif /* CONFIG_PPC64 || CONFIG_PPC_FSL_BOOK3E */ EXCEPTION_TABLE(0) diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/feature-fixups.c index 2b9173d..bea2b87 100644 --- a/arch/powerpc/lib/feature-fixups.c +++ b/arch/powerpc/lib/feature-fixups.c @@ -188,7 +188,40 @@ void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_ printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i); } +#endif /* CONFIG_PPC_BOOK3S_64 */ + +#ifdef CONFIG_PPC_FSL_BOOK3E +void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_end) +{ + unsigned int instr[2], *dest; + long *start, *end; + int i; + + start = fixup_start; + end = fixup_end; + + instr[0] = PPC_INST_NOP; + instr[1] = PPC_INST_NOP; + + if (enable) { + pr_info("barrier_nospec; using isync; sync as a speculation barrier\n"); + instr[0] = PPC_INST_ISYNC; + instr[1] = PPC_INST_SYNC; + } + + for (i = 0; start < end; start++, i++) { + dest = (void *)start + *start; + pr_devel("patching dest %lx\n", (unsigned long)dest); + patch_instruction(dest, instr[0]); + patch_instruction(dest + 1, instr[1]); + } + + pr_debug("barrier-nospec: patched %d locations\n", i); +} +#endif /* CONFIG_PPC_FSL_BOOK3E */ + +#if defined(CONFIG_PPC_BOOK3S_64) || defined(CONFIG_PPC_FSL_BOOK3E) void do_barrier_nospec_fixups(bool enable) { void *start, *end; @@ -199,7 +232,7 @@ void do_barrier_nospec_fixups(bool enable) do_barrier_nospec_fixups_range(enable, start, end); } -#endif /* CONFIG_PPC_BOOK3S_64 */ +#endif /* CONFIG_PPC_BOOK3S_64 || CONFIG_PPC_FSL_BOOK3E */ void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end) { -- 2.5.5 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/3] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E 2018-06-11 12:53 ` [PATCH v2 2/3] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E Diana Craciun @ 2018-07-03 7:26 ` Michael Ellerman 2018-07-05 13:21 ` Diana Madalina Craciun 0 siblings, 1 reply; 12+ messages in thread From: Michael Ellerman @ 2018-07-03 7:26 UTC (permalink / raw) To: Diana Craciun, linuxppc-dev Cc: oss, leoyang.li, bharat.bhushan, Diana Craciun Hi Diana, A few comments below ... Diana Craciun <diana.craciun@nxp.com> writes: > Implement the barrier_nospec as a isync;sync instruction sequence. > The implementation uses the infrastructure built for BOOK3S 64. Do you have any details on why that sequence functions as an effective barrier on your chips? In a lot of places we have eg: +#if defined(CONFIG_PPC_BOOK3S_64) || defined(CONFIG_PPC_FSL_BOOK3E) Can you please add a Kconfig symbol to capture that. eg. config PPC_NOSPEC bool default y depends on PPC_BOOK3S_64 || PPC_FSL_BOOK3E And then use that everywhere. > diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h > index f67b3f6..405d572 100644 > --- a/arch/powerpc/include/asm/barrier.h > +++ b/arch/powerpc/include/asm/barrier.h > @@ -86,6 +86,16 @@ do { \ > // This also acts as a compiler barrier due to the memory clobber. > #define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "memory") > > +#elif defined(CONFIG_PPC_FSL_BOOK3E) > +/* > + * Prevent the execution of subsequent instructions speculatively using a > + * isync;sync instruction sequence. > + */ > +#define barrier_nospec_asm NOSPEC_BARRIER_FIXUP_SECTION; nop; nop > + > +// This also acts as a compiler barrier due to the memory clobber. > +#define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "memory") > + > #else /* !CONFIG_PPC_BOOK3S_64 */ > #define barrier_nospec_asm > #define barrier_nospec() If we have CONFIG_PPC_NOSPEC this can be done something like: #ifdef CONFIG_PPC_BOOK3S_64 #define NOSPEC_BARRIER_SLOT nop #elif defined(CONFIG_PPC_FSL_BOOK3E) #define NOSPEC_BARRIER_SLOT nop; nop #endif /* CONFIG_PPC_BOOK3S_64 */ #ifdef CONFIG_PPC_NOSPEC /* * Prevent execution of subsequent instructions until preceding branches have * been fully resolved and are no longer executing speculatively. */ #define barrier_nospec_asm NOSPEC_BARRIER_FIXUP_SECTION; NOSPEC_BARRIER_SLOT // This also acts as a compiler barrier due to the memory clobber. #define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "memory") #else #define barrier_nospec_asm #define barrier_nospec() #endif /* CONFIG_PPC_NOSPEC */ > diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile > index 2b4c40b2..d9dee43 100644 > --- a/arch/powerpc/kernel/Makefile > +++ b/arch/powerpc/kernel/Makefile > @@ -76,7 +76,7 @@ endif > obj64-$(CONFIG_HIBERNATION) += swsusp_asm64.o > obj-$(CONFIG_MODULES) += module.o module_$(BITS).o > obj-$(CONFIG_44x) += cpu_setup_44x.o > -obj-$(CONFIG_PPC_FSL_BOOK3E) += cpu_setup_fsl_booke.o > +obj-$(CONFIG_PPC_FSL_BOOK3E) += cpu_setup_fsl_booke.o security.o > obj-$(CONFIG_PPC_DOORBELL) += dbell.o > obj-$(CONFIG_JUMP_LABEL) += jump_label.o Can we instead do: obj-$(CONFIG_PPC_NOSPEC) += security.o > diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c > index c55e102..797c975 100644 > --- a/arch/powerpc/kernel/security.c > +++ b/arch/powerpc/kernel/security.c > @@ -13,7 +13,9 @@ > #include <asm/setup.h> > > > +#ifdef CONFIG_PPC_BOOK3S_64 > unsigned long powerpc_security_features __read_mostly = SEC_FTR_DEFAULT; > +#endif /* CONFIG_PPC_BOOK3S_64 */ Why are you making that book3s specific? By doing that you then can't use the existing versions of setup_barrier_nospec() and cpu_show_spectre_v1/v2(). > @@ -24,6 +26,7 @@ static void enable_barrier_nospec(bool enable) > do_barrier_nospec_fixups(enable); > } > > +#ifdef CONFIG_PPC_BOOK3S_64 > void setup_barrier_nospec(void) > { > bool enable; > @@ -46,6 +49,15 @@ void setup_barrier_nospec(void) > if (!no_nospec) > enable_barrier_nospec(enable); > } > +#endif /* CONFIG_PPC_BOOK3S_64 */ > + > +#ifdef CONFIG_PPC_FSL_BOOK3E > +void setup_barrier_nospec(void) > +{ > + if (!no_nospec) > + enable_barrier_nospec(true); > +} > +#endif /* CONFIG_PPC_FSL_BOOK3E */ eg. that is identical to the existing version except for the feature check: enable = security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) && security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR); Both those bits are enabled by default, so you shouldn't need to elide that check. So basically you should be able to use the existing setup_barrier_nospec() if you just remove the ifdef around powerpc_security_features. Or am I missing something? > diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c > index 7445748..80c1e6e 100644 > --- a/arch/powerpc/kernel/setup_32.c > +++ b/arch/powerpc/kernel/setup_32.c > @@ -116,6 +116,11 @@ notrace void __init machine_init(u64 dt_ptr) > /* Do some early initialization based on the flat device tree */ > early_init_devtree(__va(dt_ptr)); > > + /* Apply the speculation barrier fixup */ > +#ifdef CONFIG_PPC_FSL_BOOK3E > + setup_barrier_nospec(); > +#endif This ifdef should be handled in a header with an empty version for the #else case. > diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c > index 7a7ce8a..b2a644a 100644 > --- a/arch/powerpc/kernel/setup_64.c > +++ b/arch/powerpc/kernel/setup_64.c > @@ -327,6 +327,12 @@ void __init early_setup(unsigned long dt_ptr) > > /* Apply all the dynamic patching */ > apply_feature_fixups(); > + > + /* Apply the speculation barrier fixup */ > +#ifdef CONFIG_PPC_FSL_BOOK3E > + setup_barrier_nospec(); > +#endif /* CONFIG_PPC_FSL_BOOK3E */ Can you call it from ppc_md->setup_arch() like the other platforms? Failing that we could put it in setup_arch() after the call to ppc_md->setup_arch(), so we can share it with powernv/pseries. > diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/feature-fixups.c > index 2b9173d..bea2b87 100644 > --- a/arch/powerpc/lib/feature-fixups.c > +++ b/arch/powerpc/lib/feature-fixups.c > @@ -188,7 +188,40 @@ void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_ > > printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i); > } > +#endif /* CONFIG_PPC_BOOK3S_64 */ > + > +#ifdef CONFIG_PPC_FSL_BOOK3E > +void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_end) > +{ > + unsigned int instr[2], *dest; > + long *start, *end; > + int i; > + > + start = fixup_start; > + end = fixup_end; > + > + instr[0] = PPC_INST_NOP; > + instr[1] = PPC_INST_NOP; > + > + if (enable) { > + pr_info("barrier_nospec; using isync; sync as a speculation barrier\n"); > + instr[0] = PPC_INST_ISYNC; > + instr[1] = PPC_INST_SYNC; > + } > + > + for (i = 0; start < end; start++, i++) { > + dest = (void *)start + *start; > + pr_devel("patching dest %lx\n", (unsigned long)dest); > > + patch_instruction(dest, instr[0]); > + patch_instruction(dest + 1, instr[1]); > + } > + > + pr_debug("barrier-nospec: patched %d locations\n", i); > +} > +#endif /* CONFIG_PPC_FSL_BOOK3E */ It's a bit unfortunate that we end up with two versions of that, which are 80% the same. But merging them without ugly ifdefs would require a bit more refactoring. So I guess it's OK for now. cheers ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/3] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E 2018-07-03 7:26 ` Michael Ellerman @ 2018-07-05 13:21 ` Diana Madalina Craciun 0 siblings, 0 replies; 12+ messages in thread From: Diana Madalina Craciun @ 2018-07-05 13:21 UTC (permalink / raw) To: Michael Ellerman, linuxppc-dev; +Cc: oss, Leo Li, Bharat Bhushan Hi Michael,=0A= =0A= Thank you for the review.=0A= =0A= On 07/03/2018 10:26 AM, Michael Ellerman wrote:=0A= > Hi Diana,=0A= >=0A= > A few comments below ...=0A= >=0A= > Diana Craciun <diana.craciun@nxp.com> writes:=0A= >> Implement the barrier_nospec as a isync;sync instruction sequence.=0A= >> The implementation uses the infrastructure built for BOOK3S 64.=0A= > Do you have any details on why that sequence functions as an effective=0A= > barrier on your chips?=0A= =0A= It was recommended by the hardware team, I do not have details.=0A= =0A= >=0A= > In a lot of places we have eg:=0A= >=0A= > +#if defined(CONFIG_PPC_BOOK3S_64) || defined(CONFIG_PPC_FSL_BOOK3E)=0A= >=0A= > Can you please add a Kconfig symbol to capture that. eg.=0A= >=0A= > config PPC_NOSPEC=0A= > bool=0A= > default y=0A= > depends on PPC_BOOK3S_64 || PPC_FSL_BOOK3E=0A= >=0A= >=0A= > And then use that everywhere.=0A= =0A= OK.=0A= =0A= >=0A= >> diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/a= sm/barrier.h=0A= >> index f67b3f6..405d572 100644=0A= >> --- a/arch/powerpc/include/asm/barrier.h=0A= >> +++ b/arch/powerpc/include/asm/barrier.h=0A= >> @@ -86,6 +86,16 @@ do { \=0A= >> // This also acts as a compiler barrier due to the memory clobber.=0A= >> #define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "m= emory")=0A= >> =0A= >> +#elif defined(CONFIG_PPC_FSL_BOOK3E)=0A= >> +/*=0A= >> + * Prevent the execution of subsequent instructions speculatively using= a=0A= >> + * isync;sync instruction sequence.=0A= >> + */=0A= >> +#define barrier_nospec_asm NOSPEC_BARRIER_FIXUP_SECTION; nop; nop=0A= >> +=0A= >> +// This also acts as a compiler barrier due to the memory clobber.=0A= >> +#define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "m= emory")=0A= >> +=0A= >> #else /* !CONFIG_PPC_BOOK3S_64 */=0A= >> #define barrier_nospec_asm=0A= >> #define barrier_nospec()=0A= > If we have CONFIG_PPC_NOSPEC this can be done something like:=0A= >=0A= > #ifdef CONFIG_PPC_BOOK3S_64=0A= > #define NOSPEC_BARRIER_SLOT nop=0A= > #elif defined(CONFIG_PPC_FSL_BOOK3E)=0A= > #define NOSPEC_BARRIER_SLOT nop; nop=0A= > #endif /* CONFIG_PPC_BOOK3S_64 */=0A= >=0A= > #ifdef CONFIG_PPC_NOSPEC=0A= > /*=0A= > * Prevent execution of subsequent instructions until preceding branches = have=0A= > * been fully resolved and are no longer executing speculatively.=0A= > */=0A= > #define barrier_nospec_asm NOSPEC_BARRIER_FIXUP_SECTION; NOSPEC_BARRIER_S= LOT=0A= >=0A= > // This also acts as a compiler barrier due to the memory clobber.=0A= > #define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "mem= ory")=0A= > #else=0A= > #define barrier_nospec_asm=0A= > #define barrier_nospec()=0A= > #endif /* CONFIG_PPC_NOSPEC */=0A= =0A= OK.=0A= =0A= >=0A= >=0A= >> diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile= =0A= >> index 2b4c40b2..d9dee43 100644=0A= >> --- a/arch/powerpc/kernel/Makefile=0A= >> +++ b/arch/powerpc/kernel/Makefile=0A= >> @@ -76,7 +76,7 @@ endif=0A= >> obj64-$(CONFIG_HIBERNATION) +=3D swsusp_asm64.o=0A= >> obj-$(CONFIG_MODULES) +=3D module.o module_$(BITS).o=0A= >> obj-$(CONFIG_44x) +=3D cpu_setup_44x.o=0A= >> -obj-$(CONFIG_PPC_FSL_BOOK3E) +=3D cpu_setup_fsl_booke.o=0A= >> +obj-$(CONFIG_PPC_FSL_BOOK3E) +=3D cpu_setup_fsl_booke.o security.o=0A= >> obj-$(CONFIG_PPC_DOORBELL) +=3D dbell.o=0A= >> obj-$(CONFIG_JUMP_LABEL) +=3D jump_label.o=0A= > Can we instead do:=0A= >=0A= > obj-$(CONFIG_PPC_NOSPEC) +=3D security.o=0A= =0A= OK=0A= =0A= >=0A= >> diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/securi= ty.c=0A= >> index c55e102..797c975 100644=0A= >> --- a/arch/powerpc/kernel/security.c=0A= >> +++ b/arch/powerpc/kernel/security.c=0A= >> @@ -13,7 +13,9 @@=0A= >> #include <asm/setup.h>=0A= >> =0A= >> =0A= >> +#ifdef CONFIG_PPC_BOOK3S_64=0A= >> unsigned long powerpc_security_features __read_mostly =3D SEC_FTR_DEFAU= LT;=0A= >> +#endif /* CONFIG_PPC_BOOK3S_64 */=0A= > Why are you making that book3s specific?=0A= >=0A= > By doing that you then can't use the existing versions of=0A= > setup_barrier_nospec() and cpu_show_spectre_v1/v2().=0A= >=0A= >> @@ -24,6 +26,7 @@ static void enable_barrier_nospec(bool enable)=0A= >> do_barrier_nospec_fixups(enable);=0A= >> }=0A= >> =0A= >> +#ifdef CONFIG_PPC_BOOK3S_64=0A= >> void setup_barrier_nospec(void)=0A= >> {=0A= >> bool enable;=0A= >> @@ -46,6 +49,15 @@ void setup_barrier_nospec(void)=0A= >> if (!no_nospec)=0A= >> enable_barrier_nospec(enable);=0A= >> }=0A= >> +#endif /* CONFIG_PPC_BOOK3S_64 */=0A= >> +=0A= >> +#ifdef CONFIG_PPC_FSL_BOOK3E=0A= >> +void setup_barrier_nospec(void)=0A= >> +{=0A= >> + if (!no_nospec)=0A= >> + enable_barrier_nospec(true);=0A= >> +}=0A= >> +#endif /* CONFIG_PPC_FSL_BOOK3E */=0A= > eg. that is identical to the existing version except for the feature chec= k:=0A= >=0A= > enable =3D security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) &&=0A= > security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR);=0A= >=0A= >=0A= > Both those bits are enabled by default, so you shouldn't need to elide=0A= > that check.=0A= >=0A= > So basically you should be able to use the existing=0A= > setup_barrier_nospec() if you just remove the ifdef around=0A= > powerpc_security_features. Or am I missing something?=0A= =0A= OK. I was under the impression that those bits are not enabled by=0A= default. But obviously I was wrong. In this case I will use the existing=0A= function.=0A= =0A= >=0A= >=0A= >> diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_= 32.c=0A= >> index 7445748..80c1e6e 100644=0A= >> --- a/arch/powerpc/kernel/setup_32.c=0A= >> +++ b/arch/powerpc/kernel/setup_32.c=0A= >> @@ -116,6 +116,11 @@ notrace void __init machine_init(u64 dt_ptr)=0A= >> /* Do some early initialization based on the flat device tree */=0A= >> early_init_devtree(__va(dt_ptr));=0A= >> =0A= >> + /* Apply the speculation barrier fixup */=0A= >> +#ifdef CONFIG_PPC_FSL_BOOK3E=0A= >> + setup_barrier_nospec();=0A= >> +#endif=0A= > This ifdef should be handled in a header with an empty version for the=0A= > #else case.=0A= =0A= OK=0A= =0A= >=0A= >> diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_= 64.c=0A= >> index 7a7ce8a..b2a644a 100644=0A= >> --- a/arch/powerpc/kernel/setup_64.c=0A= >> +++ b/arch/powerpc/kernel/setup_64.c=0A= >> @@ -327,6 +327,12 @@ void __init early_setup(unsigned long dt_ptr)=0A= >> =0A= >> /* Apply all the dynamic patching */=0A= >> apply_feature_fixups();=0A= >> +=0A= >> + /* Apply the speculation barrier fixup */=0A= >> +#ifdef CONFIG_PPC_FSL_BOOK3E=0A= >> + setup_barrier_nospec();=0A= >> +#endif /* CONFIG_PPC_FSL_BOOK3E */=0A= > Can you call it from ppc_md->setup_arch() like the other platforms?=0A= >=0A= > Failing that we could put it in setup_arch() after the call to=0A= > ppc_md->setup_arch(), so we can share it with powernv/pseries.=0A= =0A= The reason for which I did not call it from the ppc_md->setup_arch() was=0A= that from my point of view the mitigation is not specific to the=0A= platform code, but rather to the CPU.=0A= =0A= >=0A= >> diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/featur= e-fixups.c=0A= >> index 2b9173d..bea2b87 100644=0A= >> --- a/arch/powerpc/lib/feature-fixups.c=0A= >> +++ b/arch/powerpc/lib/feature-fixups.c=0A= >> @@ -188,7 +188,40 @@ void do_barrier_nospec_fixups_range(bool enable, vo= id *fixup_start, void *fixup_=0A= >> =0A= >> printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);=0A= >> }=0A= >> +#endif /* CONFIG_PPC_BOOK3S_64 */=0A= >> +=0A= >> +#ifdef CONFIG_PPC_FSL_BOOK3E=0A= >> +void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, voi= d *fixup_end)=0A= >> +{=0A= >> + unsigned int instr[2], *dest;=0A= >> + long *start, *end;=0A= >> + int i;=0A= >> +=0A= >> + start =3D fixup_start;=0A= >> + end =3D fixup_end;=0A= >> +=0A= >> + instr[0] =3D PPC_INST_NOP;=0A= >> + instr[1] =3D PPC_INST_NOP;=0A= >> +=0A= >> + if (enable) {=0A= >> + pr_info("barrier_nospec; using isync; sync as a speculation barrier\n= ");=0A= >> + instr[0] =3D PPC_INST_ISYNC;=0A= >> + instr[1] =3D PPC_INST_SYNC;=0A= >> + }=0A= >> +=0A= >> + for (i =3D 0; start < end; start++, i++) {=0A= >> + dest =3D (void *)start + *start;=0A= >> + pr_devel("patching dest %lx\n", (unsigned long)dest);=0A= >> =0A= >> + patch_instruction(dest, instr[0]);=0A= >> + patch_instruction(dest + 1, instr[1]);=0A= >> + }=0A= >> +=0A= >> + pr_debug("barrier-nospec: patched %d locations\n", i);=0A= >> +}=0A= >> +#endif /* CONFIG_PPC_FSL_BOOK3E */=0A= > It's a bit unfortunate that we end up with two versions of that, which=0A= > are 80% the same. But merging them without ugly ifdefs would require a=0A= > bit more refactoring. So I guess it's OK for now.=0A= >=0A= > cheers=0A= >=0A= Regards,=0A= =0A= Diana=0A= =0A= ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 for NXP PowerPC Book3E 2018-06-11 12:53 [PATCH v2 0/3] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun 2018-06-11 12:53 ` [PATCH v2 1/3] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun 2018-06-11 12:53 ` [PATCH v2 2/3] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E Diana Craciun @ 2018-06-11 12:53 ` Diana Craciun 2018-06-12 2:59 ` Bharat Bhushan 2018-06-29 14:34 ` [PATCH v2 0/3] powerpc/fsl: Speculation barrier " Diana Madalina Craciun 3 siblings, 1 reply; 12+ messages in thread From: Diana Craciun @ 2018-06-11 12:53 UTC (permalink / raw) To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun Signed-off-by: Diana Craciun <diana.craciun@nxp.com> --- arch/powerpc/Kconfig | 2 +- arch/powerpc/kernel/security.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 940c955..a781d60 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -170,7 +170,7 @@ config PPC select GENERIC_CLOCKEVENTS_BROADCAST if SMP select GENERIC_CMOS_UPDATE select GENERIC_CPU_AUTOPROBE - select GENERIC_CPU_VULNERABILITIES if PPC_BOOK3S_64 + select GENERIC_CPU_VULNERABILITIES if PPC_BOOK3S_64 || PPC_FSL_BOOK3E select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW_LEVEL select GENERIC_SMP_IDLE_THREAD diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c index 797c975..aceaadc 100644 --- a/arch/powerpc/kernel/security.c +++ b/arch/powerpc/kernel/security.c @@ -183,3 +183,18 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, c } #endif /* CONFIG_PPC_BOOK3S_64 */ +#ifdef CONFIG_PPC_FSL_BOOK3E +ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, char *buf) +{ + if (barrier_nospec_enabled) + return sprintf(buf, "Mitigation: __user pointer sanitization\n"); + + return sprintf(buf, "Vulnerable\n"); +} + +ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, char *buf) +{ + return sprintf(buf, "Vulnerable\n"); +} +#endif /* CONFIG_PPC_FSL_BOOK3E */ + -- 2.5.5 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* RE: [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 for NXP PowerPC Book3E 2018-06-11 12:53 ` [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 " Diana Craciun @ 2018-06-12 2:59 ` Bharat Bhushan 2018-06-12 10:07 ` Michal Suchánek 0 siblings, 1 reply; 12+ messages in thread From: Bharat Bhushan @ 2018-06-12 2:59 UTC (permalink / raw) To: Diana Madalina Craciun, linuxppc-dev Cc: mpe, oss, Leo Li, Diana Madalina Craciun Hi Diana, > -----Original Message----- > From: Diana Craciun [mailto:diana.craciun@nxp.com] > Sent: Monday, June 11, 2018 6:23 PM > To: linuxppc-dev@lists.ozlabs.org > Cc: mpe@ellerman.id.au; oss@buserror.net; Leo Li <leoyang.li@nxp.com>; > Bharat Bhushan <bharat.bhushan@nxp.com>; Diana Madalina Craciun > <diana.craciun@nxp.com> > Subject: [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 for > NXP PowerPC Book3E Please add some description >=20 > Signed-off-by: Diana Craciun <diana.craciun@nxp.com> > --- > arch/powerpc/Kconfig | 2 +- > arch/powerpc/kernel/security.c | 15 +++++++++++++++ > 2 files changed, 16 insertions(+), 1 deletion(-) >=20 > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index > 940c955..a781d60 100644 > --- a/arch/powerpc/Kconfig > +++ b/arch/powerpc/Kconfig > @@ -170,7 +170,7 @@ config PPC > select GENERIC_CLOCKEVENTS_BROADCAST if SMP > select GENERIC_CMOS_UPDATE > select GENERIC_CPU_AUTOPROBE > - select GENERIC_CPU_VULNERABILITIES if PPC_BOOK3S_64 > + select GENERIC_CPU_VULNERABILITIES if PPC_BOOK3S_64 || > PPC_FSL_BOOK3E > select GENERIC_IRQ_SHOW > select GENERIC_IRQ_SHOW_LEVEL > select GENERIC_SMP_IDLE_THREAD > diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/securit= y.c > index 797c975..aceaadc 100644 > --- a/arch/powerpc/kernel/security.c > +++ b/arch/powerpc/kernel/security.c > @@ -183,3 +183,18 @@ ssize_t cpu_show_spectre_v2(struct device *dev, > struct device_attribute *attr, c } #endif /* CONFIG_PPC_BOOK3S_64 */ >=20 > +#ifdef CONFIG_PPC_FSL_BOOK3E > +ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute > +*attr, char *buf) { > + if (barrier_nospec_enabled) > + return sprintf(buf, "Mitigation: __user pointer sanitization\n"); > + > + return sprintf(buf, "Vulnerable\n"); > +} > + > +ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute > +*attr, char *buf) { > + return sprintf(buf, "Vulnerable\n"); > +} > +#endif /* CONFIG_PPC_FSL_BOOK3E */ > + > -- > 2.5.5 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 for NXP PowerPC Book3E 2018-06-12 2:59 ` Bharat Bhushan @ 2018-06-12 10:07 ` Michal Suchánek 2018-07-03 7:26 ` Michael Ellerman 0 siblings, 1 reply; 12+ messages in thread From: Michal Suchánek @ 2018-06-12 10:07 UTC (permalink / raw) To: Bharat Bhushan; +Cc: Diana Madalina Craciun, linuxppc-dev, oss, Leo Li On Tue, 12 Jun 2018 02:59:11 +0000 Bharat Bhushan <bharat.bhushan@nxp.com> wrote: > Hi Diana, > > > -----Original Message----- > > From: Diana Craciun [mailto:diana.craciun@nxp.com] > > Sent: Monday, June 11, 2018 6:23 PM > > To: linuxppc-dev@lists.ozlabs.org > > Cc: mpe@ellerman.id.au; oss@buserror.net; Leo Li > > <leoyang.li@nxp.com>; Bharat Bhushan <bharat.bhushan@nxp.com>; > > Diana Madalina Craciun <diana.craciun@nxp.com> > > Subject: [PATCH v2 3/3] powerpc/fsl: Implement > > cpu_show_spectre_v1/v2 for NXP PowerPC Book3E > > Please add some description To me the subject is self-explanatory. It implements a kernel interface that was already described elsewhere. What are you missing here? Thanks Michal > > > > > Signed-off-by: Diana Craciun <diana.craciun@nxp.com> > > --- > > arch/powerpc/Kconfig | 2 +- > > arch/powerpc/kernel/security.c | 15 +++++++++++++++ > > 2 files changed, 16 insertions(+), 1 deletion(-) > > > > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index > > 940c955..a781d60 100644 > > --- a/arch/powerpc/Kconfig > > +++ b/arch/powerpc/Kconfig > > @@ -170,7 +170,7 @@ config PPC > > select GENERIC_CLOCKEVENTS_BROADCAST if SMP > > select GENERIC_CMOS_UPDATE > > select GENERIC_CPU_AUTOPROBE > > - select GENERIC_CPU_VULNERABILITIES if PPC_BOOK3S_64 > > + select GENERIC_CPU_VULNERABILITIES if PPC_BOOK3S_64 > > || PPC_FSL_BOOK3E > > select GENERIC_IRQ_SHOW > > select GENERIC_IRQ_SHOW_LEVEL > > select GENERIC_SMP_IDLE_THREAD > > diff --git a/arch/powerpc/kernel/security.c > > b/arch/powerpc/kernel/security.c index 797c975..aceaadc 100644 > > --- a/arch/powerpc/kernel/security.c > > +++ b/arch/powerpc/kernel/security.c > > @@ -183,3 +183,18 @@ ssize_t cpu_show_spectre_v2(struct device *dev, > > struct device_attribute *attr, c } #endif /* CONFIG_PPC_BOOK3S_64 > > */ > > > > +#ifdef CONFIG_PPC_FSL_BOOK3E > > +ssize_t cpu_show_spectre_v1(struct device *dev, struct > > device_attribute +*attr, char *buf) { > > + if (barrier_nospec_enabled) > > + return sprintf(buf, "Mitigation: __user pointer > > sanitization\n"); + > > + return sprintf(buf, "Vulnerable\n"); > > +} > > + > > +ssize_t cpu_show_spectre_v2(struct device *dev, struct > > device_attribute +*attr, char *buf) { > > + return sprintf(buf, "Vulnerable\n"); > > +} > > +#endif /* CONFIG_PPC_FSL_BOOK3E */ > > + > > -- > > 2.5.5 > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 for NXP PowerPC Book3E 2018-06-12 10:07 ` Michal Suchánek @ 2018-07-03 7:26 ` Michael Ellerman 2018-07-05 13:26 ` Diana Madalina Craciun 0 siblings, 1 reply; 12+ messages in thread From: Michael Ellerman @ 2018-07-03 7:26 UTC (permalink / raw) To: Michal Suchánek, Bharat Bhushan Cc: Diana Madalina Craciun, oss, linuxppc-dev, Leo Li Michal Such=C3=A1nek <msuchanek@suse.de> writes: > On Tue, 12 Jun 2018 02:59:11 +0000 > Bharat Bhushan <bharat.bhushan@nxp.com> wrote: > >> Hi Diana, >>=20 >> > -----Original Message----- >> > From: Diana Craciun [mailto:diana.craciun@nxp.com] >> > Sent: Monday, June 11, 2018 6:23 PM >> > To: linuxppc-dev@lists.ozlabs.org >> > Cc: mpe@ellerman.id.au; oss@buserror.net; Leo Li >> > <leoyang.li@nxp.com>; Bharat Bhushan <bharat.bhushan@nxp.com>; >> > Diana Madalina Craciun <diana.craciun@nxp.com> >> > Subject: [PATCH v2 3/3] powerpc/fsl: Implement >> > cpu_show_spectre_v1/v2 for NXP PowerPC Book3E=20=20 >>=20 >> Please add some description > > To me the subject is self-explanatory. It implements a kernel interface > that was already described elsewhere. > > What are you missing here? It should at least explain why it's reimplementing a function that already exists for powerpc. ie. Why can't the existing version be used? cheers ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 for NXP PowerPC Book3E 2018-07-03 7:26 ` Michael Ellerman @ 2018-07-05 13:26 ` Diana Madalina Craciun 0 siblings, 0 replies; 12+ messages in thread From: Diana Madalina Craciun @ 2018-07-05 13:26 UTC (permalink / raw) To: Michael Ellerman, Michal Suchánek, Bharat Bhushan Cc: oss, linuxppc-dev, Leo Li On 07/03/2018 10:26 AM, Michael Ellerman wrote:=0A= > Michal Such=E1nek <msuchanek@suse.de> writes:=0A= >> On Tue, 12 Jun 2018 02:59:11 +0000=0A= >> Bharat Bhushan <bharat.bhushan@nxp.com> wrote:=0A= >>=0A= >>> Hi Diana,=0A= >>>=0A= >>>> -----Original Message-----=0A= >>>> From: Diana Craciun [mailto:diana.craciun@nxp.com]=0A= >>>> Sent: Monday, June 11, 2018 6:23 PM=0A= >>>> To: linuxppc-dev@lists.ozlabs.org=0A= >>>> Cc: mpe@ellerman.id.au; oss@buserror.net; Leo Li=0A= >>>> <leoyang.li@nxp.com>; Bharat Bhushan <bharat.bhushan@nxp.com>;=0A= >>>> Diana Madalina Craciun <diana.craciun@nxp.com>=0A= >>>> Subject: [PATCH v2 3/3] powerpc/fsl: Implement=0A= >>>> cpu_show_spectre_v1/v2 for NXP PowerPC Book3E =0A= >>> Please add some description=0A= >> To me the subject is self-explanatory. It implements a kernel interface= =0A= >> that was already described elsewhere.=0A= >>=0A= >> What are you missing here?=0A= > It should at least explain why it's reimplementing a function that=0A= > already exists for powerpc. ie. Why can't the existing version be used?= =0A= >=0A= > cheers=0A= >=0A= OK. I think I can use the cpu_show_spectre_v1 and for now I can use=0A= cpu_show_spectre_v2 as well (the patches are under development for=0A= mitigating Spectre v2). But I cannot use cpu_show_meltdown because it=0A= uses references to variables that are specific to BOOK3S_64. But I do=0A= not need a special implementation for cpu_show_meltdown because our=0A= platform is not vulnerable to Meltdown. So, I will just ifdef the=0A= cpu_show_meltdown and leave the default implementation.=0A= =0A= Diana=0A= =0A= =0A= =0A= =0A= ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 0/3] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E 2018-06-11 12:53 [PATCH v2 0/3] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun ` (2 preceding siblings ...) 2018-06-11 12:53 ` [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 " Diana Craciun @ 2018-06-29 14:34 ` Diana Madalina Craciun 3 siblings, 0 replies; 12+ messages in thread From: Diana Madalina Craciun @ 2018-06-29 14:34 UTC (permalink / raw) To: linuxppc-dev; +Cc: mpe, oss, Leo Li, Bharat Bhushan Hi,=0A= =0A= Should I rebase the series on top of the latest kernel?=0A= =0A= Diana=0A= =0A= On 6/11/2018 3:53 PM, Diana Craciun wrote:=0A= > Implement barrier_nospec for NXP PowerPC Book3E processors. =0A= >=0A= > Diana Craciun (3):=0A= > Disable the speculation barrier from the command line=0A= > Add barrier_nospec implementation for NXP PowerPC Book3E=0A= > Implement cpu_show_spectre_v1/v2 for NXP PowerPC Book3E=0A= >=0A= > arch/powerpc/Kconfig | 2 +-=0A= > arch/powerpc/include/asm/barrier.h | 10 +++++++++=0A= > arch/powerpc/include/asm/setup.h | 2 +-=0A= > arch/powerpc/kernel/Makefile | 2 +-=0A= > arch/powerpc/kernel/module.c | 5 +++--=0A= > arch/powerpc/kernel/security.c | 42 ++++++++++++++++++++++++++++++++= +++++-=0A= > arch/powerpc/kernel/setup_32.c | 5 +++++=0A= > arch/powerpc/kernel/setup_64.c | 6 ++++++=0A= > arch/powerpc/kernel/vmlinux.lds.S | 4 +++-=0A= > arch/powerpc/lib/feature-fixups.c | 35 ++++++++++++++++++++++++++++++-= =0A= > 10 files changed, 105 insertions(+), 8 deletions(-)=0A= >=0A= > --=0A= > History:=0A= >=0A= > v1 --> v2=0A= > - added implementation for cpu_show_spectre_x functions=0A= > - the mitigation is no longer enabled through device tree options=0A= > 2.5.5=0A= >=0A= >=0A= =0A= ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2018-07-05 13:26 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-06-11 12:53 [PATCH v2 0/3] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun 2018-06-11 12:53 ` [PATCH v2 1/3] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun 2018-07-03 7:25 ` Michael Ellerman 2018-06-11 12:53 ` [PATCH v2 2/3] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E Diana Craciun 2018-07-03 7:26 ` Michael Ellerman 2018-07-05 13:21 ` Diana Madalina Craciun 2018-06-11 12:53 ` [PATCH v2 3/3] powerpc/fsl: Implement cpu_show_spectre_v1/v2 " Diana Craciun 2018-06-12 2:59 ` Bharat Bhushan 2018-06-12 10:07 ` Michal Suchánek 2018-07-03 7:26 ` Michael Ellerman 2018-07-05 13:26 ` Diana Madalina Craciun 2018-06-29 14:34 ` [PATCH v2 0/3] powerpc/fsl: Speculation barrier " Diana Madalina Craciun
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.