linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sathyanarayanan Kuppuswamy  <sathyanarayanan.kuppuswamy@linux.intel.com>
To: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	x86@kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
	David Hildenbrand <david@redhat.com>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Juergen Gross <jgross@suse.com>, Deep Shah <sdeep@vmware.com>,
	VMware Inc <pv-drivers@vmware.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>
Cc: Peter H Anvin <hpa@zytor.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Tony Luck <tony.luck@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Kirill Shutemov <kirill.shutemov@linux.intel.com>,
	Sean Christopherson <seanjc@google.com>,
	Kuppuswamy Sathyanarayanan <knsathya@kernel.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v10 06/11] x86/traps: Add #VE support for TDX guest
Date: Sat, 16 Oct 2021 19:45:15 -0700	[thread overview]
Message-ID: <58ed8d10-f95e-b8d6-da42-94cf23c552eb@linux.intel.com> (raw)
In-Reply-To: <87o87s6mb7.ffs@tglx>


On 10/14/21 1:30 AM, Thomas Gleixner wrote:
> On Fri, Oct 08 2021 at 22:37, Kuppuswamy Sathyanarayanan wrote:
>>   
>> +/*
>> + * Used by #VE exception handler to gather the #VE exception
>> + * info from the TDX module. This is software only structure
>> + * and not related to TDX module/VMM.
>> + */
>> +struct ve_info {
>> +	u64 exit_reason;
>> +	u64 exit_qual;
>> +	u64 gla;	/* Guest Linear (virtual) Address */
>> +	u64 gpa;	/* Guest Physical (virtual) Address */
> Please do not use tail comments and with a tab between type and name
> this becomes more readable:
>
> 	/* Guest Linear (virtual) Address */
> 	u64	gla;
>
>          /* Guest Physical (virtual) Address */
> 	u64	gpa;
>
> Hmm?

Agree. I will fix this in next version. I will make sure to fix similar 
issues
in other TDX patch series as well.

>    
>> +bool tdx_get_ve_info(struct ve_info *ve)
>> +{
>> +	struct tdx_module_output out;
>> +	u64 ret;
>> +
>> +	if (!ve)
>> +		return false;
> This should be WARN_ON_ONCE() if at all.

This is an input validation. Since we need to de-reference "ve" in the 
following code,
we want to validate it to avoid NULL pointer exception. As per current 
usage of this
function, "ve" will not be NULL. But we have added this check as a extra 
precaution
against future use cases.

If you think this check is not required now, I can remove it. Please let 
me know.

>> +	/*
>> +	 * NMIs and machine checks are suppressed. Before this point any
>> +	 * #VE is fatal. After this point (TDGETVEINFO call), NMIs and
>> +	 * additional #VEs are permitted (but it is expected not to
>> +	 * happen unless kernel panics).
>> +	 */
>> +	ret = __tdx_module_call(TDX_GET_VEINFO, 0, 0, 0, 0, &out);
>> +	if (ret)
>> +		return false;
>           if (__tdx...())
>           	return false;

Agree. I will simplify it as you have mentioned in next version.

>> +	ve->exit_reason = out.rcx;
>> +	ve->exit_qual   = out.rdx;
>> +	ve->gla         = out.r8;
>> +	ve->gpa         = out.r9;
>> +	ve->instr_len   = out.r10 & UINT_MAX;
>> +	ve->instr_info  = out.r10 >> 32;
>> +
>> +	return true;
>> +}
>> +
>> +bool tdx_handle_virtualization_exception(struct pt_regs *regs,
>> +					 struct ve_info *ve)
>> +{
>> +	pr_warn("Unexpected #VE: %lld\n", ve->exit_reason);
>> +	return false;
>> +}
>> +
>>   void __init tdx_early_init(void)
>>   {
>>   	if (!is_tdx_guest())
>> diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
>> index a58800973aed..70d76c3a548f 100644
>> --- a/arch/x86/kernel/traps.c
>> +++ b/arch/x86/kernel/traps.c
>> @@ -61,6 +61,7 @@
>>   #include <asm/insn.h>
>>   #include <asm/insn-eval.h>
>>   #include <asm/vdso.h>
>> +#include <asm/tdx.h>
>>   
>>   #ifdef CONFIG_X86_64
>>   #include <asm/x86_init.h>
>> @@ -1140,6 +1141,82 @@ DEFINE_IDTENTRY(exc_device_not_available)
>>   	}
>>   }
>>   
>> +#ifdef CONFIG_INTEL_TDX_GUEST
>> +#define VE_FAULT_STR "VE fault"
>> +static void ve_raise_fault(struct pt_regs *regs, long error_code)
> Please do not glue the #define and the function definition
> together. Newlines exist for a reaon.

