linux-efi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* ESRT failures ... was Re: [PATCH 04/11] efi: Add efi_memmap_init_late() for permanent EFI memmap
@ 2016-07-13 17:49 Prarit Bhargava
       [not found] ` <57867F32.8040001-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 11+ messages in thread
From: Prarit Bhargava @ 2016-07-13 17:49 UTC (permalink / raw)
  To: Matt Fleming, Lenny Szubowicz, Peter Jones,
	linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org

[I am not subscribed to linux-efi.  Sorry for the bad threading.  Please include
me on the cc on any replies.]

Matt, I grabbed your patches which are similar to a change that I wanted to make
to the kernel.  There is one issue though that I want to bring up.

With or without your changeset, I see the following issue on Dell system with a
valid ESRT table.


[    0.000000] efi:  SMBIOS=0x8ce95000  ACPI=0x8d2fe000  ACPI 2.0=0x8d2fe014
ESRT=0x8d0f5000  MPS=0x8d0dd000
[    0.000000] efi: requested map not found.
[    0.000000] esrt: ESRT header is not in the memory map.
[    0.000000] SMBIOS 2.8 present.

This occurs AFAICT (with or without your changes) because of this check in
efi_mem_desc_lookup():

                if (!(md->attribute & EFI_MEMORY_RUNTIME) &&
                    md->type != EFI_BOOT_SERVICES_DATA &&
                    md->type != EFI_RUNTIME_SERVICES_DATA) {
                        continue;
                }

which then results in skipping the appropriate region.  IIUC (and that's part of
my question ;)) the above check means that the region has already been
permanently mapped.  That is,

rc = efi_mem_desc_lookup(efi.esrt, &md);
        if (rc < 0) {
                pr_err("ESRT header is not in the memory map.\n");
                return;
        }
...
        va = early_memremap(efi.esrt, size);
        if (!va) {

and rc is -ENOENT because a matching region couldn't be found.  As can be seen
the existing ESRT code will attempt to remap the region if not mapped.

I think that perhaps the function should be changed to do

        for_each_efi_memory_desc(md) {
                u64 size;
                u64 end;

                size = md->num_pages << EFI_PAGE_SHIFT;
                end = md->phys_addr + size;
                if (phys_addr >= md->phys_addr && phys_addr < end) {
                        memcpy(out_md, md, sizeof(*out_md));

                        if (!(md->attribute & EFI_MEMORY_RUNTIME) &&
                            md->type != EFI_BOOT_SERVICES_DATA &&
                            md->type != EFI_RUNTIME_SERVICES_DATA) {
                                return UNMAPPED;
                        }

                        return MAPPED;
                }
        }

so that individual callers (like the ESRT code) can then make a decision on
whether or not the area needs to be mapped.

Thoughts/concerns?

P.

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

end of thread, other threads:[~2016-07-26 14:26 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-13 17:49 ESRT failures ... was Re: [PATCH 04/11] efi: Add efi_memmap_init_late() for permanent EFI memmap Prarit Bhargava
     [not found] ` <57867F32.8040001-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-07-21 12:11   ` Matt Fleming
     [not found]     ` <20160721121136.GF26504-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2016-07-21 14:44       ` Prarit Bhargava
     [not found]         ` <5790DFD0.4020806-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-07-22 13:11           ` Matt Fleming
     [not found]             ` <20160722131101.GJ26504-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2016-07-22 13:31               ` Prarit Bhargava
     [not found]                 ` <57922028.7070103-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-07-25 14:44                   ` Matt Fleming
     [not found]                     ` <20160725144431.GA31759-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2016-07-25 15:11                       ` Prarit Bhargava
     [not found]                         ` <57962C23.5090705-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-07-25 15:13                           ` Matt Fleming
     [not found]                             ` <20160725151344.GB31759-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2016-07-25 15:38                               ` Prarit Bhargava
     [not found]                                 ` <57963289.2090805-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-07-26 11:33                                   ` Prarit Bhargava
     [not found]                                     ` <57974AA4.7090907-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-07-26 14:26                                       ` Matt Fleming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).