Date: Thu, 6 Feb 2014 11:00:01 GMT From: "Simon Matter" <simon.matter@invoca.ch> To: freebsd-amd64@FreeBSD.org Subject: Re: amd64/186061: FreeBSD 10 crashes as KVM guest on GNU/Linux on AMD family 10h CPUs Message-ID: <201402061100.s16B01pU028961@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR amd64/186061; it has been noted by GNATS. From: "Simon Matter" <simon.matter@invoca.ch> To: bug-followup@FreeBSD.org Cc: simon.matter@invoca.ch Subject: Re: amd64/186061: FreeBSD 10 crashes as KVM guest on GNU/Linux on AMD family 10h CPUs Date: Thu, 6 Feb 2014 11:46:41 +0100 ------=_20140206114641_95473 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Hi, After thinking about it again it seems the proposed solution may not be enough. At least KVM allows to migrate guests from an Intel to an AMD processor. That means in case of running as a vm guest, it's required to always enable "AMD Erratum 383" workaround. Otherwise, after migration to an affected AMD Family 10h processor, the guest could triggered AMD Erratum 383. I've tried to implement this and attached patch fixes the problem for me. Would me nice if someone with more experience than me could have a look at it. Thanks, Simon ------=_20140206114641_95473 Content-Type: text/x-diff; name="vm-erratum383.patch" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="vm-erratum383.patch" --- /usr/src/sys/x86/x86/mca.c.orig 2014-01-16 21:35:03.000000000 +0100 +++ /usr/src/sys/x86/x86/mca.c 2014-02-05 22:15:53.109619475 +0100 @@ -720,8 +720,8 @@ * parity (L1TP) errors is disabled, enable the recommended workaround * for Erratum 383. */ - if (cpu_vendor_id == CPU_VENDOR_AMD && - CPUID_TO_FAMILY(cpu_id) == 0x10 && amd10h_L1TP) + if (vm_guest != VM_GUEST_NO || (cpu_vendor_id == CPU_VENDOR_AMD && + CPUID_TO_FAMILY(cpu_id) == 0x10 && amd10h_L1TP)) workaround_erratum383 = 1; mca_banks = mcg_cap & MCG_CAP_COUNT; --- /usr/src/sys/i386/i386/pmap.c.orig 2014-01-16 21:33:36.000000000 +0100 +++ /usr/src/sys/i386/i386/pmap.c 2014-02-05 22:25:28.395821316 +0100 @@ -752,12 +752,12 @@ pv_entry_high_water = 9 * (pv_entry_max / 10); /* - * If the kernel is running in a virtual machine on an AMD Family 10h - * processor, then it must assume that MCA is enabled by the virtual - * machine monitor. + * If the kernel is running in a virtual machine on any processor + * family, then it must assume that MCA is enabled by the virtual + * machine monitor and the vm may migrate to an AMD Family 10h + * processor. */ - if (vm_guest == VM_GUEST_VM && cpu_vendor_id == CPU_VENDOR_AMD && - CPUID_TO_FAMILY(cpu_id) == 0x10) + if (vm_guest != VM_GUEST_NO) workaround_erratum383 = 1; /* --- /usr/src/sys/amd64/amd64/pmap.c.orig 2014-01-16 21:33:04.000000000 +0100 +++ /usr/src/sys/amd64/amd64/pmap.c 2014-02-05 22:28:25.814349113 +0100 @@ -1005,12 +1005,12 @@ } /* - * If the kernel is running in a virtual machine on an AMD Family 10h - * processor, then it must assume that MCA is enabled by the virtual - * machine monitor. + * If the kernel is running in a virtual machine on any processor + * family, then it must assume that MCA is enabled by the virtual + * machine monitor and the vm may migrate to an AMD Family 10h + * processor. */ - if (vm_guest == VM_GUEST_VM && cpu_vendor_id == CPU_VENDOR_AMD && - CPUID_TO_FAMILY(cpu_id) == 0x10) + if (vm_guest != VM_GUEST_NO) workaround_erratum383 = 1; /* ------=_20140206114641_95473--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402061100.s16B01pU028961>