|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 3/3] x86/PVH: Support relocatable dom0 kernels
On 13.03.2024 20:30, Jason Andryuk wrote:
> --- a/xen/arch/x86/hvm/dom0_build.c
> +++ b/xen/arch/x86/hvm/dom0_build.c
> @@ -537,6 +537,108 @@ static paddr_t __init find_memory(
> return INVALID_PADDR;
> }
>
> +static bool __init check_load_address(
> + const struct domain *d, const struct elf_binary *elf)
> +{
> + 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);
Both casts act on a pointer value. Such cannot legitimately be converted
to paddr_t; it only so happens that paddr_t is effectively the same as
uintptr_t right now. (Same issue again further down.) That said, I notice
we have pre-existing examples of this ...
> +/* Check the kernel load address, and adjust if necessary and possible. */
> +static bool __init check_and_adjust_load_address(
> + const struct domain *d, struct elf_binary *elf, struct elf_dom_parms
> *parms)
> +{
> + paddr_t reloc_base;
> +
> + if ( check_load_address(d, elf) )
> + return true;
> +
> + if ( parms->phys_align == UNSET_ADDR )
> + {
> + printk("Address conflict and %pd kernel is not relocatable\n", d);
> + return false;
> + }
> +
> + reloc_base = find_kernel_memory(d, elf, parms);
> + if ( reloc_base == 0 )
> + {
> + printk("Failed find a load address for the kernel\n");
> + return false;
> + }
> +
> + if ( opt_dom0_verbose )
> + printk("Relocating kernel from [%lx, %lx] -> [%lx, %lx]\n",
> + (paddr_t)elf->dest_base,
> + (paddr_t)elf->dest_base + elf->dest_size,
By using %p you clearly can avoid the casts here.
> + reloc_base, reloc_base + elf->dest_size);
I'm not convinced %lx is really appropriate for paddr_t.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |