diff options
Diffstat (limited to 'xen/arch/x86/setup.c')
-rw-r--r-- | xen/arch/x86/setup.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index a872ae98e5..7a338d6d01 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -57,6 +57,10 @@ integer_param("maxcpus", max_cpus); static bool_t __initdata opt_watchdog; boolean_param("watchdog", opt_watchdog); +/* smep: Enable/disable Supervisor Mode Execution Protection (default on). */ +static bool_t __initdata disable_smep; +invbool_param("smep", disable_smep); + /* **** Linux config option: propagated to domain0. */ /* "acpi=off": Sisables both ACPI table parsing and interpreter. */ /* "acpi=force": Override the disable blacklist. */ @@ -1200,11 +1204,17 @@ void __init __start_xen(unsigned long mbi_p) arch_init_memory(); identify_cpu(&boot_cpu_data); + if ( cpu_has_fxsr ) set_in_cr4(X86_CR4_OSFXSR); if ( cpu_has_xmm ) set_in_cr4(X86_CR4_OSXMMEXCPT); + if ( disable_smep ) + setup_clear_cpu_cap(X86_FEATURE_SMEP); + if ( cpu_has_smep ) + set_in_cr4(X86_CR4_SMEP); + local_irq_enable(); #ifdef CONFIG_X86_64 |