tdx_kvm_hypercall() issues KVM hypercall. Rewrite it without using __tdx_hypercall(). Use tdvmcall_trampoline() instead. It cuts code bloat substantially: Function old new delta tdx_kvm_hypercall 160 53 -107 Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> --- arch/x86/coco/tdx/tdx.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index b7299e668564..e7ffe1cd6d32 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -49,15 +49,15 @@ noinstr void __noreturn __tdx_hypercall_failed(void) long tdx_kvm_hypercall(unsigned int nr, unsigned long p1, unsigned long p2, unsigned long p3, unsigned long p4) { - struct tdx_module_args args = { - .r10 = nr, - .r11 = p1, - .r12 = p2, - .r13 = p3, - .r14 = p4, - }; + long ret; - return __tdx_hypercall(&args); + asm("call tdvmcall_trampoline\n\t" + "movq %%r10, %0\n\t" + : "=r" (ret) + : "a" (nr), "b" (p1), "D" (p2), "S"(p3), "d"(p4), "c" (0) + : "r12", "r13", "r14", "r15"); + + return ret; } EXPORT_SYMBOL_GPL(tdx_kvm_hypercall); #endif -- 2.43.0