|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] xen/arm: fix iomem_ranges cfg in map_range_to_domain()
commit e0daeac7b1d7a4cbdb7365b4eccf6ad398caea83
Author: Grygorii Strashko <gragst.linux@xxxxxxxxx>
AuthorDate: Tue Feb 18 13:22:53 2025 +0200
Commit: Julien Grall <julien@xxxxxxx>
CommitDate: Wed Mar 12 19:47:04 2025 +0000
xen/arm: fix iomem_ranges cfg in map_range_to_domain()
Now the following code in map_range_to_domain()
res = rangeset_add_range(mr_data->iomem_ranges,
paddr_to_pfn(addr),
paddr_to_pfn_aligned(addr + len - 1));
where
paddr_to_pfn_aligned(paddr) defined as paddr_to_pfn(PAGE_ALIGN(paddr))
calculates the iomem range end address by rounding it up to the next Xen
page with incorrect assumption that iomem range end address passed to
rangeset_add_range() is exclusive, while it is expected to be inclusive.
For example, if requested range is [00e6140000:00e6141004] then it expected
to add [e6140:e6141] range (num_pages=2) to the mr_data->iomem_ranges
rangeset, but will add [e6140:e6142] (num_pages=3) instead.
To fix it, drop PAGE_ALIGN() from the iomem range end address calculation
formula and just use paddr_to_pfn(addr + len - 1).
Fixes: 57d4d7d4e8f3b (arm/asm/setup.h: Update struct map_range_data to add
rangeset.")
Signed-off-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx>
---
xen/arch/arm/device.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xen/arch/arm/device.c b/xen/arch/arm/device.c
index 97e613e06a..5e1c1cc326 100644
--- a/xen/arch/arm/device.c
+++ b/xen/arch/arm/device.c
@@ -107,7 +107,7 @@ int map_range_to_domain(const struct dt_device_node *dev,
{
res = rangeset_add_range(mr_data->iomem_ranges,
paddr_to_pfn(addr),
- paddr_to_pfn_aligned(addr + len - 1));
+ paddr_to_pfn(addr + len - 1));
if ( res )
return res;
}
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |