[PATCH v2 3/4] rfi-flush: Allow pseries to force init of fallback flush area

Mauricio Faria de Oliveira mauricfo at linux.vnet.ibm.com
Tue Mar 13 10:02:57 AEDT 2018


This ensures the fallback flush area is always allocated at boot time
on the pseries platform, so PowerVM migration to an unpatched system
can rely on the fallback flush method.

Signed-off-by: Mauricio Faria de Oliveira <mauricfo at linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/setup.h       | 2 +-
 arch/powerpc/kernel/setup_64.c         | 5 +++--
 arch/powerpc/platforms/powernv/setup.c | 3 ++-
 arch/powerpc/platforms/pseries/setup.c | 4 ++--
 4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/include/asm/setup.h b/arch/powerpc/include/asm/setup.h
index bbcdf929..efdaf10 100644
--- a/arch/powerpc/include/asm/setup.h
+++ b/arch/powerpc/include/asm/setup.h
@@ -49,7 +49,7 @@ enum l1d_flush_type {
 	L1D_FLUSH_MTTRIG	= 0x8,
 };
 
-void setup_rfi_flush(enum l1d_flush_type, bool enable);
+void setup_rfi_flush(enum l1d_flush_type, bool enable, bool force_init_fallback);
 void do_rfi_flush_fixups(enum l1d_flush_type types);
 
 #endif /* !__ASSEMBLY__ */
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index d60e2f7..cb886a8 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -881,12 +881,13 @@ static void init_fallback_flush(void)
 	}
 }
 
-void setup_rfi_flush(enum l1d_flush_type types, bool enable)
+void setup_rfi_flush(enum l1d_flush_type types, bool enable, bool force_init_fallback)
 {
 	if (types & L1D_FLUSH_FALLBACK) {
 		pr_info("rfi-flush: Using fallback displacement flush\n");
 		init_fallback_flush();
-	}
+	} else if (force_init_fallback)
+		init_fallback_flush();
 
 	if (types & L1D_FLUSH_ORI)
 		pr_info("rfi-flush: Using ori type flush\n");
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
index 092715b..a4ab8f6 100644
--- a/arch/powerpc/platforms/powernv/setup.c
+++ b/arch/powerpc/platforms/powernv/setup.c
@@ -46,6 +46,7 @@ static void pnv_setup_rfi_flush(void)
 	struct device_node *np, *fw_features;
 	enum l1d_flush_type type;
 	int enable;
+	bool force_init_fallback = false;
 
 	/* Default to fallback in case fw-features are not available */
 	type = L1D_FLUSH_FALLBACK;
@@ -88,7 +89,7 @@ static void pnv_setup_rfi_flush(void)
 		of_node_put(fw_features);
 	}
 
-	setup_rfi_flush(type, enable > 0);
+	setup_rfi_flush(type, enable > 0, force_init_fallback);
 }
 
 static void __init pnv_setup_arch(void)
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 1a52762..2f82bbb 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -463,7 +463,7 @@ static void pseries_setup_rfi_flush(void)
 {
 	struct h_cpu_char_result result;
 	enum l1d_flush_type types;
-	bool enable;
+	bool enable, force_init_fallback = true;
 	long rc;
 
 	/* Enable by default */
@@ -490,7 +490,7 @@ static void pseries_setup_rfi_flush(void)
 		types = L1D_FLUSH_FALLBACK;
 	}
 
-	setup_rfi_flush(types, enable);
+	setup_rfi_flush(types, enable, force_init_fallback);
 }
 
 #ifdef CONFIG_PCI_IOV
-- 
2.7.4



More information about the Linuxppc-dev mailing list