From patchwork Thu Jan 12 10:14:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kirill A. Shutemov" X-Patchwork-Id: 42348 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3801518wrt; Thu, 12 Jan 2023 02:16:25 -0800 (PST) X-Google-Smtp-Source: AMrXdXv8zY6AvLElf0reRmB2/lTx7/CQ40CGTw66lWdufA2YX9Mu1IfiBvNZ6I8zefPzRwzAb61Q X-Received: by 2002:a05:6402:3886:b0:491:f4ae:1805 with SMTP id fd6-20020a056402388600b00491f4ae1805mr25198782edb.6.1673518584832; Thu, 12 Jan 2023 02:16:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673518584; cv=none; d=google.com; s=arc-20160816; b=NNbv4IXpwYIrXtRj0Mwcz2/nwZ0XcPyZJfzao8052+lWPwWKUaVEJmh8gj+zurANLw A/qE1sTTyAXW3gq4K6HSxjAiP0CL+jlm6zYByKVCM+oY4rCvL4xa7v0ofgntU9ma5hB2 RoEJrXiSzlER08ue2SMtNmf3XzD3uKg4VBl04Y6dnibsnZGrMtkIB4hz0m8NpnoAdgJC M++X7J9pNaMdSogIvF4N/GSEi2+JPqsu0+npMaKclRwvHL27GT6YmOa6ZXSOgaut0wOs 1EoaxjNaIxAPt/COuJNuiT6Qz4d8ek9xCdOFEre7vPrJq0JJcoR+N7Vc0SxqHOT1T3Ty WsuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=V1RKezW1xbMzPzso0umKZ/sDR6h4NUzCtWKJFIYtr58=; b=vrVEA58vNCzbqjl5dJynEgUokizYNtuZhqB/OoTbRRi+xs1fu5nuz1o4+bGgsXXDyn kvqZLpcweKsX+c41E+11PU1auLW4eIGLvNJrPLkVGOuDs430KfOMQL9Ntp1iFLRGd/8Z ouoL8NTKAiA4TGNG6YKvKE9yd0wnAD2NVzfovjDXOVES/AOkPjPIjCggwd8gsT+e1Olg 4h6citz1gDJIjuy/pQpqlOTpGmN3nEmv4QS3MEvDbZW4zURxbAROPrk/tVVpPz1jHggi ATAorvm+2jtXgpnji45Sj9mF3zHlqcykjVGFdV21rsFLle3f5XKLSKNZeZKxAbpE/GvP kRlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=FWQmKBvN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v30-20020a50d59e000000b0048eaa959ebfsi18205950edi.161.2023.01.12.02.16.01; Thu, 12 Jan 2023 02:16:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=FWQmKBvN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239783AbjALKPp (ORCPT + 99 others); Thu, 12 Jan 2023 05:15:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239859AbjALKO6 (ORCPT ); Thu, 12 Jan 2023 05:14:58 -0500 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 503562BC1 for ; Thu, 12 Jan 2023 02:14:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673518460; x=1705054460; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=u1+Us1v7vAIWg661NR3lzpiichhOwsbWY0acStIamJs=; b=FWQmKBvNSLZnyUAVl9tWid+tP9CLFfS/BtEpnTkrKcMMQa6iiodpNxLl flrOYTFq877izKMkXnoga2Tdrp0CV7f2yOje5YN6Wn3wrtiKsp6qA6keq KbysaM9Me/3msOYcONSla+ezajNZhpazBJ/djMXWFjfaOqXAXjlAzt6Jz bf1ajXe6th6Dh2eG2JYxM0BzJau+RGY+ltTkn7qqfvQOZIXDVu7dwhuof gj4OEGgPj6IakCfWBHMUeSdKti+ncF1CAtbg6ONdg74/2iqC5jBuD7tdT pEJgg6+hC4ks7+fxP8m/EPMDL89NAdhRL4ELVuRQV7SSiH81bIA2f+Xap w==; X-IronPort-AV: E=McAfee;i="6500,9779,10586"; a="350892159" X-IronPort-AV: E=Sophos;i="5.96,319,1665471600"; d="scan'208";a="350892159" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2023 02:14:18 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10586"; a="659722890" X-IronPort-AV: E=Sophos;i="5.96,319,1665471600"; d="scan'208";a="659722890" Received: from glieseu-mobl.ger.corp.intel.com (HELO box.shutemov.name) ([10.252.52.1]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2023 02:14:16 -0800 Received: by box.shutemov.name (Postfix, from userid 1000) id 9B74E109AF4; Thu, 12 Jan 2023 13:14:13 +0300 (+03) From: "Kirill A. Shutemov" To: Dave Hansen , Borislav Petkov , Andy Lutomirski Cc: Kuppuswamy Sathyanarayanan , Thomas Gleixner , Elena Reshetova , x86@kernel.org, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: [PATCHv2 4/7] x86/tdx: Expand __tdx_hypercall() to handle more arguments Date: Thu, 12 Jan 2023 13:14:04 +0300 Message-Id: <20230112101407.24327-5-kirill.shutemov@linux.intel.com> X-Mailer: git-send-email 2.38.2 In-Reply-To: <20230112101407.24327-1-kirill.shutemov@linux.intel.com> References: <20230112101407.24327-1-kirill.shutemov@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754811423313136519?= X-GMAIL-MSGID: =?utf-8?q?1754811423313136519?= So far __tdx_hypercall() only handles six arguments for VMCALL. Expanding it to six more register would allow to cover more use-cases like ReportFatalError() and Hyper-V hypercalls. With all preparations in place, the expansion is pretty straight forward. Signed-off-by: Kirill A. Shutemov --- arch/x86/coco/tdx/tdcall.S | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/arch/x86/coco/tdx/tdcall.S b/arch/x86/coco/tdx/tdcall.S index a9bb4cbb8197..5da06d1a9ba3 100644 --- a/arch/x86/coco/tdx/tdcall.S +++ b/arch/x86/coco/tdx/tdcall.S @@ -13,6 +13,12 @@ /* * Bitmasks of exposed registers (with VMM). */ +#define TDX_RDX BIT(2) +#define TDX_RBX BIT(3) +#define TDX_RSI BIT(6) +#define TDX_RDI BIT(7) +#define TDX_R8 BIT(8) +#define TDX_R9 BIT(9) #define TDX_R10 BIT(10) #define TDX_R11 BIT(11) #define TDX_R12 BIT(12) @@ -27,9 +33,9 @@ * details can be found in TDX GHCI specification, section * titled "TDCALL [TDG.VP.VMCALL] leaf". */ -#define TDVMCALL_EXPOSE_REGS_MASK ( TDX_R10 | TDX_R11 | \ - TDX_R12 | TDX_R13 | \ - TDX_R14 | TDX_R15 ) +#define TDVMCALL_EXPOSE_REGS_MASK \ + ( TDX_RDX | TDX_RBX | TDX_RSI | TDX_RDI | TDX_R8 | TDX_R9 | \ + TDX_R10 | TDX_R11 | TDX_R12 | TDX_R13 | TDX_R14 | TDX_R15 ) /* * __tdx_module_call() - Used by TDX guests to request services from @@ -124,6 +130,7 @@ SYM_FUNC_START(__tdx_hypercall) push %r14 push %r13 push %r12 + push %rbx push %rbp /* Free RDI and RSI to be used as TDVMCALL arguments */ @@ -131,12 +138,18 @@ SYM_FUNC_START(__tdx_hypercall) movq %rsi, %rbp /* Copy hypercall registers from arg struct: */ + movq TDX_HYPERCALL_r8(%rax), %r8 + movq TDX_HYPERCALL_r9(%rax), %r9 movq TDX_HYPERCALL_r10(%rax), %r10 movq TDX_HYPERCALL_r11(%rax), %r11 movq TDX_HYPERCALL_r12(%rax), %r12 movq TDX_HYPERCALL_r13(%rax), %r13 movq TDX_HYPERCALL_r14(%rax), %r14 movq TDX_HYPERCALL_r15(%rax), %r15 + movq TDX_HYPERCALL_rdi(%rax), %rdi + movq TDX_HYPERCALL_rsi(%rax), %rsi + movq TDX_HYPERCALL_rbx(%rax), %rbx + movq TDX_HYPERCALL_rdx(%rax), %rdx push %rax @@ -178,12 +191,18 @@ SYM_FUNC_START(__tdx_hypercall) testq $TDX_HCALL_HAS_OUTPUT, %rbp jz .Lout + movq %r8, TDX_HYPERCALL_r8(%rax) + movq %r9, TDX_HYPERCALL_r9(%rax) movq %r10, TDX_HYPERCALL_r10(%rax) movq %r11, TDX_HYPERCALL_r11(%rax) movq %r12, TDX_HYPERCALL_r12(%rax) movq %r13, TDX_HYPERCALL_r13(%rax) movq %r14, TDX_HYPERCALL_r14(%rax) movq %r15, TDX_HYPERCALL_r15(%rax) + movq %rdi, TDX_HYPERCALL_rdi(%rax) + movq %rsi, TDX_HYPERCALL_rsi(%rax) + movq %rbx, TDX_HYPERCALL_rbx(%rax) + movq %rdx, TDX_HYPERCALL_rdx(%rax) .Lout: /* TDVMCALL leaf return code is in R10 */ movq %r10, %rax @@ -191,14 +210,20 @@ SYM_FUNC_START(__tdx_hypercall) /* * Zero out registers exposed to the VMM to avoid speculative execution * with VMM-controlled values. This needs to include all registers - * present in TDVMCALL_EXPOSE_REGS_MASK (except R12-R15). R12-R15 - * context will be restored. + * present in TDVMCALL_EXPOSE_REGS_MASK, except RBX, and R12-R15 which + * will be restored. */ + xor %r8d, %r8d + xor %r9d, %r9d xor %r10d, %r10d xor %r11d, %r11d + xor %rdi, %rdi + xor %rsi, %rsi + xor %rdx, %rdx /* Restore callee-saved GPRs as mandated by the x86_64 ABI */ pop %rbp + pop %rbx pop %r12 pop %r13 pop %r14