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?

Thanks,
regards,
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"

Reply via email to