experimental FreeBSD qemu 0.11.0-rc1 port update up for testing; unstable guest timer irqs and more

Juergen Lock nox at jelal.kn-bremen.de
Sun Aug 9 18:54:20 UTC 2009


As qemu upstream has cut a new rc from its new 0.11 stable branch,
	http://lists.gnu.org/archive/html/qemu-devel/2009-07/msg02521.html
I thought its time to start testing on FreeBSD and made a preliminary
update for our qemu-devel port:
	http://people.freebsd.org/~nox/qemu/qemu-devel-0.11.0r1.patch
I don't plan to commit this as it is, its just so we can test the new
branch on FreeBSD easier...

 Some notes:

1. kqemu still works, but is disabled by default now so you'll have
to pass -enable-kqemu (or -kernel-kqemu as with the previous versions)
if you want to use it.

2. guest timer irqs seem to be even less stable when running qemu
on FreeBSD 8 than they were on 7, I now regularly have to pass
`no_timer_check' to linux guest kernels or they'd hang at boot after
saying something like this:

[...]
Getting LVT1: 10000
enabled ExtINT on CPU#0
ENABLING IO-APIC IRQs
..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
..MP-BIOS bug: 8254 timer not connected to IO-APIC
...trying to set up timer (IRQ0) through the 8259A ...
..... (found apic 0 pin 2) ...
....... failed.
...trying to set up timer as Virtual Wire IRQ...

 I see reports of this on the net for qemu running on Linux hosts
too tho, so this doesn't seem to be specific to FreeBSD.  (And it
has nothing to do with the new qemu branch, it happens here with
0.10.6 too, I just was testing qemu on FreeBSD 7 before only.)

3. The binutils in FreeBSD base are too old for as(1) to
understand constructs used in multiboot.bin's asm source, so this
port now depends on the new devel/binutils port and patches
qemu/pc-bios/optionrom/Makefile to invoke the new as for the file
in question.  (see files/patch-pc-bios-optionrom-Makefile at the
end of the patch; the same problem has been reported for OpenBSD
on the qemu list before.)

4. There's a bug in qemu/osdep.c:kqemu_vmalloc(), it doesn't round
its size arg up to full pages before calling mmap on the BSDs.
Here is the patch:  (files/patch-osdep.c in the port.)

Index: qemu/osdep.c
@@ -179,7 +179,9 @@
         }
         unlink(phys_ram_file);
     }
+#endif /* !(__OpenBSD__ || __FreeBSD__ || __DragonFly__) */
     size = (size + 4095) & ~4095;
+#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__DragonFly__)
     ftruncate(phys_ram_fd, phys_ram_size + size);
 #endif /* !(__OpenBSD__ || __FreeBSD__ || __DragonFly__) */
     ptr = mmap(NULL,

 Ok I guess thats it for now.  Happy testing... :)
	Juergen


More information about the freebsd-emulation mailing list