[SeaBIOS] [Qemu-devel] problems with freeBSD

Laszlo Ersek lersek at redhat.com
Thu Mar 7 02:28:41 CET 2013


On 03/07/13 01:53, Kevin O'Connor wrote:
> On Thu, Mar 07, 2013 at 12:12:08AM +0100, Aurelien Jarno wrote:
>> On Wed, Mar 06, 2013 at 08:21:11AM +0000, Dietmar Maurer wrote:
>>> Using qemu 1.4.0:
>>>
>>> # qemu -hda test.raw -m 512 -cdrom pfSense-LiveCD-2.0.2-RELEASE-amd64-20121207-2239.iso
>>>
>>> Results in:
>>>
>>> trap 12: page fault while in kernel mode
>>> ...
>>> stopped at x86bios_emu_rdw+0x2f: movzwl (%rbx),%eax
>>>
>>> Any ideas? Can somebody reproduce that?
>>>
>>> To get the FreeBSD VM boot use the console, enter the boot loader, then:
>>> # set hint.atkbd.0.disabled="1"
>>> # boot
>>>
>>> But that disables the keyboard.

Apparently the call may come from get_typematic()
[sys/dev/atkbdc/atkbd.c]; it wants to retrieve the typematic rate of the
keyboard using the BIOS.

>>
>> I was actually digging about that problem. It is indeed present in
>> version 1.4.0, but is fixed in the current git master. The problem is
>> actually not directly in QEMU but in seabios, the update to version
>> 1.7.2.1 commit 5c75fb10) fixes the issue. Maybe it is worth
>> cherry-picking it into stable-1.4 (hence the Cc:). In the meantime
>> using bios.bin from master with QEMU version 1.4.0 should also fix the
>> issue.
>>
>> What is strange is the seabios commit fixing the issue:
>>
>>     commit 4219149ad2b783abfa61e80e9e9f6910db0c76c9
>>     Author: Kevin O'Connor <kevin at koconnor.net>
>>     Date:   Sun Feb 17 10:56:10 2013 -0500
>>
>>         build: Don't require $(OUT) to be a sub-directory of the main directory.
>
> That change is definitely just build related - I don't see how it
> could impact the final SeaBIOS binary.  How did you conclude that this
> commit is what fixes the issue?

Going out on a limb, I suspect qemu commit 5f876756 instead.

(It's a bit risky for me to say that, as Aurelien may have taken
qemu-1.4.0 as fixed point and bisected seabios rel-1.7.2..rel-1.7.2.1
against it:

$ git log --oneline --reverse rel-1.7.2..rel-1.7.2.1
f396871 Update tools/acpi_extract.py to handle iasl 20130117 release.
12e8199 USB-EHCI: Fix null pointer assignment
d75c22f Fix Makefile - don't reference "out/" directly, instead use "$(OUT)".
4219149 build: Don't require $(OUT) to be a sub-directory of the main directory.
e5fe4f9 Verify CC is valid during build tests.
2b57726 seabios q35: Enable all PIRQn IRQs at startup
985a9d3 seabios q35: Add new PCI slot to irq routing function
88cb66e seabios: Add a dummy PCI slot to irq mapping function
)

I'm suspecting said qemu commit because:
- it's the final commit in 1.4 for file "pc-bios/bios.bin",
- somewhat out of the ordinary, apparently, it was Anthony to rebuild
  the bios, and he used gcc-4.7.2 on Fedora 18,
- while normally Gerd does the updates (see both before and after
  5f876756), and I know for a fact Gerd uses RHEL-6.

I think the gcc version Anthony was using miscompiled SeaBIOS (in the
sense that FreeBSD chokes on it), and the 1.7.2.1 binary from Gerd
restores peace *only* because Gerd relied on RHEL-6 gcc, and not because
of the SeaBIOS changes from 1.7.2 to 1.7.2.1.

$ git log --reverse -- pc-bios/bios.bin

Probably works, but never appeared in a separate release:

    commit 3588185b8396eb97fd9efd41c2b97775465f67c4
    Author: Gerd Hoffmann <kraxel at redhat.com>
    Date:   Mon Jan 21 09:17:16 2013 +0100

        seabios: update to 1.7.2 release

        Not that many changes as we have a pretty recent git snapshot in
        master already:

        Hannes Reinecke (1):
              megasas: Invert PCI device selection

        Kevin O'Connor (2):
              Minor: Separate UUID display from F12 boot prompt.
              boot: Support "halt" in the boot order to prevent default
                boot attempts.

        Laszlo Ersek (1):
              display_uuid(): fix incomplete check after the loop

        Paolo Bonzini (1):
              vgabios: implement AX=1120H..1124H functions

Exposes problem (released in qemu-1.4.0):

    commit 5f876756c57c15f5e14d4136fc432b74f05f082b
    Author: Anthony Liguori <aliguori at us.ibm.com>
    Date:   Wed Feb 6 05:12:06 2013 -0600

        bios: recompile BIOS

        SeaBIOS is really close to spilling over to 256k.  Until we can
        better handle migration across RAM block size changes, recompile
        SeaBIOS with a compiler that causes the binary to still fit in
        128k.

        This was built with:

        gcc version 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)

        On 64-bit Fedora 18.

        Signed-off-by: Anthony Liguori <aliguori at us.ibm.com>

Works again (unreleased), according to Aurelien's testing:

    commit 5c75fb10029c5fd1e705a6ef5d698fbea06c7a33
    Author: Gerd Hoffmann <kraxel at redhat.com>
    Date:   Thu Feb 28 09:18:56 2013 +0100

        update seabios to 1.7.2.1

        Alex Williamson (3):
              seabios q35: Enable all PIRQn IRQs at startup
              seabios q35: Add new PCI slot to irq routing function
              seabios: Add a dummy PCI slot to irq mapping function

        Avik Sil (1):
              USB-EHCI: Fix null pointer assignment

        Kevin O'Connor (4):
              Update tools/acpi_extract.py to handle iasl 20130117
                release.
              Fix Makefile - don't reference "out/" directly, instead
                use "$(OUT)".
              build: Don't require $(OUT) to be a sub-directory of the
                main directory.
              Verify CC is valid during build tests.

        Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>

(I re-wrapped the commit messages for legibility.)

Laszlo



More information about the SeaBIOS mailing list