mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86/boot: Explain how discard_initial_images() works
discard_initial_images() only works because init_domheap_pages() with ps==pe is a no-op. In dom0_construct(), explaining the significance of setting the initrd length to 0, and put an explicit check in discard_initial_images(). No functional change. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Daniel P. Smith <dpsmith@apertussolutions.com>
This commit is contained in:
1 parent
83892f6a12
commit
fa1463cecf
2 files changed
+19
-3
No files matched your search
@@ -641,6 +641,15 @@ static int __init dom0_construct(struct domain *d,
|
||||
if ( assign_pages(mfn_to_page(_mfn(mfn++)), 1, d, 0) )
|
||||
BUG();
|
||||
}
|
||||
|
||||
/*
|
||||
* We have either:
|
||||
* - Mapped the initrd directly into dom0, or
|
||||
* - Copied it and freed the module.
|
||||
*
|
||||
* Either way, tell discard_initial_images() to not free it a second
|
||||
* time.
|
||||
*/
|
||||
initrd->mod_end = 0;
|
||||
|
||||
iommu_memory_setup(d, "initrd", mfn_to_page(_mfn(initrd_mfn)),
|
||||
|
||||
+10
-3
@@ -340,7 +340,7 @@ unsigned long __init initial_images_nrpages(nodeid_t node)
|
||||
return nr;
|
||||
}
|
||||
|
||||
void __init discard_initial_images(void)
|
||||
void __init discard_initial_images(void) /* a.k.a. Free boot modules */
|
||||
{
|
||||
struct boot_info *bi = &xen_boot_info;
|
||||
unsigned int i;
|
||||
@@ -348,9 +348,16 @@ void __init discard_initial_images(void)
|
||||
for ( i = 0; i < bi->nr_modules; ++i )
|
||||
{
|
||||
uint64_t start = pfn_to_paddr(bi->mods[i].mod->mod_start);
|
||||
uint64_t size = bi->mods[i].mod->mod_end;
|
||||
|
||||
init_domheap_pages(start,
|
||||
start + PAGE_ALIGN(bi->mods[i].mod->mod_end));
|
||||
/*
|
||||
* Sometimes the initrd is mapped, rather than copied, into dom0.
|
||||
* Size being 0 is how we're instructed to leave the module alone.
|
||||
*/
|
||||
if ( size == 0 )
|
||||
continue;
|
||||
|
||||
init_domheap_pages(start, start + PAGE_ALIGN(size));
|
||||
}
|
||||
|
||||
bi->nr_modules = 0;
|
||||
|
||||