Re: [PATCH] x86/virt/tdx: Warn on !4K level in tdh_mem_page_aug()

From: Yan Zhao

Date: Wed Aug 26 2026 - 03:23:50 EST


On Tue, Aug 25, 2026 at 06:31:11AM -0700, Sean Christopherson wrote:
> On Tue, Aug 25, 2026, Yan Zhao wrote:
> > Add a warning on a !4K level to loudly flag the unexpected condition when
> > callers pass in a level > 4K before tdh_mem_page_aug() supports huge pages.
> >
> > The warning makes the unexpected condition more obvious since the SEAMCALL
> > TDH_MEM_PAGE_AUG does not necessarily fail when the level is above 4K,
> > while tdh_mem_page_aug() only flushes the cache for a 4K page before huge
> > page support is added.
>
> If the only problem is the lack of CLFLUSH coverage, why not simply fix the
> bug? The changelog spends more effort justifying not fixing a bug than it would
> take to fix the bug.
Yes, the only missing piece for tdh_mem_page_aug() to work with huge pages
is the CLFLUSH coverage, which is exactly what's done in patch 1 [1] of the
TDX huge pages series.
(Note: [1]'s changelog is not well written. I've updated it in the internal
verion of TDX huge page v4 like this:

The SEAMCALL TDH_MEM_PAGE_AUG currently supports adding physical memory to
the S-EPT up to 2MB in size. The wrapper already accepts and passes "level"
to the SEAMCALL. The only missing piece for the wrapper to work with huge
pages correctly is to invoke CLFLUSH on the full huge page range, which
conservatively ensures that any dirty cache lines don't write back later
and clobber TD memory.
).


I should have inluded the justification for why not extending the CLFLUSH
coverage in this changelog.

So, would the following version look better?

Add a warning on a !4K level to loudly flag the unexpected condition when
callers pass in a level > 4K before tdh_mem_page_aug() supports huge pages.

The warning makes the unexpected condition more obvious since the SEAMCALL
TDH_MEM_PAGE_AUG does not necessarily fail when the level is above 4K,
while tdh_mem_page_aug() only flushes the cache for a 4K page before huge
page support is added.

Do not extend the CLFLUSH coverage to make tdh_mem_page_aug() work with
huge pages. Not only would this scatter huge page related changes across
multiple series, but it also makes little sense to have tdh_mem_page_aug()
alone work for huge pages without implementing its counterparts in the
unmapping and splitting paths.

Do not drop the "level" parameter instead, as it will be needed once huge
page support is added.

Do not use a stronger BUG_ON() because the cache flush is only needed when
the TDX module exposes a CLFLUSH_BEFORE_ALLOC bit, which has not yet been
observed in any TDX modules.

[1] https://lore.kernel.org/all/20260129011517.3545883-27-seanjc@xxxxxxxxxx