Recent MFC to 7 causes crash on VMware ESXi

John Baldwin jhb at freebsd.org
Wed Feb 10 13:54:04 UTC 2010


On Tuesday 09 February 2010 7:22:50 pm Tom McLaughlin wrote:
> John Baldwin wrote, On 02/09/2010 05:23 PM:
> > On Tuesday 09 February 2010 5:17:32 pm Tom McLaughlin wrote:
> >> John Baldwin wrote, On 02/09/2010 01:52 PM:
> >>> On Monday 08 February 2010 9:49:00 am John Baldwin wrote:
> >>>> On Saturday 06 February 2010 4:47:16 pm Tom McLaughlin wrote:
> >>>>> John Baldwin wrote, On 02/05/2010 08:27 AM:
> >>>>>> On Thursday 04 February 2010 10:00:55 pm Tom McLaughlin wrote:
> >>>>>>> Hi all, a recent MFC to 7-STABLE has started to cause issues for my 
> > VMs
> >>>>>>> on VMware ESXi 3.5u4.  After loading the mpt driver for the LSI disk
> >>>>>>> controller the VM just shuts off.  The workaround is to change the 
> > disk
> >>>>>>> controller to the BusLogic type.  Still, it used to work up until 
last
> >>>>>>> week.  The change was made around January 26th and based on the 
> > commits
> >>>>>>> that day I'm guessing it's either r203047 or r203073
> >>>>>>>
> >>>>>>> I have the same issue with both amd64 and i386 VMs.  This affects 
HEAD
> >>>>>>> and 8-STABLE as well and first affected HEAD over the summer.  (I 
just
> >>>>>>> worked around it and went about my business at the time. :-/)  I've
> >>>>>>> attached a dmesg from a kernel before the problem and one from after 
> > it
> >>>>>>> started.
> >>>>>>
> >>>>>> What if you set 'hw.clfush_disable=1' from the loader?
> >>>>>>
> >>>>>
> >>>>> Yes, that corrected it on all my VMs.  I've talked to people on ESXi 4
> >>>>> and they do not see the problem.  I have yet to try 3.5u5 to see if 
this
> >>>>> is a non-issue.  3.5 will be supported for awhile longer from VMware.
> >>>>> I'm going to try upgrading the box during the week.
> >>>>
> >>>> I believe folks had to do this on HEAD/8.x as well.  Perhaps we can 
> >>>> automatically disable clflush if we are executing under VMware or Xen:
> >>>
> >>> Tom, were you able to verify that this patch fixes the problem for you
> >>> without requiring you to set the hw.clflush_disable tunable?
> >>>
> >>
> >> John, I'm getting the following build error on all branches:
> >>
> >> /usr/src/sys/amd64/amd64/initcpu.c: In function 'initializecpucache':
> >> /usr/src/sys/amd64/amd64/initcpu.c:184: error: 'vm_guest' undeclared
> >> (first use in this function)
> >> /usr/src/sys/amd64/amd64/initcpu.c:184: error: (Each undeclared
> >> identifier is reported only once
> >> /usr/src/sys/amd64/amd64/initcpu.c:184: error: for each function it
> >> appears in.)
> > 
> > Oh foo.  Can you add 'extern int vm_guest;' to that file near the top?
> 
> Adding that to the top fixed the build on 8.x and HEAD.  Both of those
> are also now working just fine.  However, 7.x still does not build.

Ok, I will work on a more formal 7.x patch.

