|
@@ -501,30 +501,27 @@ void pseries_setup_rfi_flush(void)
|
|
|
bool enable;
|
|
|
long rc;
|
|
|
|
|
|
- /* Enable by default */
|
|
|
- enable = true;
|
|
|
- types = L1D_FLUSH_FALLBACK;
|
|
|
-
|
|
|
rc = plpar_get_cpu_characteristics(&result);
|
|
|
- if (rc == H_SUCCESS) {
|
|
|
+ if (rc == H_SUCCESS)
|
|
|
init_cpu_char_feature_flags(&result);
|
|
|
|
|
|
- if (result.character & H_CPU_CHAR_L1D_FLUSH_TRIG2)
|
|
|
- types |= L1D_FLUSH_MTTRIG;
|
|
|
- if (result.character & H_CPU_CHAR_L1D_FLUSH_ORI30)
|
|
|
- types |= L1D_FLUSH_ORI;
|
|
|
-
|
|
|
- if ((!(result.behaviour & H_CPU_BEHAV_L1D_FLUSH_PR)) ||
|
|
|
- (!(result.behaviour & H_CPU_BEHAV_FAVOUR_SECURITY)))
|
|
|
- enable = false;
|
|
|
- }
|
|
|
-
|
|
|
/*
|
|
|
* We're the guest so this doesn't apply to us, clear it to simplify
|
|
|
* handling of it elsewhere.
|
|
|
*/
|
|
|
security_ftr_clear(SEC_FTR_L1D_FLUSH_HV);
|
|
|
|
|
|
+ types = L1D_FLUSH_FALLBACK;
|
|
|
+
|
|
|
+ if (security_ftr_enabled(SEC_FTR_L1D_FLUSH_TRIG2))
|
|
|
+ types |= L1D_FLUSH_MTTRIG;
|
|
|
+
|
|
|
+ if (security_ftr_enabled(SEC_FTR_L1D_FLUSH_ORI30))
|
|
|
+ types |= L1D_FLUSH_ORI;
|
|
|
+
|
|
|
+ enable = security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) && \
|
|
|
+ security_ftr_enabled(SEC_FTR_L1D_FLUSH_PR);
|
|
|
+
|
|
|
setup_rfi_flush(types, enable);
|
|
|
}
|
|
|
|