On Wed, Jun 01, 2011 at 03:00:51PM +0200, Sergi wrote:
> On 01/06/11 11:36, Sergi wrote:
> >On 01/06/11 10:21, Kostik Belousov wrote:
> >>On Wed, Jun 01, 2011 at 09:44:23AM +0200, Sergi wrote:
> >>>Hello,
> >>>
> >>>I'm working with full virtual FreeBSD 8.2-RELEASE-p1 domU under debian
> >>>squeeze and xen-hypervisor-4.0-amd64.
> >>>
> >>>If I cfg this hvm with cpu>  4 :
> >>>
> >>>  vcpus    = 5
> >>>
> >>>these messages block the server :
> >>>
> >>>  fpudna: fpcurthread == curthread XXXX times
> >>>
> >>>The machine is pingable but I'm unable to ssh to it.
> >>>
> >>>On single user it works fine, fsck an so on ok, but when switching to
> >>>multiuser these fpudna messages start flooding.
> >>>
> >>>I've googled but haven't found anything; something from 2005 about 
> >>>fpudna :
> >>>
> >>>  
> >>>http://lists.freebsd.org/pipermail/freebsd-amd64/2005-April/004413.html
> >>>
> >>>and this link, but I don't have the options he mentions enabled on the
> >>>kernel :
> >>>
> >>>  http://forums.freebsd.org/showthread.php?t=17979
> >>>
> >>>Has anyone stepped on this behaviour before?, is there any workaround?
> >>>The machine really seems to detect cpu's available and responds to 
> >>>keyboard
> >>>on VNC, but it's impossible to see whats written down because of the
> >>>messages flooding the screen.
> >>You did not specified the architecture of the domu. From the message, 
> >>I can
> >>guess that your guest is running amd64 kernel. There are slight 
> >>differences
> >>in the handling of the FPU in i386 and amd64 that may matter there.
> >>
> >>The message you reported means that the FreeBSD kernel assumes that FPU
> >>is currently loaded with the context of the current thread, but the
> >>CR0.TS bit is set, meaning that FPU context is set for switch.
> >>
> >>AFAIR, HVM means that you run bare-metal kernel, right ? Most likely,
> >>it is some issue with Xen itself. I am curious whether the following
> >>will cause any usermode-visible regression for you:
> >>
> >>diff --git a/sys/amd64/amd64/fpu.c b/sys/amd64/amd64/fpu.c
> >>index 08e5e57..a5ee853 100644
> >>--- a/sys/amd64/amd64/fpu.c
> >>+++ b/sys/amd64/amd64/fpu.c
> >>@@ -394,14 +394,8 @@ fpudna(void)
> >>      struct pcb *pcb;
> >>
> >>      critical_enter();
> >>-    if (PCPU_GET(fpcurthread) == curthread) {
> >>-        printf("fpudna: fpcurthread == curthread %d times\n",
> >>-            ++err_count);
> >>-        stop_emulating();
> >>-        critical_exit();
> >>-        return;
> >>-    }
> >>-    if (PCPU_GET(fpcurthread) != NULL) {
> >>+    if (PCPU_GET(fpcurthread) != NULL&&
> >>+        PCPU_GET(fpcurthread) != curthread) {
> >>          printf("fpudna: fpcurthread = %p (%d), curthread = %p (%d)\n",
> >>                 PCPU_GET(fpcurthread),
> >>                 PCPU_GET(fpcurthread)->td_proc->p_pid,
> >Hello,
> >
> >yes, sorry, amd64, and yes, hvm hardware virtual machine, not 
> >paravirtual.
> >
> >So, you mean patching fpu.c and recompiling the kernel, right?, I'm 
> >new to modifiying src files.
> >
> >Thanks for your help,
> >Sergi
> >
> >
> >_______________________________________________
> >freebsd-xen@freebsd.org mailing list
> >http://lists.freebsd.org/mailman/listinfo/freebsd-xen
> >To unsubscribe, send any mail to "freebsd-xen-unsubscr...@freebsd.org"
> >
> Hello,
> 
> well, I patched fpu.c, recompiled the kernel, and booted ok with 4 vcpu.
> Then I tried to boot with 5 vcpus and got :
> 
> kernel trap 22 with interrupts disabled
> ...
> kernel trap 22 with interrupts disabled
> Fatal double fault
> rip = 0xffffffff8067865a
> rsp = 0xffffff8000000000
> rbp = 0xffffff8000000040
> cpuid = 4; apic id = 08
> panic: double fault
> cpuid = 4
> 
> 4 vcpus is the maximum number of vcpus I can use.
> 
> How do you think I can debug this in order to provide more information?

At least you can add KDB/DDB to the kernel config and get a backtrace
at panic.

My feeling right now is that the issue is in the hypervisor, and not in
the kernel.

Attachment: pgpjK651DRhD4.pgp
Description: PGP signature

Reply via email to