[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] xen/arm: mpu: Fix ioremap_attr region size and return value
- To: Michal Orzel <michal.orzel@xxxxxxx>
- From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
- Date: Thu, 2 Apr 2026 08:17:46 +0000
- Accept-language: en-GB, en-US
- Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=amd.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
- Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=e2XYJZR51dIbykVyt2stnsLHXYp1DL1SGjAbkVzeZsY=; b=wPoFiywIlCZN3lM3KbrncB4DtiHdcnteYpryTIpEZHQ9UH9SuuwmhPuRL/07wgRYniCf37sU+uQK3dzBsc5RwdcPqfzDxCGNmKDWcABxPhuv8saZgWr0pWk11b+bZs8FJ/cv9jFNjwNFVG/gPxPtbyQm7+B9SXYBf3pkhvKd31NAOtDrPt8LM7uhlR9aCvfoF1tkKaTFmCv06kQzEsDJr8KpAyLZHphnZUrNu6XQEOH74xeHCqCbAT28nFrkYBuC9Japnh0mY0ZZ37BREF1NPDDYZHE9q9ZAJLQ2ldtTUVUeSg4YaZzA2r25tbLtqHqrI07Si+4QElpkhgYvVyX7Mw==
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=e2XYJZR51dIbykVyt2stnsLHXYp1DL1SGjAbkVzeZsY=; b=KRirKXq6vzD+seJI+rz07AobJZ81zcUa9/Zu5MEtcneg4dv++JYIx/qDf+WA98MVDmUxzUc2PvyMxCxvyFzO3YYvHAkdNXCDmcKg30ql5eV0Pt9lGst+E2Dr0J3iXgdDc0LzahejJh+que7MTK5q7Ej+J4ZpTb+/Y6mwqGt8FV00cfGi1hoX0nEzkqEddH+A11nyHZhen+snoziSi9h9XSbk5E50Kbf+dw0MJ18PAEiHr6MhnVX4fn1of0i4AUNXyAiP9EQIWmDHEWtD9H8bMe+aH2mFr//dOf0RmdLhj5oL7iEjBuQfpBWKmN1yN+Mzs8DG1PbUc6mdvV2qYas8rw==
- Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=DxHAbccolIbSmecPqJLVZkr4YaEA/186gbcI3+tj58R4Ka6Z61ucA88s4jJB+AhgbxGSihvzeEuXIEXS2IawhwG/PyQwgLlfKysuZvjWqQRDSCAgphrJea+5IlVaDjhL10066Ovw+7eSkTvBy8lWHbNxuyBvZjkOdzbLlz28onlravkqadrBih7CGdyeXU0jTe5TpuiQYgZ5XvJ+MZe3nvNQ9WQjTLHfJfEWLs+ejGfPGiZG0DzFYO8w8FZfpf3YfTWM3P7pCptJXU1gbBu4xQXV3EAdN7hbyn2zFXSrMPlrIDcIrbc6NRIuq3/b5dejVv3MPQ+ztQbO9sOSTB9kOg==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=l09mxAgwZR6pHKyc2qhmJuPyoN3FRjpMSUtxVbYMbD1M2CWbxYs7yY4Z88Ci6bEzaQN3ratCOY6hlJbWxpYj97bf6guTycvy/YK9PJlsJr1JFi00LXeNHW3SLb5VOzfKNlww+j/WKKGc8kgWf4IzJ4tS6xQhw7pEb7HDvSVmcHCIAAFevViWspJkjhbupzvX7pPW82vibTsLJPt/tDhdmy2BAepUT1F8Rudeh9e7hLrDUK22Pnbk7kxCmrSTDiI6k11s+4H1m1ByWX/y0Pmk3tumfaxdyoUm+XhXKvsedjEcRwmpBMMDYZsRqJjSy+GbJqZw/feNkZyTkoObQ/P0UQ==
- Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
- Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
- Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
- Delivery-date: Thu, 02 Apr 2026 08:19:07 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
- Nodisclaimer: true
- Thread-index: AQHcwnZX7LJ68/q3sE+uKvflFE4pcLXLbU4A
- Thread-topic: [PATCH] xen/arm: mpu: Fix ioremap_attr region size and return value
Hi Michal,
> On 2 Apr 2026, at 08:56, Michal Orzel <michal.orzel@xxxxxxx> wrote:
>
> ioremap_attr() computes end_pg as round_pgup(start_pg + len), but
> start_pg has already had the sub-page offset stripped by round_pgdown().
> When start is not page-aligned, the sub-page offset is lost and the
> resulting MPU protection region can be one page too small, leaving the
> tail of the requested range covered by something else.
>
> Additionally, the function returns maddr_to_virt(start_pg) — the
> page-aligned base dropping the sub-page offset that callers (e.g. ioremap
> of an unaligned MMIO base) depend on to reach the correct register block.
>
> Fix end_pg to use the original start so the sub-page tail is included
> in the rounding, and return the original start address to preserve the
> offset, matching the behaviour of other ioremap implementations.
>
> Fixes: efeec4c70798 ("arm/mpu: Implement ioremap_attr for MPU")
> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
> ---
> xen/arch/arm/mpu/mm.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/xen/arch/arm/mpu/mm.c b/xen/arch/arm/mpu/mm.c
> index 6b3b0b06e95d..aff88bd3a9c1 100644
> --- a/xen/arch/arm/mpu/mm.c
> +++ b/xen/arch/arm/mpu/mm.c
> @@ -596,13 +596,13 @@ void free_init_memory(void)
> void __iomem *ioremap_attr(paddr_t start, size_t len, unsigned int flags)
> {
> paddr_t start_pg = round_pgdown(start);
> - paddr_t end_pg = round_pgup(start_pg + len);
> + paddr_t end_pg = round_pgup(start + len);
>
> if ( xen_mpumap_update(start_pg, end_pg, flags) )
> return NULL;
>
> /* Mapped or already mapped */
> - return maddr_to_virt(start_pg);
> + return maddr_to_virt(start);
> }
>
> /*
> --
> 2.43.0
>
>
good catch!
Reviewed-by: Luca Fancellu <luca.fancellu@xxxxxxx>
Cheers,
Luca
|