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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 26, 2015 at 2:02 AM, Kevin O'Connor <kevin@xxxxxxxxxxxx> 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@xxxxxxxxxxxx> 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: reboot.failed
Description: Binary data


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux