On Tue, May 22, 2018 at 04:06:38PM +0100, Marc Zyngier wrote: > As for Spectre variant-2, we rely on SMCCC 1.1 to provide the > discovery mechanism for detecting the SSBD mitigation. > > A new capability is also allocated for that purpose, and a > config option. > > Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> Reviewed-by: Mark Rutland <mark.rutland@xxxxxxx> [...] > +static void do_ssbd(bool state) > +{ > + switch (psci_ops.conduit) { > + case PSCI_CONDUIT_HVC: > + arm_smccc_1_1_hvc(ARM_SMCCC_ARCH_WORKAROUND_2, state, NULL); > + break; > + > + case PSCI_CONDUIT_SMC: > + arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2, state, NULL); > + break; > + > + default: > + WARN_ON_ONCE(1); > + break; > + } > +} > + > +static bool has_ssbd_mitigation(const struct arm64_cpu_capabilities *entry, > + int scope) > +{ > + struct arm_smccc_res res; > + bool supported = true; > + > + WARN_ON(scope != SCOPE_LOCAL_CPU || preemptible()); > + > + if (psci_ops.smccc_version == SMCCC_VERSION_1_0) > + return false; > + > + /* > + * The probe function return value is either negative > + * (unsupported or mitigated), positive (unaffected), or zero > + * (requires mitigation). We only need to do anything in the > + * last case. > + */ > + switch (psci_ops.conduit) { > + case PSCI_CONDUIT_HVC: > + arm_smccc_1_1_hvc(ARM_SMCCC_ARCH_FEATURES_FUNC_ID, > + ARM_SMCCC_ARCH_WORKAROUND_2, &res); > + if ((int)res.a0 != 0) > + supported = false; > + break; > + > + case PSCI_CONDUIT_SMC: > + arm_smccc_1_1_smc(ARM_SMCCC_ARCH_FEATURES_FUNC_ID, > + ARM_SMCCC_ARCH_WORKAROUND_2, &res); > + if ((int)res.a0 != 0) > + supported = false; > + break; Once this is merged, I'll rebase my SMCCCC conduit cleanup atop. Mark. _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm