On Thu, Feb 06, 2025 at 03:27:52PM +0200, Mike Rapoport wrote: >From: Alexander Graf <graf@xxxxxxxxxx> [...] >diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c >index 82b96ed9890a..0b81cd70b02a 100644 >--- a/arch/x86/kernel/e820.c >+++ b/arch/x86/kernel/e820.c >@@ -1329,6 +1329,24 @@ void __init e820__memblock_setup(void) > memblock_add(entry->addr, entry->size); > } > >+ /* >+ * At this point with KHO we only allocate from scratch memory. >+ * At the same time, we configure memblock to only allow >+ * allocations from memory below ISA_END_ADDRESS which is not >+ * a natural scratch region, because Linux ignores memory below >+ * ISA_END_ADDRESS at runtime. Beside very few (if any) early >+ * allocations, we must allocate real-mode trapoline below >+ * ISA_END_ADDRESS. >+ * >+ * To make sure that we can actually perform allocations during >+ * this phase, let's mark memory below ISA_END_ADDRESS as scratch >+ * so we can allocate from there in a scratch-only world. >+ * >+ * After real mode trampoline is allocated, we clear scratch >+ * marking from the memory below ISA_END_ADDRESS >+ */ >+ memblock_mark_kho_scratch(0, ISA_END_ADDRESS); >+ At the beginning of e820__memblock_setup() we call memblock_allow_resize(), which means during adding memory region it could double the array. And the memory used here is from some region just added. But with KHO, I am afraid it would fail? > /* Throw away partial pages: */ > memblock_trim_memory(PAGE_SIZE); > -- Wei Yang Help you, Help me