Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752431AbbEFXac (ORCPT ); Wed, 6 May 2015 19:30:32 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:56446 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752380AbbEFXa0 (ORCPT ); Wed, 6 May 2015 19:30:26 -0400 Date: Wed, 6 May 2015 16:30:24 -0700 From: Andrew Morton To: Tony Luck Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH 3/3] x86, mirror: x86 enabling - find mirrored memory ranges Message-Id: <20150506163024.ba4a8eddc8031e5d32b061ba@linux-foundation.org> In-Reply-To: References: X-Mailer: Sylpheed 3.4.1 (GTK+ 2.24.23; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1498 Lines: 50 On Tue, 3 Feb 2015 14:40:19 -0800 Tony Luck 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 from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/