From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id CBB83EB64D7 for ; Wed, 28 Jun 2023 15:29:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1AEFA8D0003; Wed, 28 Jun 2023 11:29:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1101B8D0001; Wed, 28 Jun 2023 11:29:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F1A128D0003; Wed, 28 Jun 2023 11:29:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id E33C28D0001 for ; Wed, 28 Jun 2023 11:29:20 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id A5B861C8B5F for ; Wed, 28 Jun 2023 15:29:20 +0000 (UTC) X-FDA: 80952540480.07.8D26B93 Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) by imf14.hostedemail.com (Postfix) with ESMTP id 35205100003 for ; Wed, 28 Jun 2023 15:29:17 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b="j/HFTVj/"; dmarc=none; spf=none (imf14.hostedemail.com: domain of peterz@infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=peterz@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687966159; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=yx7U6Q1zu/jZUmaTgwSAgFdK87Ilf4lSewGXSOlnpeM=; b=bxapvnMsGag8wSRxzfIFxjyNdsCx8pssI3/DXKF5b16Ze9ANNMiXhI8znZBDpjPXdleqti FRLXWffDisCo8+1WRcyIy7kdVdOk4H7FaOXfDu592H+9mvG4sIG6gwI9yMKSOGX5Zxsy5s 0PWKlsEUtbRzhJHe9a+QLsQvw1bcl/E= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b="j/HFTVj/"; dmarc=none; spf=none (imf14.hostedemail.com: domain of peterz@infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=peterz@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687966159; a=rsa-sha256; cv=none; b=CGKpUbauRQ6+KNryX0X+uxLlv4qUsG4eg/81NQIr9/1f7hoeZhvWQOwAiFMw83Z3soWb1t te3HDIQ37s8a123D5wjeJ6VBHG5JiZor2PTliIsAFEuur0FmDvXBxGGxwxtw5mkn62HIGy FhcYjBnC3q8jtoP4G5CT7/tYg4I/FAw= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=yx7U6Q1zu/jZUmaTgwSAgFdK87Ilf4lSewGXSOlnpeM=; b=j/HFTVj/s4oubzmOZQkbXs2rGy m89lVq7Gr97cfnYWa6xARbldnNMVFMkRq8W1AjOORgsbE+JDe1bw/SVj909aNMoaQgR33VCyocwnB jMyRPT/RNe6DUCMNQAbSh+QXX1aa+EunTFd0+s08kp6YUsHL37mxE+tFruQTX09nNF/z4QHlhYdw/ Q5Ev1yPX6SCK8BzGSUJsl0YZ9yclM8o4/U1hfdZUH6Q02BMUKP1h+1S3pQ/wYL/2iY2EjTmEFlAP+ boThf77OadEYRu9XDFgab10EyNjLhgCEc6jrk8JIR2EiwsURk08sQ48aUNIfNGmiKUfXlxu01rmoL unCslgyg==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1qEX6M-005iuP-1l; Wed, 28 Jun 2023 15:29:02 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 16CA73002D6; Wed, 28 Jun 2023 17:29:01 +0200 (CEST) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 1000) id F340423B2EE90; Wed, 28 Jun 2023 17:29:00 +0200 (CEST) Date: Wed, 28 Jun 2023 17:29:00 +0200 From: Peter Zijlstra To: Kai Huang Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, dave.hansen@intel.com, kirill.shutemov@linux.intel.com, tony.luck@intel.com, tglx@linutronix.de, bp@alien8.de, mingo@redhat.com, hpa@zytor.com, seanjc@google.com, pbonzini@redhat.com, david@redhat.com, dan.j.williams@intel.com, rafael.j.wysocki@intel.com, ashok.raj@intel.com, reinette.chatre@intel.com, len.brown@intel.com, ak@linux.intel.com, isaku.yamahata@intel.com, ying.huang@intel.com, chao.gao@intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, nik.borisov@suse.com, bagasdotme@gmail.com, sagis@google.com, imammedo@redhat.com Subject: Re: [PATCH v12 20/22] x86/virt/tdx: Allow SEAMCALL to handle #UD and #GP Message-ID: <20230628152900.GI2438817@hirez.programming.kicks-ass.net> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 35205100003 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: i76ax8uqwf1xai3qphwpsswttk5gw3p7 X-HE-Tag: 1687966157-200130 X-HE-Meta: U2FsdGVkX196mPXWF+CNvLwWRZ4NQIxUej6S4EpdIov2zWL0yO3Q/TnfN7dy/doB5JDjYnDaYashcupqBa7hHbgopKbOrEVJ5aII2jVKNKOmQjVuuACxju7hVwvdsWvxXVJMOErYs7oTxETNVA6uuoTqbX9qykmcaIwktDIzrSilG+dJS526RX/96/qwxFvbbtxdcTJnz71UIZppHLyCAAiH5DlCjOgNePp45hTLj+xqO2A17+ZVdM7azE6wFdAgH3/LdCGqpJW2LWXKWC7yOhhDUTJSxWySbLncK3RJuWyAWU9WyRRvNaLJx05pN9SDIe/jGTkksT4SuW7p3l88YOUDcDRmj6aJpEYI7nImV8HHuxxJvg+8SwMcxgnBwfod8bT0uZ8UlfxkkD7f6J68fiaGKfufZSmOFWnEu/Z5QIy19FXZAc2MWH4Gm0JK6UXKF38/943lwmxcKri72be6Z4Iq8TBlarCPPwDPe5RhYTIUIOFB4s5rnYPujrDv3lL+hVzJ/R4qH6DpOwwK38YlJxvf3qhcQVCJlj7iJ7KPIlHaBjbrRTIdFMdMFuw2beYzeN2rbDoAJv2+b81+l+TxHw8dm7g4IuwjGCO8eNh0K8fwwR7xAvirbCsQ8GuGWGnuOCW7cNGLnZJFStT7/TELnBYTn15p0sudBqysmBRI7NENLhb37bTHRRJ890hzR/tk01ywmeDRhaVysNehfUBUgnWjxlTlRqX2V4KO9ktIl0vdfxFoo2HEWM5NRsyTVLuCsA4Zhp7lOEVU1jBwkqE/smZgeMRo9DcvmGHfSv4kxwhSIRH7E2TdjiHYcqG/+kmEMrsXcED1H8MHldpiOste2bxfVZi7Gms8ADCMlcx4P0zGvNP5wyE9EvaWhcC0/QpLc5gommyD/uh+Dno8wMBqwqis4QvAaEuEowPaLirVyb26r+eLrQRmnmDgrAlqpQ2EOJvp1GWm5eo1gtwwLMv Bb/lnYkj N+QxeSyvxZX0+rFuk7USBiOjSX/BO1I2zwmELsI/X3mXV0875GD17ggJrAaTG+ROu4elSCMGNBcLldGAJJUPoIL4xIfZs0jLTJ1hGVJoDJkDYrwShBWc4xhK4xzRphWlemI9huvvs1hQIDSE= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000516, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, Jun 27, 2023 at 02:12:50AM +1200, Kai Huang wrote: > diff --git a/arch/x86/virt/vmx/tdx/tdxcall.S b/arch/x86/virt/vmx/tdx/tdxcall.S > index 49a54356ae99..757b0c34be10 100644 > --- a/arch/x86/virt/vmx/tdx/tdxcall.S > +++ b/arch/x86/virt/vmx/tdx/tdxcall.S > @@ -1,6 +1,7 @@ > /* SPDX-License-Identifier: GPL-2.0 */ > #include > #include > +#include > > /* > * TDCALL and SEAMCALL are supported in Binutils >= 2.36. > @@ -45,6 +46,7 @@ > /* Leave input param 2 in RDX */ > > .if \host > +1: > seamcall So what registers are actually clobbered by SEAMCALL ? There's a distinct lack of it in SDM Vol.2 instruction list :-( > /* > * SEAMCALL instruction is essentially a VMExit from VMX root > @@ -57,10 +59,23 @@ > * This value will never be used as actual SEAMCALL error code as > * it is from the Reserved status code class. > */ > - jnc .Lno_vmfailinvalid > + jnc .Lseamcall_out > mov $TDX_SEAMCALL_VMFAILINVALID, %rax > -.Lno_vmfailinvalid: > + jmp .Lseamcall_out > +2: > + /* > + * SEAMCALL caused #GP or #UD. By reaching here %eax contains > + * the trap number. Convert the trap number to the TDX error > + * code by setting TDX_SW_ERROR to the high 32-bits of %rax. > + * > + * Note cannot OR TDX_SW_ERROR directly to %rax as OR instruction > + * only accepts 32-bit immediate at most. > + */ > + mov $TDX_SW_ERROR, %r12 > + orq %r12, %rax > > + _ASM_EXTABLE_FAULT(1b, 2b) > +.Lseamcall_out: This is all pretty atrocious code flow... would it at all be possible to write it like: SYM_FUNC_START(...) .if \host 1: seamcall cmovc %spare, %rax 2: .else tdcall .endif ..... RET 3: mov $TDX_SW_ERROR, %r12 orq %r12, %rax jmp 2b _ASM_EXTABLE_FAULT(1b, 3b) SYM_FUNC_END() That is, having all that inline in the hotpath is quite horrific.