diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2019-10-21 13:24:03 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2019-10-21 18:51:44 -0400 |
commit | 6fee2a0be0ecae939d4b6cd8297d88b5cbb61654 (patch) | |
tree | f740c0d3953187ef571f65414673bec662fc5cd3 | |
parent | db633a4e0e6eda69b6065e3e106f9ea13a0676c3 (diff) |
x86/cpu/vmware: Fix platform detection VMWARE_PORT macro
The platform detection VMWARE_PORT macro uses the VMWARE_HYPERVISOR_PORT
definition, but expects it to be an integer. However, when it was moved
to the new vmware.h include file, it was changed to be a string to better
fit into the VMWARE_HYPERCALL set of macros. This obviously breaks the
platform detection VMWARE_PORT functionality.
Change the VMWARE_HYPERVISOR_PORT and VMWARE_HYPERVISOR_PORT_HB
definitions to be integers, and use __stringify() for their stringified
form when needed.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sean Christopherson <sean.j.christopherson@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Fixes: b4dd4f6e3648 ("Add a header file for hypercall definitions")
Link: https://lkml.kernel.org/r/20191021172403.3085-3-thomas_os@shipmail.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/include/asm/vmware.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/x86/include/asm/vmware.h b/arch/x86/include/asm/vmware.h index 3caac90f9761..ac9fc51e2b18 100644 --- a/arch/x86/include/asm/vmware.h +++ b/arch/x86/include/asm/vmware.h | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | #include <asm/cpufeatures.h> | 5 | #include <asm/cpufeatures.h> |
6 | #include <asm/alternative.h> | 6 | #include <asm/alternative.h> |
7 | #include <linux/stringify.h> | ||
7 | 8 | ||
8 | /* | 9 | /* |
9 | * The hypercall definitions differ in the low word of the %edx argument | 10 | * The hypercall definitions differ in the low word of the %edx argument |
@@ -20,8 +21,8 @@ | |||
20 | */ | 21 | */ |
21 | 22 | ||
22 | /* Old port-based version */ | 23 | /* Old port-based version */ |
23 | #define VMWARE_HYPERVISOR_PORT "0x5658" | 24 | #define VMWARE_HYPERVISOR_PORT 0x5658 |
24 | #define VMWARE_HYPERVISOR_PORT_HB "0x5659" | 25 | #define VMWARE_HYPERVISOR_PORT_HB 0x5659 |
25 | 26 | ||
26 | /* Current vmcall / vmmcall version */ | 27 | /* Current vmcall / vmmcall version */ |
27 | #define VMWARE_HYPERVISOR_HB BIT(0) | 28 | #define VMWARE_HYPERVISOR_HB BIT(0) |
@@ -29,7 +30,7 @@ | |||
29 | 30 | ||
30 | /* The low bandwidth call. The low word of edx is presumed clear. */ | 31 | /* The low bandwidth call. The low word of edx is presumed clear. */ |
31 | #define VMWARE_HYPERCALL \ | 32 | #define VMWARE_HYPERCALL \ |
32 | ALTERNATIVE_2("movw $" VMWARE_HYPERVISOR_PORT ", %%dx; " \ | 33 | ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT) ", %%dx; " \ |
33 | "inl (%%dx), %%eax", \ | 34 | "inl (%%dx), %%eax", \ |
34 | "vmcall", X86_FEATURE_VMCALL, \ | 35 | "vmcall", X86_FEATURE_VMCALL, \ |
35 | "vmmcall", X86_FEATURE_VMW_VMMCALL) | 36 | "vmmcall", X86_FEATURE_VMW_VMMCALL) |
@@ -39,7 +40,8 @@ | |||
39 | * HB and OUT bits set. | 40 | * HB and OUT bits set. |
40 | */ | 41 | */ |
41 | #define VMWARE_HYPERCALL_HB_OUT \ | 42 | #define VMWARE_HYPERCALL_HB_OUT \ |
42 | ALTERNATIVE_2("movw $" VMWARE_HYPERVISOR_PORT_HB ", %%dx; rep outsb", \ | 43 | ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT_HB) ", %%dx; " \ |
44 | "rep outsb", \ | ||
43 | "vmcall", X86_FEATURE_VMCALL, \ | 45 | "vmcall", X86_FEATURE_VMCALL, \ |
44 | "vmmcall", X86_FEATURE_VMW_VMMCALL) | 46 | "vmmcall", X86_FEATURE_VMW_VMMCALL) |
45 | 47 | ||
@@ -48,7 +50,8 @@ | |||
48 | * HB bit set. | 50 | * HB bit set. |
49 | */ | 51 | */ |
50 | #define VMWARE_HYPERCALL_HB_IN \ | 52 | #define VMWARE_HYPERCALL_HB_IN \ |
51 | ALTERNATIVE_2("movw $" VMWARE_HYPERVISOR_PORT_HB ", %%dx; rep insb", \ | 53 | ALTERNATIVE_2("movw $" __stringify(VMWARE_HYPERVISOR_PORT_HB) ", %%dx; " \ |
54 | "rep insb", \ | ||
52 | "vmcall", X86_FEATURE_VMCALL, \ | 55 | "vmcall", X86_FEATURE_VMCALL, \ |
53 | "vmmcall", X86_FEATURE_VMW_VMMCALL) | 56 | "vmmcall", X86_FEATURE_VMW_VMMCALL) |
54 | #endif | 57 | #endif |