lkml.org 
[lkml]   [2021]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH v10 08/11] x86/tdx: Wire up KVM hypercalls
From
Date

On 10/14/21 3:21 AM, Thomas Gleixner wrote:
> On Fri, Oct 08 2021 at 22:37, Kuppuswamy Sathyanarayanan wrote:
>> From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
>>
>> #ifdef CONFIG_KVM_GUEST
>> @@ -32,6 +34,10 @@ static inline bool kvm_check_and_clear_guest_paused(void)
>> static inline long kvm_hypercall0(unsigned int nr)
>> {
>> long ret;
>> +
>> + if (cc_platform_has(CC_ATTR_GUEST_TDX))
>> + return tdx_kvm_hypercall(nr, 0, 0, 0, 0);
> So if TDX is not enabled in Kconfig this cannot be optimized out unless
> CC_PLATFORM is disabled as well. But what's worse is that every
> hypercall needs to call into cc_platform_has().
>
> None of the hypercalls is used before the early TDX detection. So we can
> simply use
>
> if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST))
>
> here, right? Then you add X86_FEATURE_TDX_GUEST to the disabled feature
> bits correctly and all of the above is solved.
>
> Hmm?


Make sense. Since this will only be used after tdx_early_init() call,
and X86_FEATURE_TDX_GUEST is also set in that call, we can just use
cpu_feature_enabled(X86_FEATURE_TDX_GUEST) as you have mentioned.

I will fix this in next version.

>
>> +#if defined(CONFIG_KVM_GUEST) && defined(CONFIG_INTEL_TDX_GUEST)
>> +static inline long tdx_kvm_hypercall(unsigned int nr, unsigned long p1,
>> + unsigned long p2, unsigned long p3,
>> + unsigned long p4)
>> +{
>> + struct tdx_hypercall_output out;
>> + u64 err;
>> +
>> + err = __tdx_hypercall(TDX_HYPERCALL_VENDOR_KVM, nr, p1, p2,
>> + p3, p4, &out);
>> +
>> + /*
>> + * Non zero return value means buggy TDX module (which is fatal).
>> + * So use BUG_ON() to panic.
>> + */
>> + BUG_ON(err);
>> +
>> + return out.r10;
>> +}
> Can we make that a proper exported function (instead of
> tdx_kvm_hypercall) so we don't end up with the very same code inlined
> all over the place?


Initially it was an exported function. But we made it inline in tdx.h
to simplify the implementation. But if exported function is preferred,
I will fix it in next version.

>
> Thanks,
>
> tglx
>
--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer

\
 
 \ /
  Last update: 2021-10-15 05:04    [W:0.060 / U:1.292 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site