public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* Re: can't boot OVMF guest after commit 45cfcd8
@ 2017-06-26 17:13 Gabriel L. Somlo
  2017-06-26 19:52 ` Laszlo Ersek
  0 siblings, 1 reply; 3+ messages in thread
From: Gabriel L. Somlo @ 2017-06-26 17:13 UTC (permalink / raw)
  To: edk2-devel; +Cc: amit.ak, liming.gao, star.zeng

Hi,

Following commit 45cfcd8dccf84b8abbc1d6f587fedb5d2037ec79, a.k.a.
"MdeModulePkg/DxeCore: Fixed Interface returned by CoreOpenProtocol",
I'm no longer able to boot a VM guest with OVMF. Using command line:

bin/qemu-system-x86_64 -machine q35,accel=kvm -m 2048 -bios OVMF.fd \
  -device ide-drive,bus=ide.2,drive=CD \
  -drive id=CD,if=none,snapshot=on,file=Fedora-Workstation-Live-x86_64-25-1.3.iso

everything hangs at the Tianocore splash screen indefinitely.

Reverting the commit locally gets things to work fine once again.

Sorry for the noise if this report is a dupe, otherwise please let me
know if/what other information and test results I can provide to help.

Cheers,
--Gabriel


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: can't boot OVMF guest after commit 45cfcd8
  2017-06-26 17:13 can't boot OVMF guest after commit 45cfcd8 Gabriel L. Somlo
@ 2017-06-26 19:52 ` Laszlo Ersek
  2017-06-27  0:36   ` Laszlo Ersek
  0 siblings, 1 reply; 3+ messages in thread
From: Laszlo Ersek @ 2017-06-26 19:52 UTC (permalink / raw)
  To: Gabriel L. Somlo, edk2-devel; +Cc: star.zeng, liming.gao

Hi Gabriel,

On 06/26/17 19:13, Gabriel L. Somlo wrote:
> Hi,
> 
> Following commit 45cfcd8dccf84b8abbc1d6f587fedb5d2037ec79, a.k.a.
> "MdeModulePkg/DxeCore: Fixed Interface returned by CoreOpenProtocol",
> I'm no longer able to boot a VM guest with OVMF. Using command line:
> 
> bin/qemu-system-x86_64 -machine q35,accel=kvm -m 2048 -bios OVMF.fd \
>   -device ide-drive,bus=ide.2,drive=CD \
>   -drive id=CD,if=none,snapshot=on,file=Fedora-Workstation-Live-x86_64-25-1.3.iso
> 
> everything hangs at the Tianocore splash screen indefinitely.
> 
> Reverting the commit locally gets things to work fine once again.
> 
> Sorry for the noise if this report is a dupe, otherwise please let me
> know if/what other information and test results I can provide to help.

Thank you for the report and for identifying the commit -- I guess I
should have stumbled upon this myself, but other duties have kept me
from building OVMF for a while now. :/

Can you please add the following options to your QEMU command line, for
capturing the OVMF debug log? Maybe we'll know better where the problem
occurs this way.

  -debugcon file:debug.log -global isa-debugcon.iobase=0x402

In addition,

  -serial stdio

might help you catch a register dump (written to serial) from the
default CPU exception handler in UefiCpuPkg, if an unhandled page fault
occurs, for example.

Thanks,
Laszlo


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: can't boot OVMF guest after commit 45cfcd8
  2017-06-26 19:52 ` Laszlo Ersek
