On Tue, 2025-01-14 at 16:49 -0800, Rick Edgecombe wrote: > Lastly, TD's are not booting for me, with a QEMU error. Still debugging this. I was able to boot kvm-coco-queue with the below two fixes. I'll glue the TDX tests back on tomorrow and test further. Regarding the mk_keyed_paddr() cast/shift issue, Dave had expressed a preference for int over u16 for keyids: https://lore.kernel.org/kvm/3a32ce4a-b108-4f06-a22d-14e9c2e135f7@xxxxxxxxx/ diff --git a/arch/x86/include/asm/tdx.h b/arch/x86/include/asm/tdx.h index 201f2e910411..e83f4bac6e9a 100644 --- a/arch/x86/include/asm/tdx.h +++ b/arch/x86/include/asm/tdx.h @@ -149,7 +149,7 @@ static inline u64 mk_keyed_paddr(u16 hkid, struct page *page) ret = page_to_phys(page); /* KeyID bits are just above the physical address bits: */ - ret |= hkid << boot_cpu_data.x86_phys_bits; + ret |= (u64)hkid << boot_cpu_data.x86_phys_bits; return ret; } diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index df6928a62e2d..307b6ee083d0 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -2307,7 +2307,7 @@ static int __tdx_td_init(struct kvm *kvm, struct td_params *td_params, struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm); cpumask_var_t packages; struct page **tdcs_pages = NULL; - struct page *page, *tdr_page; + struct page *tdr_page; int ret, i; u64 err, rcx; @@ -2333,7 +2333,7 @@ static int __tdx_td_init(struct kvm *kvm, struct td_params *td_params, for (i = 0; i < kvm_tdx->td.tdcs_nr_pages; i++) { tdcs_pages[i] = alloc_page(GFP_KERNEL); - if (!page) + if (!tdcs_pages[i]) goto free_tdcs; }