> cc -c -O2 -frename-registers -pipe -fno-strict-aliasing  -std=c99 -g
> -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes
> -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wundef
> -Wno-pointer-sign -fformat-extensions -nostdinc  -I. -I/usr/src/sys
> -I/usr/src/sys/contrib/altq -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS
> -include opt_global.h -fno-common -finline-limit=8000 --param
> inline-unit-growth=100 --param large-function-growth=1000
> -mcmodel=kernel -mno-red-zone  -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx
> -mno-3dnow  -msoft-float -fno-asynchronous-unwind-tables -ffreestanding
> -Werror  vers.c
> linking kernel.debug
> initcpu.o(.text+0x272): In function `initializecpucache':
> /usr/src/sys/amd64/amd64/initcpu.c:186: undefined reference to `vm_guest'
> *** Error code 1
> 
> 
> > 
> >> *** Error code 1
> >>
> >>
> >> tom
> >>
> >>>> Index: amd64/amd64/initcpu.c
> >>>> ===================================================================
> >>>> --- amd64/amd64/initcpu.c	(revision 203430)
> >>>> +++ amd64/amd64/initcpu.c	(working copy)
> >>>> @@ -177,17 +177,16 @@
> >>>>  	if ((cpu_feature & CPUID_CLFSH) != 0)
> >>>>  		cpu_clflush_line_size = ((cpu_procinfo >> 8) & 0xff) * 8;
> >>>>  	/*
> >>>> -	 * XXXKIB: (temporary) hack to work around traps generated when
> >>>> -	 * CLFLUSHing APIC registers window.
> >>>> +	 * XXXKIB: (temporary) hack to work around traps generated
> >>>> +	 * when CLFLUSHing APIC registers window under virtualization
> >>>> +	 * environments.
> >>>>  	 */
> >>>>  	TUNABLE_INT_FETCH("hw.clflush_disable", &hw_clflush_disable);
> >>>> -	if (cpu_vendor_id == CPU_VENDOR_INTEL && !(cpu_feature & CPUID_SS) &&
> >>>> -	    hw_clflush_disable == -1)
> >>>> +	if (vm_guest != 0 /* VM_GUEST_NO */ && hw_clflush_disable == -1)
> >>>>  		cpu_feature &= ~CPUID_CLFSH;
> >>>>  	/*
> >>>>  	 * Allow to disable CLFLUSH feature manually by
> >>>> -	 * hw.clflush_disable tunable.  This may help Xen guest on some AMD
> >>>> -	 * CPUs.
> >>>> +	 * hw.clflush_disable tunable.
> >>>>  	 */
> >>>>  	if (hw_clflush_disable == 1)
> >>>>  		cpu_feature &= ~CPUID_CLFSH;
> >>>> Index: i386/i386/initcpu.c
> >>>> ===================================================================
> >>>> --- i386/i386/initcpu.c	(revision 203430)
> >>>> +++ i386/i386/initcpu.c	(working copy)
> >>>> @@ -724,17 +724,16 @@
> >>>>  	if ((cpu_feature & CPUID_CLFSH) != 0)
> >>>>  		cpu_clflush_line_size = ((cpu_procinfo >> 8) & 0xff) * 8;
> >>>>  	/*
> >>>> -	 * XXXKIB: (temporary) hack to work around traps generated when
> >>>> -	 * CLFLUSHing APIC registers window.
> >>>> +	 * XXXKIB: (temporary) hack to work around traps generated
> >>>> +	 * when CLFLUSHing APIC registers window under virtualization
> >>>> +	 * environments.
> >>>>  	 */
> >>>>  	TUNABLE_INT_FETCH("hw.clflush_disable", &hw_clflush_disable);
> >>>> -	if (cpu_vendor_id == CPU_VENDOR_INTEL && !(cpu_feature & CPUID_SS) &&
> >>>> -	    hw_clflush_disable == -1)
> >>>> +	if (vm_guest != 0 /* VM_GUEST_NO */ && hw_clflush_disable == -1)
> >>>>  		cpu_feature &= ~CPUID_CLFSH;
> >>>>  	/*
> >>>>  	 * Allow to disable CLFLUSH feature manually by
> >>>> -	 * hw.clflush_disable tunable.  This may help Xen guest on some AMD
> >>>> -	 * CPUs.
> >>>> +	 * hw.clflush_disable tunable.
> >>>>  	 */
> >>>>  	if (hw_clflush_disable == 1)
> >>>>  		cpu_feature &= ~CPUID_CLFSH;
> >>>>
> >>>> -- 
> >>>> John Baldwin
> >>>> _______________________________________________
> >>>> freebsd-stable at freebsd.org mailing list
> >>>> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> >>>> To unsubscribe, send any mail to "freebsd-stable-
unsubscribe at freebsd.org"
> >>>>
> >>>
> >>
> >>
> >> -- 
> >> | tmclaugh at sdf.lonestar.org                 tmclaugh at FreeBSD.org |
> >> | FreeBSD                                       http://www.FreeBSD.org |
> >>
> >>
> > 
> 
> 
> -- 
> | tmclaugh at sdf.lonestar.org                 tmclaugh at FreeBSD.org |
> | FreeBSD                                       http://www.FreeBSD.org |
> 
> 

-- 
John Baldwin


More information about the freebsd-stable mailing list