Re: "54b52d87268034859191d671505bb1cfce6bd74d - x86/efi: Build our own EFI services pointer table" breaks boot on thinkpad t440s

From: Ingo Molnar
Date: Fri Apr 11 2014 - 03:21:00 EST



* Matt Fleming <matt@xxxxxxxxxxxxxxxxx> wrote:

> On Thu, 10 Apr, at 12:43:43PM, Koen Kooi wrote:
> > Hi,
> >
> > After updating from 3.14-rc7 to a recent git the kernel fails to boot on my thinkpad t440s and displays:
> >
> > Failed to get file info size
> > Failed to alloc highmem for files
> >
> > After a morning of running git bisect and rebooting, the bad commit seems to be:
> >
> > 54b52d87268034859191d671505bb1cfce6bd74d - x86/efi: Build our own EFI services pointer table
>
> Thanks for the report. Can you try this patch against Linus' tree?
>
>
> diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
> index 1e6146137f8e..280165524ee4 100644
> --- a/arch/x86/boot/compressed/eboot.c
> +++ b/arch/x86/boot/compressed/eboot.c
> @@ -112,7 +112,7 @@ __file_size64(void *__fh, efi_char16_t *filename_16,
> efi_file_info_t *info;
> efi_status_t status;
> efi_guid_t info_guid = EFI_FILE_INFO_ID;
> - u32 info_sz;
> + u64 info_sz;

Might be prudent to do the same in __file_size32(), instead of
truncating silently, especially is that function too has a u64 output
AFAICS.

Also, while reviewing the file I noticed that there's "u32 fb_base",
which is recovered like:

status = __gop_query64(gop64, &info, &size, &fb_base);

but ->frame_buffer_base is u64. Is it always guaranteed u32?

Thanks,

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/