static __init void xen_init_cpuid_mask(void) { unsigned int ax, bx, cx, dx; cpuid_leaf1_edx_mask = ~((1 << X86_FEATURE_MCE) | /* disable MCE */ (1 << X86_FEATURE_MCA) | /* disable MCA */ (1 << X86_FEATURE_ACC)); /* thermal monitoring */ if (!xen_initial_domain()) cpuid_leaf1_edx_mask &= ~((1 << X86_FEATURE_APIC) | /* disable local APIC */ (1 << X86_FEATURE_ACPI)); /* disable ACPI */ ax = 1; cx = 0; xen_cpuid(&ax, &bx, &cx, &dx); /* cpuid claims we support xsave; try enabling it to see what happens */ if (cx & (1 << (X86_FEATURE_XSAVE % 32))) { unsigned long cr4; set_in_cr4(X86_CR4_OSXSAVE); cr4 = read_cr4(); if ((cr4 & X86_CR4_OSXSAVE) == 0) cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); clear_in_cr4(X86_CR4_OSXSAVE); } }
void __init stop_mce(void) { old_cr4 = read_cr4(); clear_in_cr4(X86_CR4_MCE); }
static void cr4_pce_disable(void *arg) { clear_in_cr4(X86_CR4_PCE); }