amd64/186061: FreeBSD 10 crashes as KVM guest on GNU/Linux on AMD family 10h CPUs

John Baldwin jhb at freebsd.org
Thu Feb 6 19:22:13 UTC 2014


On Thursday, February 06, 2014 6:00:01 am Simon Matter wrote:
> The following reply was made to PR amd64/186061; it has been noted by GNATS.
> 
> From: "Simon Matter" <simon.matter at invoca.ch>
> To: bug-followup at FreeBSD.org
> Cc: simon.matter at 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.

I suspect you do not need the mca.c change as I doubt any hypervisors are 
going to pass machine check handling on to guests.  Presumably they will 
handle that in the host OS instead.

>  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--
>  
>  
> _______________________________________________
> freebsd-amd64 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-amd64
> To unsubscribe, send any mail to "freebsd-amd64-unsubscribe at freebsd.org"
> 

-- 
John Baldwin


More information about the freebsd-amd64 mailing list