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@amd.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
Stewart Hildebrand authored and Stefano Stabellini committed 2025-05-08 16:44:38 -07:00
1 parent 31703c5d7a
commit fba1b0974d
3 files changed
+26 -1

No files matched your search

+7
View File
@@ -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);
+18 -1
View File
@@ -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)
+1
View File
@@ -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;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.