|
|
@@ -805,8 +805,29 @@ early_initcall(disable_hardlockup_detector);
|
|
|
#ifdef CONFIG_PPC_BOOK3S_64
|
|
|
static enum l1d_flush_type enabled_flush_types;
|
|
|
static void *l1d_flush_fallback_area;
|
|
|
+static bool no_rfi_flush;
|
|
|
bool rfi_flush;
|
|
|
|
|
|
+static int __init handle_no_rfi_flush(char *p)
|
|
|
+{
|
|
|
+ pr_info("rfi-flush: disabled on command line.");
|
|
|
+ no_rfi_flush = true;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+early_param("no_rfi_flush", handle_no_rfi_flush);
|
|
|
+
|
|
|
+/*
|
|
|
+ * The RFI flush is not KPTI, but because users will see doco that says to use
|
|
|
+ * nopti we hijack that option here to also disable the RFI flush.
|
|
|
+ */
|
|
|
+static int __init handle_no_pti(char *p)
|
|
|
+{
|
|
|
+ pr_info("rfi-flush: disabling due to 'nopti' on command line.\n");
|
|
|
+ handle_no_rfi_flush(NULL);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+early_param("nopti", handle_no_pti);
|
|
|
+
|
|
|
static void do_nothing(void *unused)
|
|
|
{
|
|
|
/*
|
|
|
@@ -877,6 +898,7 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
|
|
|
|
|
|
enabled_flush_types = types;
|
|
|
|
|
|
- rfi_flush_enable(enable);
|
|
|
+ if (!no_rfi_flush)
|
|
|
+ rfi_flush_enable(enable);
|
|
|
}
|
|
|
#endif /* CONFIG_PPC_BOOK3S_64 */
|