Re: [BUG] Fault during memory acceptance for TDX VMs with certain memory sizes

From: Kiryl Shutsemau

Date: Fri Feb 13 2026 - 06:57:09 EST


On Fri, Feb 13, 2026 at 09:34:46AM +0100, Moritz Sanft wrote:
> > Any chance you can throw
> > a bunch of printk()'s in the kernel and see what all the fields in here are:
> >
> > struct efi_unaccepted_memory {
> > u32 version;
> > u32 unit_size;
> > u64 phys_base;
> > u64 size;
> > unsigned long bitmap[];
> > };
> >
> > Along with the address of bitmap[] and all the calls to: bitmap_clear()?
>
> Thanks for the guidance. I've added this logging via the patch in [1], which
> produced the following output:
>
> ```
> [ 0.033292] accept_memory(start=0x0000000000099000 size=0x6000)
> [ 0.037860] unaccepted: version=1 unit_size=2097152
> phys_base=0x100000000 size=0xfdc bitmap=ff1100007d624030
> [ 0.041469] Using GB pages for direct mapping
> [ 0.043090] accept_memory(start=0x00000010db600000 size=0x200000)
> [ 0.045311] unaccepted: version=1 unit_size=2097152
> phys_base=0x100000000 size=0xfdc bitmap=ff1100007d624030
> [ 0.058123] bitmap_clear(bitmap=ff1100007d624030, start=32475, len=1)
> [ 0.060921] accept_memory(start=0x00000010db7ff000 size=0x1000)
> [ 0.063142] unaccepted: version=1 unit_size=2097152
> phys_base=0x100000000 size=0xfdc bitmap=ff1100007d624030
> [ 0.066865] accept_memory(start=0x00000010db7fe000 size=0x1000)
> [ 0.069096] unaccepted: version=1 unit_size=2097152
> phys_base=0x100000000 size=0xfdc bitmap=ff1100007d624030
> [ 0.073705] accept_memory(start=0x00000010db7fd000 size=0x1000)
> [ 0.075908] unaccepted: version=1 unit_size=2097152
> phys_base=0x100000000 size=0xfdc bitmap=ff1100007d624030
> // unrelated logs omitted here
> [ 0.134988] accept_memory(start=0x00000010db7fcf40 size=0x83)
> [ 0.137152] unaccepted: version=1 unit_size=2097152
> phys_base=0x100000000 size=0xfdc bitmap=ff1100007d624030
> [ 0.140828] BUG: unable to handle page fault for address:
> ff1100007d625008
> ```
>
> Find a full log attached in [2].
>
> Please let me know if we need to gather any further logs - we're happy to do
> so.

Could you check it this patch makes a difference:

diff --git a/drivers/firmware/efi/unaccepted_memory.c b/drivers/firmware/efi/unaccepted_memory.c
index c2c067eff634..f2a00cd429f2 100644
--- a/drivers/firmware/efi/unaccepted_memory.c
+++ b/drivers/firmware/efi/unaccepted_memory.c
@@ -35,7 +35,7 @@ void accept_memory(phys_addr_t start, unsigned long size)
struct efi_unaccepted_memory *unaccepted;
unsigned long range_start, range_end;
struct accept_range range, *entry;
- phys_addr_t end = start + size;
+ phys_addr_t end = start + PAGE_ALIGN(size);
unsigned long flags;
u64 unit_size;

--
Kiryl Shutsemau / Kirill A. Shutemov