From: Dave Hansen <dave.hansen@intel.com>
To: Kai Huang <kai.huang@intel.com>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Cc: x86@kernel.org, kirill.shutemov@linux.intel.com,
tony.luck@intel.com, peterz@infradead.org, 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 v13 05/22] x86/virt/tdx: Handle SEAMCALL no entropy error in common code
Date: Fri, 8 Sep 2023 09:21:19 -0700 [thread overview]
Message-ID: <0676101a-e781-81e0-2e0f-7f5e72595e5c@intel.com> (raw)
In-Reply-To: <c945c9a8db98b7a304c404a7ef18aa2f7770ffaf.1692962263.git.kai.huang@intel.com>
On 8/25/23 05:14, Kai Huang wrote:
> Some SEAMCALLs use the RDRAND hardware and can fail for the same reasons
> as RDRAND. Use the kernel RDRAND retry logic for them.
>
> There are three __seamcall*() variants. Add a macro to do the SEAMCALL
> retry in the common code and define a wrapper for each __seamcall*()
> variant.
>
> Signed-off-by: Kai Huang <kai.huang@intel.com>
> ---
>
> v12 -> v13:
> - New implementation due to TDCALL assembly series.
>
> ---
> arch/x86/include/asm/tdx.h | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/arch/x86/include/asm/tdx.h b/arch/x86/include/asm/tdx.h
> index a252328734c7..cfae8b31a2e9 100644
> --- a/arch/x86/include/asm/tdx.h
> +++ b/arch/x86/include/asm/tdx.h
> @@ -24,6 +24,11 @@
> #define TDX_SEAMCALL_GP (TDX_SW_ERROR | X86_TRAP_GP)
> #define TDX_SEAMCALL_UD (TDX_SW_ERROR | X86_TRAP_UD)
>
> +/*
> + * TDX module SEAMCALL leaf function error codes
> + */
> +#define TDX_RND_NO_ENTROPY 0x8000020300000000ULL
> +
> #ifndef __ASSEMBLY__
>
> /*
> @@ -82,6 +87,28 @@ u64 __seamcall(u64 fn, struct tdx_module_args *args);
> u64 __seamcall_ret(u64 fn, struct tdx_module_args *args);
> u64 __seamcall_saved_ret(u64 fn, struct tdx_module_args *args);
>
> +#include <asm/archrandom.h>
> +
> +#define SEAMCALL_NO_ENTROPY_RETRY(__seamcall_func, __fn, __args) \
> +({ \
> + int ___retry = RDRAND_RETRY_LOOPS; \
> + u64 ___sret; \
> + \
> + do { \
> + ___sret = __seamcall_func((__fn), (__args)); \
> + } while (___sret == TDX_RND_NO_ENTROPY && --___retry); \
> + ___sret; \
> +})
This is a *LOT* less eye-bleedy if you do it without macros:
typedef u64 (*sc_func_t)(u64 fn, struct tdx_module_args *args);
static inline
u64 sc_retry(sc_func_t func, u64 fn, struct tdx_module_args *args)
{
int retry = RDRAND_RETRY_LOOPS;
u64 ret;
do {
ret = func(fn, args);
} while (ret == TDX_RND_NO_ENTROPY && --retry);
return ret;
}
#define seamcall(_fn, _args) sc_retry(_seamcall,
(_fn), (_args))
#define seamcall_ret(_fn, _args) sc_retry(_seamcall_ret,
(_fn), (_args))
#define seamcall_saved_ret(_fn, _args) sc_retry(_seamcall_saved_ret,
(_fn), (_args))
The compiler can figure it out and avoid making func() an indirect call
since it knows the call location at compile time.
You can also do the seamcall() #define as a static inline, but it does
take up more screen real estate. Oh, and going a wee bit over 80
columns is OK for those #defines.
next prev parent reply other threads:[~2023-09-08 16:21 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-25 12:14 [PATCH v13 00/22] TDX host kernel support Kai Huang
2023-08-25 12:14 ` [PATCH v13 01/22] x86/virt/tdx: Detect TDX during kernel boot Kai Huang
2023-09-08 15:19 ` Dave Hansen
2023-08-25 12:14 ` [PATCH v13 02/22] x86/tdx: Define TDX supported page sizes as macros Kai Huang
2023-08-25 12:14 ` [PATCH v13 03/22] x86/virt/tdx: Make INTEL_TDX_HOST depend on X86_X2APIC Kai Huang
2023-08-25 12:14 ` [PATCH v13 04/22] x86/cpu: Detect TDX partial write machine check erratum Kai Huang
2023-09-08 15:22 ` Dave Hansen
2023-09-11 12:39 ` Huang, Kai
2023-08-25 12:14 ` [PATCH v13 05/22] x86/virt/tdx: Handle SEAMCALL no entropy error in common code Kai Huang
2023-09-08 16:21 ` Dave Hansen [this message]
2023-09-11 11:41 ` Huang, Kai
2023-08-25 12:14 ` [PATCH v13 06/22] x86/virt/tdx: Add SEAMCALL error printing for module initialization Kai Huang
2023-09-07 12:45 ` Nikolay Borisov
2023-09-08 10:33 ` Huang, Kai
2023-09-08 10:38 ` Nikolay Borisov
2023-09-08 11:00 ` Huang, Kai
2023-09-08 16:31 ` Dave Hansen
2023-09-11 12:07 ` Huang, Kai
2023-08-25 12:14 ` [PATCH v13 07/22] x86/virt/tdx: Add skeleton to enable TDX on demand Kai Huang
2023-09-07 14:19 ` Nikolay Borisov
2023-09-08 10:16 ` Huang, Kai
2023-08-25 12:14 ` [PATCH v13 08/22] x86/virt/tdx: Get information about TDX module and TDX-capable memory Kai Huang
2023-08-25 12:14 ` [PATCH v13 09/22] x86/virt/tdx: Use all system memory when initializing TDX module as TDX memory Kai Huang
2023-08-25 12:14 ` [PATCH v13 10/22] x86/virt/tdx: Add placeholder to construct TDMRs to cover all TDX memory regions Kai Huang
2023-08-25 12:14 ` [PATCH v13 11/22] x86/virt/tdx: Fill out " Kai Huang
2023-08-25 12:14 ` [PATCH v13 12/22] x86/virt/tdx: Allocate and set up PAMTs for TDMRs Kai Huang
2023-08-25 12:14 ` [PATCH v13 13/22] x86/virt/tdx: Designate reserved areas for all TDMRs Kai Huang
2023-08-25 12:14 ` [PATCH v13 14/22] x86/virt/tdx: Configure TDX module with the TDMRs and global KeyID Kai Huang
2023-08-25 12:14 ` [PATCH v13 15/22] x86/virt/tdx: Configure global KeyID on all packages Kai Huang
2023-08-25 12:14 ` [PATCH v13 16/22] x86/virt/tdx: Initialize all TDMRs Kai Huang
2023-08-25 12:14 ` [PATCH v13 17/22] x86/kexec: Flush cache of TDX private memory Kai Huang
2023-09-15 17:43 ` Edgecombe, Rick P
2023-09-15 17:50 ` Dave Hansen
2023-09-18 12:08 ` Huang, Kai
2023-09-18 15:44 ` Dave Hansen
2023-09-18 22:14 ` Huang, Kai
2023-08-25 12:14 ` [PATCH v13 18/22] x86/virt/tdx: Keep TDMRs when module initialization is successful Kai Huang
2023-09-15 23:10 ` Edgecombe, Rick P
2023-09-15 23:10 ` Edgecombe, Rick P
2023-08-25 12:14 ` [PATCH v13 19/22] x86/virt/tdx: Improve readibility of module initialization error handling Kai Huang
2023-09-15 23:14 ` Edgecombe, Rick P
2023-08-25 12:14 ` [PATCH v13 20/22] x86/kexec(): Reset TDX private memory on platforms with TDX erratum Kai Huang
2023-09-14 21:36 ` Edgecombe, Rick P
2023-09-15 11:42 ` Huang, Kai
2023-09-15 16:42 ` Edgecombe, Rick P
2023-09-18 4:36 ` Huang, Kai
2023-08-25 12:14 ` [PATCH v13 21/22] x86/mce: Improve error log of kernel space TDX #MC due to erratum Kai Huang
2023-08-25 12:14 ` [PATCH v13 22/22] Documentation/x86: Add documentation for TDX host support Kai Huang
2023-09-11 11:32 ` Nikolay Borisov
2023-09-13 11:27 ` Huang, Kai
2023-09-28 7:48 ` [PATCH v13 00/22] TDX host kernel support Nikolay Borisov
2023-09-28 10:19 ` Huang, Kai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0676101a-e781-81e0-2e0f-7f5e72595e5c@intel.com \
--to=dave.hansen@intel.com \
--cc=ak@linux.intel.com \
--cc=ashok.raj@intel.com \
--cc=bagasdotme@gmail.com \
--cc=bp@alien8.de \
--cc=chao.gao@intel.com \
--cc=dan.j.williams@intel.com \
--cc=david@redhat.com \
--cc=hpa@zytor.com \
--cc=imammedo@redhat.com \
--cc=isaku.yamahata@intel.com \
--cc=kai.huang@intel.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=nik.borisov@suse.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rafael.j.wysocki@intel.com \
--cc=reinette.chatre@intel.com \
--cc=sagis@google.com \
--cc=sathyanarayanan.kuppuswamy@linux.intel.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
--cc=ying.huang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®