Re: [PATCH 1/2] selftests: kvm: introduce cpu_has_svm() check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sean Christopherson <sean.j.christopherson@xxxxxxxxx> writes:

> On Fri, May 29, 2020 at 03:04:06PM +0200, Vitaly Kuznetsov wrote:
>> More tests may want to check if the CPU is Intel or AMD in
>> guest code, separate cpu_has_svm() and put it as static
>> inline to svm_util.h.
>> 
>> Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx>
>> ---
>>  tools/testing/selftests/kvm/include/x86_64/svm_util.h | 10 ++++++++++
>>  tools/testing/selftests/kvm/x86_64/state_test.c       |  9 +--------
>>  2 files changed, 11 insertions(+), 8 deletions(-)
>> 
>> diff --git a/tools/testing/selftests/kvm/include/x86_64/svm_util.h b/tools/testing/selftests/kvm/include/x86_64/svm_util.h
>> index cd037917fece..b1057773206a 100644
>> --- a/tools/testing/selftests/kvm/include/x86_64/svm_util.h
>> +++ b/tools/testing/selftests/kvm/include/x86_64/svm_util.h
>> @@ -35,4 +35,14 @@ void generic_svm_setup(struct svm_test_data *svm, void *guest_rip, void *guest_r
>>  void run_guest(struct vmcb *vmcb, uint64_t vmcb_gpa);
>>  void nested_svm_check_supported(void);
>>  
>> +static inline bool cpu_has_svm(void)
>> +{
>> +	u32 eax = 0x80000001, ecx;
>> +
>> +	asm volatile("cpuid" :
>> +		     "=a" (eax), "=c" (ecx) : "0" (eax) : "ebx", "edx");
>
> 	u32 eax, ecx;
>
> 	asm("cpuid" : "=a" (eax), "=c" (ecx) : "a" (0x80000001) : "ebx", "edx");
>
> The volatile shouldn't be needed, e.g. no one should be using this purely
> for its seralization properties, and I don't see any reason to put the leaf
> number into a variable.
>
> Alternatively, adding a proper cpuid framework to processor.h would likely
> be useful in the long run.
>

All true, even better would be to find a way to include the definition
of native_cpuid*() from arch/x86/include/asm/processor.h but I didn't
explore these options yet, was trying to address the immediate issue
with Paolo's SVM series. It can probably be done when there is a second
user of cpuid in tests which needs to check something different from SVM
bit.

-- 
Vitaly




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux