Commit a6dd6f39 authored by Dave Hansen's avatar Dave Hansen

x86/tdx: Prepare for using "INFO" call for a second purpose

The TDG.VP.INFO TDCALL provides the guest with various details about
the TDX system that the guest needs to run.  Only one field is currently
used: 'gpa_width' which tells the guest which PTE bits mark pages shared
or private.

A second field is now needed: the guest "TD attributes" to tell if
virtualization exceptions are configured in a way that can harm the guest.

Make the naming and calling convention more generic and discrete from the
mask-centric one.

Thanks to Sathya for the inspiration here, but there's no code, comments
or changelogs left from where he started.
Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Tested-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: stable@vger.kernel.org
parent 9440c429
...@@ -98,7 +98,7 @@ static inline void tdx_module_call(u64 fn, u64 rcx, u64 rdx, u64 r8, u64 r9, ...@@ -98,7 +98,7 @@ static inline void tdx_module_call(u64 fn, u64 rcx, u64 rdx, u64 r8, u64 r9,
panic("TDCALL %lld failed (Buggy TDX module!)\n", fn); panic("TDCALL %lld failed (Buggy TDX module!)\n", fn);
} }
static u64 get_cc_mask(void) static void tdx_parse_tdinfo(u64 *cc_mask)
{ {
struct tdx_module_output out; struct tdx_module_output out;
unsigned int gpa_width; unsigned int gpa_width;
...@@ -121,7 +121,7 @@ static u64 get_cc_mask(void) ...@@ -121,7 +121,7 @@ static u64 get_cc_mask(void)
* The highest bit of a guest physical address is the "sharing" bit. * The highest bit of a guest physical address is the "sharing" bit.
* Set it for shared pages and clear it for private pages. * Set it for shared pages and clear it for private pages.
*/ */
return BIT_ULL(gpa_width - 1); *cc_mask = BIT_ULL(gpa_width - 1);
} }
/* /*
...@@ -758,7 +758,7 @@ void __init tdx_early_init(void) ...@@ -758,7 +758,7 @@ void __init tdx_early_init(void)
setup_force_cpu_cap(X86_FEATURE_TDX_GUEST); setup_force_cpu_cap(X86_FEATURE_TDX_GUEST);
cc_set_vendor(CC_VENDOR_INTEL); cc_set_vendor(CC_VENDOR_INTEL);
cc_mask = get_cc_mask(); tdx_parse_tdinfo(&cc_mask);
cc_set_mask(cc_mask); cc_set_mask(cc_mask);
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment