]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: EFI handover flags are in Bp->hdr.xloadflags
authorMatt Fleming <matt.fleming@intel.com>
Tue, 24 Sep 2013 18:33:56 +0000 (18:33 +0000)
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 24 Sep 2013 18:33:56 +0000 (18:33 +0000)
LoadLinux() is looking at the wrong field for the kernel's EFI handover
protocol flags. It's not currently possible for JumpToUefiKernel() to
ever be called (even accidentally) because BIT2 and BIT3 of
Bp->hdr.load_flags are never set in modern kernels, which means that
control is always transferred to the kernel via the legacy entry point.

Look at the correct field so that the EFI handover protocol is used
whenever it's available.

Contributed-under: TianoCore Contribution Agreement 1.0
Cc: David Woodhouse <David.Woodhouse@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14721 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/Library/LoadLinuxLib/Linux.c

index 4a3e2c13cb349eb9ce481bf419c7a61045ab6e9b..37b14f5612efe56df34a4032ced465ec10138922 100644 (file)
@@ -647,7 +647,7 @@ LoadLinux (
 \r
   Bp->hdr.code32_start = (UINT32)(UINTN) Kernel;\r
   if (Bp->hdr.version >= 0x20c && Bp->hdr.handover_offset &&\r
 \r
   Bp->hdr.code32_start = (UINT32)(UINTN) Kernel;\r
   if (Bp->hdr.version >= 0x20c && Bp->hdr.handover_offset &&\r
-      (Bp->hdr.load_flags & (sizeof (UINTN) == 4 ? BIT2 : BIT3))) {\r
+      (Bp->hdr.xloadflags & (sizeof (UINTN) == 4 ? BIT2 : BIT3))) {\r
     DEBUG ((EFI_D_INFO, "Jumping to kernel EFI handover point at ofs %x\n", Bp->hdr.handover_offset));\r
 \r
     DisableInterrupts ();\r
     DEBUG ((EFI_D_INFO, "Jumping to kernel EFI handover point at ofs %x\n", Bp->hdr.handover_offset));\r
 \r
     DisableInterrupts ();\r