Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP7:GA
xen.7985
5a9985bd-x86-invpcid-support.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 5a9985bd-x86-invpcid-support.patch of Package xen.7985
From 63dc135aeaf905d1ac3d8e82b88ca29420783f13 Mon Sep 17 00:00:00 2001 From: Wei Liu <wei.liu2@citrix.com> Date: Fri, 2 Mar 2018 16:23:38 +0000 Subject: [PATCH] x86: invpcid support Provide the functions needed for different modes. Add cpu_has_invpcid. Signed-off-by: Wei Liu <wei.liu2@citrix.com> Reviewed-by: Juergen Gross <jgross@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> --- xen/arch/x86/Rules.mk | 1 + xen/include/asm-x86/cpufeature.h | 1 + xen/include/asm-x86/invpcid.h | 70 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 xen/include/asm-x86/invpcid.h diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk index 9897deaab9..acec5ce92a 100644 --- a/xen/arch/x86/Rules.mk +++ b/xen/arch/x86/Rules.mk @@ -23,6 +23,7 @@ $(call as-option-add,CFLAGS,CC,"rdseed %eax",-DHAVE_GAS_RDSEED) $(call as-insn-check,CFLAGS,CC,".equ \"x\"$$(comma)1", \ -U__OBJECT_LABEL__ -DHAVE_GAS_QUOTED_SYM \ '-D__OBJECT_LABEL__=$(subst $(BASEDIR)/,,$(CURDIR))/$$@') +$(call as-insn-check,CFLAGS,CC,"invpcid (%rax)$$(comma)%rax",-DHAVE_AS_INVPCID) CFLAGS += -mno-red-zone -mno-sse -fpic CFLAGS += -fno-asynchronous-unwind-tables diff --git a/xen/include/asm-x86/cpufeature.h b/xen/include/asm-x86/cpufeature.h index 55b696ed07..db8072279d 100644 --- a/xen/include/asm-x86/cpufeature.h +++ b/xen/include/asm-x86/cpufeature.h @@ -90,6 +90,7 @@ #define cpu_has_avx2 boot_cpu_has(X86_FEATURE_AVX2) #define cpu_has_smep boot_cpu_has(X86_FEATURE_SMEP) #define cpu_has_bmi2 boot_cpu_has(X86_FEATURE_BMI2) +#define cpu_has_invpcid boot_cpu_has(X86_FEATURE_INVPCID) #define cpu_has_rtm boot_cpu_has(X86_FEATURE_RTM) #define cpu_has_fpu_sel (!boot_cpu_has(X86_FEATURE_NO_FPU_SEL)) #define cpu_has_mpx boot_cpu_has(X86_FEATURE_MPX) diff --git a/xen/include/asm-x86/invpcid.h b/xen/include/asm-x86/invpcid.h new file mode 100644 index 0000000000..b46624a865 --- /dev/null +++ b/xen/include/asm-x86/invpcid.h @@ -0,0 +1,70 @@ +#ifndef _ASM_X86_INVPCID_H_ +#define _ASM_X86_INVPCID_H_ + +#include <xen/types.h> + +#define INVPCID_TYPE_INDIV_ADDR 0 +#define INVPCID_TYPE_SINGLE_CTXT 1 +#define INVPCID_TYPE_ALL_INCL_GLOBAL 2 +#define INVPCID_TYPE_ALL_NON_GLOBAL 3 + +#define INVPCID_OPCODE ".byte 0x66, 0x0f, 0x38, 0x82\n" +#define MODRM_ECX_01 ".byte 0x01\n" + +static inline void invpcid(unsigned int pcid, unsigned long addr, + unsigned int type) +{ + struct { + uint64_t pcid:12; + uint64_t reserved:52; + uint64_t addr; + } desc = { .pcid = pcid, .addr = addr }; + + asm volatile ( +#ifdef HAVE_AS_INVPCID + "invpcid %[desc], %q[type]" + : /* No output */ + : [desc] "m" (desc), [type] "r" (type) +#else + INVPCID_OPCODE MODRM_ECX_01 + : /* No output */ + : "a" (type), "c" (&desc) +#endif + : "memory" ); +} + +/* Flush all mappings for a given PCID and addr, not including globals */ +static inline void invpcid_flush_one(unsigned int pcid, unsigned long addr) +{ + invpcid(pcid, addr, INVPCID_TYPE_INDIV_ADDR); +} + +/* Flush all mappings for a given PCID, not including globals */ +static inline void invpcid_flush_single_context(unsigned int pcid) +{ + invpcid(pcid, 0, INVPCID_TYPE_SINGLE_CTXT); +} + +/* Flush all mappings, including globals, for all PCIDs */ +static inline void invpcid_flush_all(void) +{ + invpcid(0, 0, INVPCID_TYPE_ALL_INCL_GLOBAL); +} + +/* Flush all mappings for all PCIDs, excluding globals */ +static inline void invpcid_flush_all_nonglobals(void) +{ + invpcid(0, 0, INVPCID_TYPE_ALL_NON_GLOBAL); +} + +#endif /* _ASM_X86_INVPCID_H_ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.11.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor