From: Yu Peng <pengyu@kylinos.cn>
To: Will Deacon <will@kernel.org>
Cc: lpieralisi@kernel.org, akpm@linux-foundation.org,
catalin.marinas@arm.com, guohanjun@huawei.com, lenb@kernel.org,
linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
rafael@kernel.org, sudeep.holla@kernel.org
Subject: Re: [RFC] arm64: early_ioremap fails to map ACPI MADT on 64K pages
Date: Fri, 26 Jun 2026 09:55:20 +0800 [thread overview]
Message-ID: <08fd96fa-ee3a-4904-bd11-bb08bd90436f@kylinos.cn> (raw)
In-Reply-To: <ajp25MIQJWWE1ziY@willie-the-truck>
On 6/23/2026 8:07 PM, Will Deacon wrote:
> On Tue, Jun 23, 2026 at 10:47:12AM +0800, Yu Peng wrote:
>> Hi Lorenzo, Hanjun, Will,
>>
>> Thanks for confirming.
>>
>> I will send a proper patch for this. The change I plan to post is along
>> these lines:
>>
>> diff --git a/arch/arm64/include/asm/fixmap.h b/arch/arm64/include/asm/fixmap.h
>> index ... .. ...
>> --- a/arch/arm64/include/asm/fixmap.h
>> +++ b/arch/arm64/include/asm/fixmap.h
>> @@ -79,7 +79,11 @@ enum fixed_addresses {
>> * Temporary boot-time mappings, used by early_ioremap(),
>> * before ioremap() is functional.
>> */
>> +#ifdef CONFIG_ARM64_64K_PAGES
>> +#define NR_FIX_BTMAPS (SZ_512K / PAGE_SIZE)
>> +#else
>> #define NR_FIX_BTMAPS (SZ_256K / PAGE_SIZE)
>> +#endif
>> #define FIX_BTMAPS_SLOTS 7
>> #define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS)
>
> I still don't understand why this issue is specific to 64k pages, though.
>
> In the example you gave, the thing wasn't even 4k aligned.
>
> Will
You're right, this is not specific to 64K pages.
I looked at 64K first because the current slot is only 4 pages there,
compared with 64 pages on 4K. Any initial offset therefore leaves much
less room in the page-aligned span.
A blanket SZ_512K slot does not look right either. On 4K pages it would
make the boot-ioremap area 512K * 7 = 3.5M, while arm64 requires it to
stay within one PMD:
/*
* The boot-ioremap range spans multiple pmds, for which
* we are not prepared:
*/
BUILD_BUG_ON((__fix_to_virt(FIX_BTMAP_BEGIN) >> PMD_SHIFT)
!= (__fix_to_virt(FIX_BTMAP_END) >> PMD_SHIFT));
So I think the better fix is to preserve the 256K payload budget and add
one page for the possible initial offset:
#define NR_FIX_BTMAPS ((SZ_256K / PAGE_SIZE) + 1)
That should allow any table up to 256K to be mapped regardless of its
initial offset, without exceeding the single-PMD constraint.
Does this direction sound reasonable?
Thanks,
Yu Peng
prev parent reply other threads:[~2026-06-26 1:55 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-17 6:01 Yu Peng
2026-06-19 14:43 ` Will Deacon
2026-06-22 8:55 ` Hanjun Guo
2026-06-22 9:49 ` Lorenzo Pieralisi
2026-06-23 2:47 ` Yu Peng
2026-06-23 12:07 ` Will Deacon
2026-06-26 1:55 ` Yu Peng [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=08fd96fa-ee3a-4904-bd11-bb08bd90436f@kylinos.cn \
--to=pengyu@kylinos.cn \
--cc=akpm@linux-foundation.org \
--cc=catalin.marinas@arm.com \
--cc=guohanjun@huawei.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lpieralisi@kernel.org \
--cc=rafael@kernel.org \
--cc=sudeep.holla@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®