@ 2017-06-27  0:36   ` Laszlo Ersek
  0 siblings, 0 replies; 3+ messages in thread
From: Laszlo Ersek @ 2017-06-27  0:36 UTC (permalink / raw)
  To: Gabriel L. Somlo, edk2-devel; +Cc: liming.gao, star.zeng

On 06/26/17 21:52, Laszlo Ersek wrote:
> Hi Gabriel,
>
> On 06/26/17 19:13, Gabriel L. Somlo wrote:
>> Hi,
>>
>> Following commit 45cfcd8dccf84b8abbc1d6f587fedb5d2037ec79, a.k.a.
>> "MdeModulePkg/DxeCore: Fixed Interface returned by CoreOpenProtocol",
>> I'm no longer able to boot a VM guest with OVMF. Using command line:
>>
>> bin/qemu-system-x86_64 -machine q35,accel=kvm -m 2048 -bios OVMF.fd \
>>   -device ide-drive,bus=ide.2,drive=CD \
>>   -drive id=CD,if=none,snapshot=on,file=Fedora-Workstation-Live-x86_64-25-1.3.iso
>>
>> everything hangs at the Tianocore splash screen indefinitely.
>>
>> Reverting the commit locally gets things to work fine once again.
>>
>> Sorry for the noise if this report is a dupe, otherwise please let me
>> know if/what other information and test results I can provide to
>> help.
>
> Thank you for the report and for identifying the commit -- I guess I
> should have stumbled upon this myself, but other duties have kept me
> from building OVMF for a while now. :/
>
> Can you please add the following options to your QEMU command line,
> for capturing the OVMF debug log? Maybe we'll know better where the
> problem occurs this way.
>
>   -debugcon file:debug.log -global isa-debugcon.iobase=0x402
>
> In addition,
>
>   -serial stdio
>
> might help you catch a register dump (written to serial) from the
> default CPU exception handler in UefiCpuPkg, if an unhandled page
> fault occurs, for example.

Yes, it is a crash:

> !!!! X64 Exception Type - 0D(#GP - General Protection)  CPU Apic ID - 00000000 !!!!
> ExceptionData - 0000000000000000
> RIP  - 000000007F4CFB72, CS  - 0000000000000038, RFLAGS - 0000000000010282
> RAX  - 8000000000000010, RCX - 8000000000000010, RDX - 0000000000000000
> RBX  - 0000000000000013, RSP - 000000007F6BB670, RBP - 000000007F6BB690
> RSI  - 0000000000000000, RDI - 000000007E303D98
> R8   - 8000000000000010, R9  - 0000000000000000, R10 - 0000000FFFFFFFFF
> R11  - 0000000000000018, R12 - 0000000000000000, R13 - 0000000000000000
> R14  - 0000000000000000, R15 - 0000000000000000
> DS   - 0000000000000030, ES  - 0000000000000030, FS  - 0000000000000030
> GS   - 0000000000000030, SS  - 0000000000000030
> CR0  - 0000000080010033, CR2 - 0000000000000000, CR3 - 000000007F65A000
> CR4  - 0000000000000668, CR8 - 0000000000000000
> DR0  - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000
> DR3  - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400
> GDTR - 000000007F5ADA98 0000000000000047, LDTR - 0000000000000000
> IDTR - 000000007E897018 0000000000000FFF,   TR - 0000000000000000
> FXSAVE_STATE - 000000007F6BB2D0
> !!!! Find image
> /.../Build/Ovmf3264/NOOPT_GCC48/X64/MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe/DEBUG/DevicePathDxe.dll
> (ImageBase=000000007F4CF000, EntryPoint=000000007F4CF27B) !!!!

It happens like this:

The IsaBusControllerDriverStart() function in
"IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBus.c", opens two protocol
interfaces BY_DRIVER, a Device Path and an ISA ACPI one. Either of these
can fail, and the returns with an error in such cases, *except* when the
protocol opens BY_DRIVER fail with EFI_ALREADY_STARTED. (This means that
the driver has bound the controller already.)

Before commit 45cfcd8dccf8, the protocol interface addresses would be
returned on EFI_ALREADY_STARTED, and then IsaBusControllerDriverStart()
would proceed to:

- call:

  REPORT_STATUS_CODE_WITH_DEVICE_PATH (
    EFI_PROGRESS_CODE,
    (EFI_IO_BUS_LPC | EFI_IOB_PC_INIT),
    ParentDevicePath
    );

  which is what crashes with commit 45cfcd8dccf8 in place, since
  ParentDevicePath keeps its initial garbage (non-NULL) contents from
  the stack, on EFI_ALREADY_STARTED,

- call:

  IsaAcpi->InterfaceInit (IsaAcpi);

- do a bunch of similar stuff, regardless of whether the same driver has
  bound the same controller previously. It even has a comment like

    //
    // Create handle for this ISA device
    //
    // If any child device handle was created in previous call to Start() and not stopped
    // in previous call to Stop(), it will not be created again because the
    // InstallMultipleProtocolInterfaces() boot service will reject same device path.
    //

So I guess what the driver does is intentional, but the way it requires
gBS->OpenProtocol() to return a valid Interface even on error seems to
conflict with the UEFI spec. And now commit 45cfcd8dccf8 makes that show.

I'll follow up under

[edk2] [PATCH V4] MdeModulePkg/DxeCore: Fixed Interface returned by
CoreOpenProtocol

and CC you.

Thanks
Laszlo


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-06-27  0:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-26 17:13 can't boot OVMF guest after commit 45cfcd8 Gabriel L. Somlo
2017-06-26 19:52 ` Laszlo Ersek
2017-06-27  0:36   ` Laszlo Ersek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox