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