On 13.03.2024 22:02, Jason Andryuk wrote: > On 2024-03-13 15:30, Jason Andryuk wrote: >> +/* Find an e820 RAM region that fits the kernel at a suitable alignment. */ >> +static paddr_t __init find_kernel_memory( >> + const struct domain *d, struct elf_binary *elf, >> + const struct elf_dom_parms *parms) >> +{ >> + paddr_t kernel_start = (paddr_t)elf->dest_base & PAGE_MASK; >> + paddr_t kernel_end = PAGE_ALIGN((paddr_t)elf->dest_base + >> elf->dest_size); >> + paddr_t kernel_size = kernel_end - kernel_start; >> + unsigned int i; >> + >> + /* >> + * The memory map is sorted and all RAM regions starts and sizes are >> + * aligned to page boundaries. >> + */ >> + for ( i = 0; i < d->arch.nr_e820; i++ ) >> + { >> + paddr_t start = d->arch.e820[i].addr; >> + paddr_t end = d->arch.e820[i].addr + d->arch.e820[i].size; >> + paddr_t kstart, kend; >> + >> + if ( d->arch.e820[i].type != E820_RAM ) >> + continue; >> + >> + if ( d->arch.e820[i].size < kernel_size ) >> + continue; >> + >> + kstart = ROUNDUP(start, parms->phys_align); >> + kstart = kstart < parms->phys_min ? parms->phys_min : kstart; > > This should be > kstart = MAX(kstart, parms->phys_min);
Except that MAX() really ought to be the last resort; max() and max_t() want considering in preference. Jan