On 8/7/2025 5:43 PM, Yan Zhao wrote:
While removing the KVM_BUG_ON() for the mirror root before invoking tdp_mmu_split_huge_page() in the fault path, update the hook split_external_spt to pass in shared mmu_lock info and invoke the hook in set_external_spte_present() on splitting is detected. Reject the splitting in TDX if the splitting is under shared mmu_lock. TDX requires different handling for splitting under shared or exclusive mmu_lock. Under a shared mmu_lock, TDX cannot kick off all vCPUs to avoid BUSY error from tdh_mem_page_demote(). As the current TDX module requires tdh_mem_range_block() to be invoked before each tdh_mem_page_demote(), if a BUSY error occurs, TDX must call tdh_mem_range_unblock() before returning the error to the KVM MMU core to roll back the old SPTE and retry. However, tdh_mem_range_unblock() may also fail due to contention. Reject splitting huge pages under shared mmu_lock for mirror root in TDX rather than KVM_BUG_ON() in KVM MMU core to allow for future real implementation of demote under shared mmu_lock once non-blocking demote is available.
Prefer "blockless" used in the cover letter to non-blocking. [...]