|
|
@@ -347,6 +347,29 @@ void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_
|
|
|
|
|
|
printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
|
|
|
}
|
|
|
+
|
|
|
+static void patch_btb_flush_section(long *curr)
|
|
|
+{
|
|
|
+ unsigned int *start, *end;
|
|
|
+
|
|
|
+ start = (void *)curr + *curr;
|
|
|
+ end = (void *)curr + *(curr + 1);
|
|
|
+ for (; start < end; start++) {
|
|
|
+ pr_devel("patching dest %lx\n", (unsigned long)start);
|
|
|
+ patch_instruction(start, PPC_INST_NOP);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void do_btb_flush_fixups(void)
|
|
|
+{
|
|
|
+ long *start, *end;
|
|
|
+
|
|
|
+ start = PTRRELOC(&__start__btb_flush_fixup);
|
|
|
+ end = PTRRELOC(&__stop__btb_flush_fixup);
|
|
|
+
|
|
|
+ for (; start < end; start += 2)
|
|
|
+ patch_btb_flush_section(start);
|
|
|
+}
|
|
|
#endif /* CONFIG_PPC_FSL_BOOK3E */
|
|
|
|
|
|
void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)
|