Got it. I will fix this issue in next version.

>> +{
>> +	struct task_struct *tsk = current;
>> +
>> +	if (user_mode(regs)) {
>> +		tsk->thread.error_code = error_code;
>> +		tsk->thread.trap_nr = X86_TRAP_VE;
>> +
>> +		/*
>> +		 * Not fixing up VDSO exceptions similar to #GP handler
>> +		 * because it is expected that VDSO doesn't trigger #VE.
> Expected?


It will never happen for TDX. Since this handler is a trimmed out version
of  #GP handler, I want to add some comments about why we don't have
VDSO related handling code. Since this is irrelevant for #VE handler, may
be I remove this comment completely, any comment?

>> +		 */
>> +		show_signal(tsk, SIGSEGV, "", VE_FAULT_STR, regs, error_code);
>> +		force_sig(SIGSEGV);
>> +		return;
>> +	}
>> +
>> +	/*
>> +	 * Attempt to recover from #VE exception failure without
>> +	 * triggering OOPS (useful for MSR read/write failures)
>> +	 */
>> +	if (fixup_exception(regs, X86_TRAP_VE, error_code, 0))
>> +		return;
>> +
>> +	tsk->thread.error_code = error_code;
>> +	tsk->thread.trap_nr = X86_TRAP_VE;
>> +
>> +	/*
>> +	 * To be potentially processing a kprobe fault and to trust the result
>> +	 * from kprobe_running(), it should be non-preemptible.
>> +	 */
>> +	if (!preemptible() &&
>> +	    kprobe_running() &&
> 	if (!preemptible() && kprobe_running() &&
>> +	    kprobe_fault_handler(regs, X86_TRAP_VE))
> perhaps?

Agree. I will fix it in next version.

>> +
>> +DEFINE_IDTENTRY(exc_virtualization_exception)
>> +{
>> +	struct ve_info ve;
>> +	bool ret;
>> +
>> +	RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
> Please remove that. The idtentry code is already taking care of that.

Ok. I will remove it in next version.

>> +	/*
>> +	 * NMIs/Machine-checks/Interrupts will be in a disabled state
>> +	 * till TDGETVEINFO TDCALL is executed. This prevents #VE
>> +	 * nesting issue.
> s/This prevents.../This ensures that VE info cannot be overwritten by a
> nested #VE/
>
> Or something like that perhaps?


It is a better way to put it. I will use your version.

> Also a some comment about #VE in general above the DEFINE_IDTENTRY()
> would be appreciated.

I will add more info in next version.

> Thanks,
>
>          tglx

-- 
Sathyanarayanan Kuppuswamy
Linux Kernel Developer


  reply	other threads:[~2021-10-17  2:45 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-09  5:37 [PATCH v10 00/11] Add TDX Guest Support (Initial support) Kuppuswamy Sathyanarayanan
2021-10-09  5:37 ` [PATCH v10 01/11] x86/paravirt: Move halt paravirt calls under CONFIG_PARAVIRT Kuppuswamy Sathyanarayanan
2021-10-15 16:59   ` David Hildenbrand
2021-10-09  5:37 ` [PATCH v10 02/11] x86/tdx: Introduce INTEL_TDX_GUEST config option Kuppuswamy Sathyanarayanan
2021-10-11 18:19   ` Josh Poimboeuf
2021-10-11 18:38     ` Andi Kleen
2021-10-11 18:47       ` Kuppuswamy, Sathyanarayanan
2021-10-09  5:37 ` [PATCH v10 03/11] x86/cpufeatures: Add TDX Guest CPU feature Kuppuswamy Sathyanarayanan
2021-10-13  8:18   ` Borislav Petkov
2021-10-13 13:32     ` Sathyanarayanan Kuppuswamy
2021-10-13 19:42     ` Josh Poimboeuf
2021-10-13 23:19       ` Thomas Gleixner
2021-10-14  0:25         ` Josh Poimboeuf
2021-10-14  7:57           ` Borislav Petkov
     [not found]       ` <1a6220a5-3abd-dea1-4b2f-2acade311236@linux.intel.com>
2021-10-18 21:59         ` Borislav Petkov
2021-10-18 22:04           ` Sathyanarayanan Kuppuswamy
2021-10-13 20:44   ` Thomas Gleixner
2021-10-13 21:05     ` Sathyanarayanan Kuppuswamy
2021-10-13 21:35       ` Thomas Gleixner
2021-10-13 21:07     ` Borislav Petkov
2021-10-13 21:25       ` Thomas Gleixner
2021-10-13 21:37         ` Borislav Petkov
2021-10-13 22:28           ` Sathyanarayanan Kuppuswamy
2021-10-13 23:02             ` Thomas Gleixner
2021-10-14 17:28               ` Sathyanarayanan Kuppuswamy
2021-10-09  5:37 ` [PATCH v10 04/11] x86/tdx: Add TDX support to intel_cc_platform_has() Kuppuswamy Sathyanarayanan
2021-10-13 15:57   ` Borislav Petkov
2021-10-14  7:12   ` Thomas Gleixner
2021-10-14 17:31     ` Sathyanarayanan Kuppuswamy
2021-10-09  5:37 ` [PATCH v10 05/11] x86/tdx: Add __tdx_module_call() and __tdx_hypercall() helper functions Kuppuswamy Sathyanarayanan
2021-10-14  7:28   ` Thomas Gleixner
2021-10-15  0:19     ` Sathyanarayanan Kuppuswamy
2021-10-09  5:37 ` [PATCH v10 06/11] x86/traps: Add #VE support for TDX guest Kuppuswamy Sathyanarayanan
2021-10-14  8:30   ` Thomas Gleixner
2021-10-17  2:45     ` Sathyanarayanan Kuppuswamy [this message]
2021-10-17  3:18       ` Dave Hansen
2021-10-17  3:49         ` Sathyanarayanan Kuppuswamy
2021-10-09  5:37 ` [PATCH v10 07/11] x86/tdx: Add HLT " Kuppuswamy Sathyanarayanan
2021-10-14  9:30   ` Thomas Gleixner
2021-10-15  1:33     ` Sathyanarayanan Kuppuswamy
2021-10-15 15:03       ` Sean Christopherson
2021-10-09  5:37 ` [PATCH v10 08/11] x86/tdx: Wire up KVM hypercalls Kuppuswamy Sathyanarayanan
2021-10-14 10:21   ` Thomas Gleixner
2021-10-15  3:03     ` Sathyanarayanan Kuppuswamy
2021-10-09  5:37 ` [PATCH v10 09/11] x86/tdx: Add MSR support for TDX guest Kuppuswamy Sathyanarayanan
2021-10-09  5:37 ` [PATCH v10 10/11] x86/tdx: Don't write CSTAR MSR on Intel Kuppuswamy Sathyanarayanan
2021-10-14 10:47   ` Thomas Gleixner
2021-10-14 13:47     ` Andi Kleen
2021-10-14 14:27       ` Thomas Gleixner
2021-10-09  5:37 ` [PATCH v10 11/11] x86/tdx: Handle CPUID via #VE Kuppuswamy Sathyanarayanan
2021-10-14 12:01   ` Thomas Gleixner
2021-10-14 13:25     ` Dave Hansen
2021-10-09  7:38 ` [PATCH v10 00/11] Add TDX Guest Support (Initial support) Borislav Petkov
2021-10-09 20:56   ` Kuppuswamy, Sathyanarayanan
2021-10-11 13:03     ` Borislav Petkov
2021-10-11 16:33       ` Dave Hansen
2021-10-11 16:48         ` Dave Hansen
2021-10-11 17:04           ` Borislav Petkov

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=58ed8d10-f95e-b8d6-da42-94cf23c552eb@linux.intel.com \
    --to=sathyanarayanan.kuppuswamy@linux.intel.com \
    --cc=aarcange@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=david@redhat.com \
    --cc=hpa@zytor.com \
    --cc=jgross@suse.com \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=jpoimboe@redhat.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=knsathya@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=pv-drivers@vmware.com \
    --cc=sdeep@vmware.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    --cc=x86@kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).