Skip to content

Commit

Permalink
x86/boot: Explain how discard_initial_images() works
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Daniel P. Smith <[email protected]>
  • Loading branch information
andyhhp committed Oct 24, 2024
1 parent 83892f6 commit fa1463c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
9 changes: 9 additions & 0 deletions xen/arch/x86/pv/dom0_build.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)),
Expand Down
13 changes: 10 additions & 3 deletions xen/arch/x86/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,17 +340,24 @@ 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;

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;
Expand Down

0 comments on commit fa1463c

Please sign in to comment.