Hi, On 07/20/19 at 03:52pm, Sai Praneeth Prakhya wrote: > Hi All, > > Disclaimer: > 1. Please note that this discussion is x86 specific > 2. Below stated things are my understanding about kernel and I could have > missed somethings, so please let me know if I understood something wrong. > 3. I have focused only on memblock here because if I understand correctly, > memblock is the base that feeds other memory management subsystems in kernel > (like the buddy allocator). > > On x86 platforms, there are two sources through which kernel learns about > physical memory in the system namely E820 table and EFI Memory Map. Each table > describes which regions of system memory is usable by kernel and which regions > should be preserved (i.e. reserved regions that typically have BIOS code/data) > so that no other component in the system could read/write to these regions. I > think they are duplicating the information and hence I have couple of > questions regarding these > > 1. I see that only E820 table is being consumed by kernel [1] (i.e. memblock > subsystem in kernel) to distinguish between "usable" vs "reserved" regions. > Assume someone has called memblock_alloc(), the memblock subsystem would > service the caller by allocating memory from "usable" regions and it knows > this *only* from E820 table [2] (it does not check if EFI Memory Map also says > that this region is usable as well). So, why isn't the kernel taking EFI > Memory Map into consideration? (I see that it does happen only when > "add_efi_memmap" kernel command line arg is passed i.e. passing this argument > updates E820 table based on EFI Memory Map) [3]. The problem I see with > memblock not taking EFI Memory Map into consideration is that, we are ignoring > the main purpose for which EFI Memory Map exists. https://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html Probably above blog can explain some background. > > 2. Why doesn't the kernel have "add_efi_memmap" by default? From the commit > "200001eb140e: x86 boot: only pick up additional EFI memmap if add_efi_memmap > flag", I didn't understand why the decision was made so. Shouldn't we give > more preference to EFI Memory map rather than E820 table as it's the latest > and E820 is legacy? > > 3. Why isn't kernel checking that both the tables E820 table and EFI Memory > Map are in sync i.e. is there any *possibility* that a buggy BIOS could report > a region as usable in E820 table and as reserved in EFI Memory Map? > > [1] > https://elixir.bootlin.com/linux/latest/source/arch/x86/kernel/setup.c#L1106 > [2] > https://elixir.bootlin.com/linux/latest/source/arch/x86/kernel/e820.c#L1265 > [3] > https://elixir.bootlin.com/linux/latest/source/arch/x86/platform/efi/efi.c#L129 > > Regards, > Sai > Thanks Dave