Print this page
3832 AMD E721 workaround panics on KVM
Reviewed by: Marcel Telka <marcel@telka.sk>

*** 26,35 **** --- 26,36 ---- * Copyright (c) 2010, Intel Corporation. * All rights reserved. */ /* * Copyright (c) 2012, Joyent, Inc. All rights reserved. + * Copyright 2013 Nexenta Systems, Inc. All rights reserved. */ #include <sys/types.h> #include <sys/thread.h> #include <sys/cpuvar.h>
*** 75,84 **** --- 76,86 ---- #include <sys/sysmacros.h> #if defined(__xpv) #include <sys/hypervisor.h> #endif #include <sys/cpu_module.h> + #include <sys/ontrap.h> struct cpu cpus[1]; /* CPU data */ struct cpu *cpu[NCPU] = {&cpus[0]}; /* pointers to all CPUs */ struct cpu *cpu_free_list; /* list for released CPUs */ cpu_core_t cpu_core[NCPU]; /* cpu_core structures */
*** 1184,1194 **** missing += do_erratum_298(cpu); if (cpuid_opteron_erratum(cpu, 721) > 0) { #if defined(OPTERON_ERRATUM_721) ! wrmsr(MSR_AMD_DE_CFG, rdmsr(MSR_AMD_DE_CFG) | AMD_DE_CFG_E721); opteron_erratum_721++; #else workaround_warning(cpu, 721); missing++; #endif --- 1186,1202 ---- missing += do_erratum_298(cpu); if (cpuid_opteron_erratum(cpu, 721) > 0) { #if defined(OPTERON_ERRATUM_721) ! on_trap_data_t otd; ! ! if (!on_trap(&otd, OT_DATA_ACCESS)) ! wrmsr(MSR_AMD_DE_CFG, ! rdmsr(MSR_AMD_DE_CFG) | AMD_DE_CFG_E721); ! no_trap(); ! opteron_erratum_721++; #else workaround_warning(cpu, 721); missing++; #endif