On Tue, 3 Feb 2015 14:40:19 -0800 Tony Luck <tony.luck@xxxxxxxxx> wrote: > UEFI GetMemoryMap() uses a new attribute bit to mark mirrored memory > address ranges. See UEFI 2.5 spec pages 157-158: > > http://www.uefi.org/sites/default/files/resources/UEFI%202_5.pdf > > On EFI enabled systems scan the memory map and tell memblock about > any mirrored ranges. > > ... > > --- a/arch/x86/platform/efi/efi.c > +++ b/arch/x86/platform/efi/efi.c > @@ -117,6 +117,27 @@ void efi_get_time(struct timespec *now) > now->tv_nsec = 0; > } > > +void __init efi_find_mirror(void) > +{ > + void *p; > + unsigned long long mirror_size = 0, total_size = 0; > + > + for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { > + efi_memory_desc_t *md = p; > + unsigned long long start = md->phys_addr; > + unsigned long long size = md->num_pages << EFI_PAGE_SHIFT; efi_memory_desc_t uses u64 for all this stuff. Was there a reason for using ull instead? > + total_size += size; > + if (md->attribute & EFI_MEMORY_MORE_RELIABLE) { > + memblock_mark_mirror(start, size); > + mirror_size += size; > + } > + } > + if (mirror_size) > + pr_info("Memory: %lldM/%lldM mirrored memory\n", > + mirror_size>>20, total_size>>20); > +} > + > > ... > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>