[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87y22uxo4o.ffs@tglx>
Date: Tue, 01 Feb 2022 22:39:35 +0100
From: Thomas Gleixner <tglx@...utronix.de>
To: "Kirill A. Shutemov" <kirill.shutemov@...ux.intel.com>,
mingo@...hat.com, bp@...en8.de, dave.hansen@...el.com,
luto@...nel.org, peterz@...radead.org
Cc: sathyanarayanan.kuppuswamy@...ux.intel.com, aarcange@...hat.com,
ak@...ux.intel.com, dan.j.williams@...el.com, david@...hat.com,
hpa@...or.com, jgross@...e.com, jmattson@...gle.com,
joro@...tes.org, jpoimboe@...hat.com, knsathya@...nel.org,
pbonzini@...hat.com, sdeep@...are.com, seanjc@...gle.com,
tony.luck@...el.com, vkuznets@...hat.com, wanpengli@...cent.com,
x86@...nel.org, linux-kernel@...r.kernel.org,
"Kirill A. Shutemov" <kirill.shutemov@...ux.intel.com>
Subject: Re: [PATCHv2 07/29] x86/tdx: Handle CPUID via #VE
On Mon, Jan 24 2022 at 18:01, Kirill A. Shutemov wrote:
> +static bool tdx_handle_cpuid(struct pt_regs *regs)
> +{
> + struct tdx_hypercall_output out;
> +
> + /*
> + * Emulate the CPUID instruction via a hypercall. More info about
> + * ABI can be found in TDX Guest-Host-Communication Interface
> + * (GHCI), section titled "VP.VMCALL<Instruction.CPUID>".
> + */
> + if (_tdx_hypercall(EXIT_REASON_CPUID, regs->ax, regs->cx, 0, 0, &out))
> + return false;
> +
> + /*
> + * As per TDX GHCI CPUID ABI, r12-r15 registers contain contents of
> + * EAX, EBX, ECX, EDX registers after the CPUID instruction execution.
> + * So copy the register contents back to pt_regs.
> + */
> + regs->ax = out.r12;
> + regs->bx = out.r13;
> + regs->cx = out.r14;
> + regs->dx = out.r15;
> +
> + return true;
> +}
Ack.
> bool tdx_get_ve_info(struct ve_info *ve)
> {
> struct tdx_module_output out;
> @@ -157,8 +182,18 @@ bool tdx_get_ve_info(struct ve_info *ve)
> */
> static bool tdx_virt_exception_user(struct pt_regs *regs, struct ve_info *ve)
> {
> - pr_warn("Unexpected #VE: %lld\n", ve->exit_reason);
> - return false;
> + bool ret = false;
> +
> + switch (ve->exit_reason) {
> + case EXIT_REASON_CPUID:
> + ret = tdx_handle_cpuid(regs);
> + break;
Comment about ret and break applies accordingly.
Thanks,
tglx
Powered by blists - more mailing lists