Messages in this thread |  | | Subject | Re: [RFC v1 03/26] x86/cpufeatures: Add is_tdx_guest() interface | From | "Kuppuswamy, Sathyanarayanan" <> | Date | Thu, 1 Apr 2021 15:25:20 -0700 |
| |
On 4/1/21 2:19 PM, Dave Hansen wrote: > On 4/1/21 2:15 PM, Kuppuswamy, Sathyanarayanan wrote: >> On 4/1/21 2:08 PM, Dave Hansen wrote: >>> On 2/5/21 3:38 PM, Kuppuswamy Sathyanarayanan wrote: >>>> +bool is_tdx_guest(void) >>>> +{ >>>> + return static_cpu_has(X86_FEATURE_TDX_GUEST); >>>> +} >>> >>> Why do you need is_tdx_guest() as opposed to calling >>> cpu_feature_enabled(X86_FEATURE_TDX_GUEST) everywhere? >> >> is_tdx_guest() is also implemented/used in compressed >> code (which uses native_cpuid calls). I don't think >> we can use cpu_feature_enabled(X86_FEATURE_TDX_GUEST) in >> compressed code right? Also is_tdx_guest() looks easy >> to read and use. > > OK, but how many of the is_tdx_guest() uses are in the compressed code? > Why has its use spread beyond that? Its only used in handling in/out instructions in compressed code. But this code shared with in/out handling on non-compressed code.
#define __out(bwl, bw) \ do { \ if (is_tdx_guest()) { \ asm volatile("call tdg_out" #bwl : : \ "a"(value), "d"(port)); \ } else { \ asm volatile("out" #bwl " %" #bw "0, %w1" : : \ "a"(value), "Nd"(port)); \ } \ } while (0) #define __in(bwl, bw) \ do { \ if (is_tdx_guest()) { \ asm volatile("call tdg_in" #bwl : \ "=a"(value) : "d"(port)); \ } else { \ asm volatile("in" #bwl " %w1, %" #bw "0" : \ "=a"(value) : "Nd"(port)); \ } \ } while (0)
>
-- Sathyanarayanan Kuppuswamy Linux Kernel Developer
|  |