[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/arm: exclude xen,reg from domU extended regions
commit fba1b0974dd8ea3e2d2418c33c93ce7c484c2ab5 Author: Stewart Hildebrand <stewart.hildebrand@xxxxxxx> AuthorDate: Thu May 8 09:20:34 2025 -0400 Commit: Stefano Stabellini <stefano.stabellini@xxxxxxx> CommitDate: Thu May 8 16:44:38 2025 -0700 xen/arm: exclude xen,reg from domU extended regions When a device is passed through to a dom0less domU, the xen,reg ranges may overlap with the extended regions. Remove xen,reg from extended regions. Signed-off-by: Stewart Hildebrand <stewart.hildebrand@xxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> --- xen/arch/arm/domain_build.c | 7 +++++++ xen/common/device-tree/dom0less-build.c | 19 ++++++++++++++++++- xen/include/xen/fdt-kernel.h | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 05a77a4f92..b189a7cfae 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -973,6 +973,13 @@ static int __init find_domU_holes(const struct kernel_info *kinfo, if ( res ) goto out; + if ( kinfo->xen_reg_assigned ) + { + res = rangeset_subtract(mem_holes, kinfo->xen_reg_assigned); + if ( res ) + goto out; + } + res = rangeset_report_ranges(mem_holes, 0, PFN_DOWN((1ULL << p2m_ipa_bits) - 1), add_ext_regions, ext_regions); diff --git a/xen/common/device-tree/dom0less-build.c b/xen/common/device-tree/dom0less-build.c index 4aa36c8ef3..2c56f13771 100644 --- a/xen/common/device-tree/dom0less-build.c +++ b/xen/common/device-tree/dom0less-build.c @@ -146,6 +146,14 @@ static int __init handle_passthrough_prop(struct kernel_info *kinfo, int res; paddr_t mstart, size, gstart; + if ( !kinfo->xen_reg_assigned ) + { + kinfo->xen_reg_assigned = rangeset_new(NULL, NULL, 0); + + if ( !kinfo->xen_reg_assigned ) + return -ENOMEM; + } + /* xen,reg specifies where to map the MMIO region */ cell = (const __be32 *)xen_reg->data; len = fdt32_to_cpu(xen_reg->len) / ((address_cells * 2 + size_cells) * @@ -187,6 +195,11 @@ static int __init handle_passthrough_prop(struct kernel_info *kinfo, mstart, gstart); return -EFAULT; } + + res = rangeset_add_range(kinfo->xen_reg_assigned, PFN_DOWN(gstart), + PFN_DOWN(gstart + size - 1)); + if ( res ) + return res; } /* @@ -814,7 +827,11 @@ static int __init construct_domU(struct domain *d, domain_vcpu_affinity(d, node); - return alloc_xenstore_params(&kinfo); + rc = alloc_xenstore_params(&kinfo); + + rangeset_destroy(kinfo.xen_reg_assigned); + + return rc; } void __init create_domUs(void) diff --git a/xen/include/xen/fdt-kernel.h b/xen/include/xen/fdt-kernel.h index 7a6cd67c22..1939c3ebf7 100644 --- a/xen/include/xen/fdt-kernel.h +++ b/xen/include/xen/fdt-kernel.h @@ -24,6 +24,7 @@ struct kernel_info { #ifdef CONFIG_STATIC_SHM struct shared_meminfo shm_mem; #endif + struct rangeset *xen_reg_assigned; /* kernel entry point */ paddr_t entry; -- generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |