Re: [Qemu-devel] E5-2620v2 - emulation stop error

Andrey Korolyov
2015-03-25T23:36:20Z

[-- Attachment #1: Type: text/plain, Size: 3324 bytes --]

On Thu, Mar 26, 2015 at 2:02 AM, Kevin O'Connor <kevin@koconnor.net> wrote:
> On Thu, Mar 26, 2015 at 01:31:11AM +0300, Andrey Korolyov wrote:
>> On Wed, Mar 25, 2015 at 11:54 PM, Kevin O'Connor <kevin@koconnor.net> wrote:
>> >
>> > Can you add something like:
>> >
>> > -chardev file,path=seabioslog.`date +%s`,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios
>> >
>> > to the qemu command line and forward the resulting log from both a
>> > succesful boot and a failed one?
>> >
>> > -Kevin
>>
>> Of course, logs are attached.
>
> Thanks. From a diff of the two logs:
>
> 4: 000000003ffe0000 - 0000000040000000 = 2 RESERVED
> 5: 00000000feffc000 - 00000000ff000000 = 2 RESERVED
> 6: 00000000fffc0000 - 0000000100000000 = 2 RESERVED
> -enter handle_19:
> - NULL
> -Booting from Hard Disk...
> -Booting from 0000:7c00
>
> So, it got most of the way through the reboot - there's only a few
> function calls between the e820 map being dumped and the handle_19
> call. The fault also seems to show it stopped in the BIOS in 16bit
> mode:
>
>> EIP=0000d331 EFL=00010202 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
>> ES =0000 00000000 0000ffff 00009300
>> CS =f000 000f0000 0000ffff 00009b00
>
> Can you add the patch below, force the fault, and forward the log.
>
> Also, if you recreate the failure can you take the EIP from the fault
> (eg, d331) and search for the corresponding function in the output of:
> objdump -m i386 -M i8086 -M suffix -ldr out/rom16.o | less
> (That is, search for "d331:".) If that's too much of a pain, just
> send me a direct email with the seabios out/rom16.o file and the new
> EIP of the fault. (I need the out/rom16.o that was used to build the
> version of SeaBIOS that faulted.)
>
> -Kevin
>
>
> diff --git a/src/post.c b/src/post.c
> index 9ea5620..bbd19c0 100644
> --- a/src/post.c
> +++ b/src/post.c
> @@ -185,21 +185,24 @@ prepareboot(void)
> pmm_prepboot();
> malloc_prepboot();
> memmap_prepboot();
> + dprintf(1, "a\n");
>
> HaveRunPost = 2;
>
> // Setup bios checksum.
> BiosChecksum -= checksum((u8*)BUILD_BIOS_ADDR, BUILD_BIOS_SIZE);
> + dprintf(1, "b\n");
> }
>
> // Begin the boot process by invoking an int0x19 in 16bit mode.
> void VISIBLE32FLAT
> startBoot(void)
> {
> + dprintf(1, "e\n");
> // Clear low-memory allocations (required by PMM spec).
> memset((void*)BUILD_STACK_ADDR, 0, BUILD_EBDA_MINIMUM - BUILD_STACK_ADDR);
>
> - dprintf(3, "Jump to int19\n");
> + dprintf(1, "Jump to int19 (vector=%x)\n", GET_IVT(0x19).segoff);
> struct bregs br;
> memset(&br, 0, sizeof(br));
> br.flags = F_IF;
> @@ -239,9 +242,11 @@ maininit(void)
> // Prepare for boot.
> prepareboot();
>
> + dprintf(1, "c\n");
> // Write protect bios memory.
> make_bios_readonly();
>
> + dprintf(1, "d\n");
> // Invoke int 19 to start boot process.
> startBoot();
> }

Thanks, strangely the reboot is always failing now and always reaching
seabios greeting. May be prints straightened up a race (e.g. it is not
int19 problem really).

object file part:

0000d331 <irq_trampoline_0x19>:
irq_trampoline_0x19():
/root/seabios-1.8.1/src/romlayout.S:195
d331: cd 19 int $0x19
d333: cb lretw

[-- Attachment #2: reboot.failed --]
[-- Type: application/octet-stream, Size: 6137 bytes --]

SeaBIOS (version 1.8.1-20150326_021758-testnode)
Running on QEMU (i440fx)
Running on KVM
RamSize: 0x40000000 [cmos]
Relocating init from 0x000e1130 to 0x3ffafce0 (size 66144)
Found QEMU fw_cfg
RamBlock: addr 0x0000000000000000 len 0x0000000040000000 [e820]
Moving pm_base to 0x600
boot order:
1: /pci@i0cf8/scsi@5/disk@0,0
2: HALT
CPU Mhz=2103
=== PCI bus & bridge init ===
PCI: pci_bios_init_bus_rec bus = 0x0
=== PCI device probing ===
Found 7 PCI devices (max PCI bus is 00)
=== PCI new allocation pass #1 ===
PCI: check devices
=== PCI new allocation pass #2 ===
PCI: IO: c000 - c06f
PCI: 32: 0000000080000000 - 00000000fec00000
PCI: map device bdf=00:05.0 bar 0, addr 0000c000, size 00000040 [io]
PCI: map device bdf=00:04.0 bar 0, addr 0000c040, size 00000020 [io]
PCI: map device bdf=00:01.1 bar 4, addr 0000c060, size 00000010 [io]
PCI: map device bdf=00:03.0 bar 0, addr febf8000, size 00004000 [mem]
PCI: map device bdf=00:04.0 bar 1, addr febfc000, size 00001000 [mem]
PCI: map device bdf=00:05.0 bar 1, addr febfd000, size 00001000 [mem]
PCI: init bdf=00:00.0 id=8086:1237
PCI: init bdf=00:01.0 id=8086:7000
PIIX3/PIIX4 init: elcr=00 0c
PCI: init bdf=00:01.1 id=8086:7010
PCI: init bdf=00:01.3 id=8086:7113
Using pmtimer, ioport 0x608
PCI: init bdf=00:03.0 id=1033:0194
PCI: init bdf=00:04.0 id=1af4:1003
PCI: init bdf=00:05.0 id=1af4:1001
PCI: No VGA devices found
handle_smp: apic_id=11
handle_smp: apic_id=3
handle_smp: apic_id=8
handle_smp: apic_id=4
handle_smp: apic_id=9
handle_smp: apic_id=1
handle_smp: apic_id=2
handle_smp: apic_id=7
handle_smp: apic_id=6
handle_smp: apic_id=10
handle_smp: apic_id=5
Found 12 cpu(s) max supported 12 cpu(s)
Copying PIR from 0x3ffbfd08 to 0x000f1310
Copying MPTABLE from 0x00006d49/3ffa6bf0 to 0x000f1220
Copying SMBIOS entry point from 0x00006d59 to 0x000f1080
Scan for VGA option rom
Running option rom at c000:0003
Turning on vga text mode console
SeaBIOS (version 1.8.1-20150326_021758-testnode)
Machine UUID 3c78721f-7317-4f85-bcbe-f5ad46d293a1
All threads complete.
Found 0 lpt ports
Found 1 serial ports
ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
ATA controller 2 at 170/374/0 (irq 15 dev 9)
found virtio-blk at 0:5
Searching bootorder for: /pci@i0cf8/*@5
PS2 keyboard initialized
All threads complete.
Scan for option roms
Searching bootorder for: /rom@genroms/kvmvapic.bin
Searching bootorder for: HALT
drive 0x000f1000: PCHS=16383/16/63 translation=lba LCHS=1024/255/63 s=16777216
Running option rom at c100:0003
Space available for UMB: c3800-ed800, f0000-f1000
Returned 131072 bytes of ZoneHigh
e820 map has 7 items:
0: 0000000000000000 - 000000000009f800 = 1 RAM
1: 000000000009f800 - 00000000000a0000 = 2 RESERVED
2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
3: 0000000000100000 - 000000003ffe0000 = 1 RAM
4: 000000003ffe0000 - 0000000040000000 = 2 RESERVED
5: 00000000feffc000 - 00000000ff000000 = 2 RESERVED
6: 00000000fffc0000 - 0000000100000000 = 2 RESERVED
a
b
c
d
e
Jump to int19 (vector=f000e6f2)
enter handle_19:
NULL
Booting from Hard Disk...
Booting from 0000:7c00
In resume (status=0)
In 32bit resume
Attempting a hard reboot
SeaBIOS (version 1.8.1-20150326_021758-testnode)
Running on QEMU (i440fx)
Running on KVM
RamSize: 0x40000000 [cmos]
Relocating init from 0x000e1130 to 0x3ffafce0 (size 66144)
Found QEMU fw_cfg
RamBlock: addr 0x0000000000000000 len 0x0000000040000000 [e820]
Moving pm_base to 0x600
boot order:
1: /pci@i0cf8/scsi@5/disk@0,0
2: HALT
CPU Mhz=2108
=== PCI bus & bridge init ===
PCI: pci_bios_init_bus_rec bus = 0x0
=== PCI device probing ===
Found 7 PCI devices (max PCI bus is 00)
=== PCI new allocation pass #1 ===
PCI: check devices
=== PCI new allocation pass #2 ===
PCI: IO: c000 - c06f
PCI: 32: 0000000080000000 - 00000000fec00000
PCI: map device bdf=00:05.0 bar 0, addr 0000c000, size 00000040 [io]
PCI: map device bdf=00:04.0 bar 0, addr 0000c040, size 00000020 [io]
PCI: map device bdf=00:01.1 bar 4, addr 0000c060, size 00000010 [io]
PCI: map device bdf=00:03.0 bar 0, addr febf8000, size 00004000 [mem]
PCI: map device bdf=00:04.0 bar 1, addr febfc000, size 00001000 [mem]
PCI: map device bdf=00:05.0 bar 1, addr febfd000, size 00001000 [mem]
PCI: init bdf=00:00.0 id=8086:1237
PCI: init bdf=00:01.0 id=8086:7000
PIIX3/PIIX4 init: elcr=00 0c
PCI: init bdf=00:01.1 id=8086:7010
PCI: init bdf=00:01.3 id=8086:7113
Using pmtimer, ioport 0x608
PCI: init bdf=00:03.0 id=1033:0194
PCI: init bdf=00:04.0 id=1af4:1003
PCI: init bdf=00:05.0 id=1af4:1001
PCI: No VGA devices found
handle_smp: apic_id=1
handle_smp: apic_id=2
handle_smp: apic_id=3
handle_smp: apic_id=4
handle_smp: apic_id=5
handle_smp: apic_id=6
handle_smp: apic_id=7
handle_smp: apic_id=8
handle_smp: apic_id=9
handle_smp: apic_id=10
handle_smp: apic_id=11
Found 12 cpu(s) max supported 12 cpu(s)
Copying PIR from 0x3ffbfd08 to 0x000f1310
Copying MPTABLE from 0x00006d49/3ffa6bf0 to 0x000f1220
Copying SMBIOS entry point from 0x00006d59 to 0x000f1080
Scan for VGA option rom
Running option rom at c000:0003
Turning on vga text mode console
SeaBIOS (version 1.8.1-20150326_021758-testnode)
Machine UUID 3c78721f-7317-4f85-bcbe-f5ad46d293a1
All threads complete.
Found 0 lpt ports
Found 1 serial ports
ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
ATA controller 2 at 170/374/0 (irq 15 dev 9)
found virtio-blk at 0:5
Searching bootorder for: /pci@i0cf8/*@5
PS2 keyboard initialized
All threads complete.
Scan for option roms
Searching bootorder for: /rom@genroms/kvmvapic.bin
Searching bootorder for: HALT
drive 0x000f1000: PCHS=16383/16/63 translation=lba LCHS=1024/255/63 s=16777216
Running option rom at c100:0003
Space available for UMB: c3800-ed800, f0000-f1000
Returned 131072 bytes of ZoneHigh
e820 map has 7 items:
0: 0000000000000000 - 000000000009f800 = 1 RAM
1: 000000000009f800 - 00000000000a0000 = 2 RESERVED
2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
3: 0000000000100000 - 000000003ffe0000 = 1 RAM
4: 000000003ffe0000 - 0000000040000000 = 2 RESERVED
5: 00000000feffc000 - 00000000ff000000 = 2 RESERVED
6: 00000000fffc0000 - 0000000100000000 = 2 RESERVED
a
b
c
d
e
Jump to int19 (vector=f000e6f2)