[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86: drop XSAVEOPT and CLWB build flags
commit 87541439838b8d3b30ae1183c03533694b8e5670 Author: Alexander M. Merritt <alexander@xxxxxxxxx> AuthorDate: Thu Apr 3 23:22:19 2025 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Mon Apr 7 12:55:06 2025 +0100 x86: drop XSAVEOPT and CLWB build flags The new toolchain baseline knows both the XSAVEOPT and CLWB instructions. It knows CLFLUSHOPT too, so fix up those. No functional change. Resolves: https://gitlab.com/xen-project/xen/-/work_items/205 Signed-off-by: "Alexander M. Merritt" <alexander@xxxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/arch.mk | 2 -- xen/arch/x86/flushtlb.c | 30 ++---------------------------- xen/arch/x86/include/asm/system.h | 9 +-------- 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk index 3bbaee2a44..8615533697 100644 --- a/xen/arch/x86/arch.mk +++ b/xen/arch/x86/arch.mk @@ -11,9 +11,7 @@ CFLAGS += -msoft-float $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS)) $(call cc-option-add,CFLAGS,CC,-Wnested-externs) $(call as-option-add,CFLAGS,CC,"rdrand %eax",-DHAVE_AS_RDRAND) -$(call as-option-add,CFLAGS,CC,"xsaveopt (%rax)",-DHAVE_AS_XSAVEOPT) $(call as-option-add,CFLAGS,CC,"rdseed %eax",-DHAVE_AS_RDSEED) -$(call as-option-add,CFLAGS,CC,"clwb (%rax)",-DHAVE_AS_CLWB) $(call as-option-add,CFLAGS,CC,".equ \"x\"$(comma)1",-DHAVE_AS_QUOTED_SYM) $(call as-option-add,CFLAGS,CC,"movdiri %rax$(comma)(%rax)",-DHAVE_AS_MOVDIR) $(call as-option-add,CFLAGS,CC,"enqcmd (%rax)$(comma)%rax",-DHAVE_AS_ENQCMD) diff --git a/xen/arch/x86/flushtlb.c b/xen/arch/x86/flushtlb.c index 65be0474a8..1e0011d5b1 100644 --- a/xen/arch/x86/flushtlb.c +++ b/xen/arch/x86/flushtlb.c @@ -287,7 +287,7 @@ void cache_flush(const void *addr, unsigned int size) * of letting the alternative framework fill the gap by appending nops. */ alternative_input("ds; clflush %[p]",/* Semicolon for Clang-IAS < 12 */ - "data16 clflush %[p]", /* clflushopt */ + "clflushopt %[p]", X86_FEATURE_CLFLUSHOPT, [p] "m" (*(const char *)(addr))); } @@ -313,33 +313,7 @@ void cache_writeback(const void *addr, unsigned int size) clflush_size = current_cpu_data.x86_clflush_size ?: 16; addr -= (unsigned long)addr & (clflush_size - 1); for ( ; addr < end; addr += clflush_size ) - { -/* - * The arguments to a macro must not include preprocessor directives. Doing so - * results in undefined behavior, so we have to create some defines here in - * order to avoid it. - */ -#if defined(HAVE_AS_CLWB) -# define CLWB_ENCODING "clwb %[p]" -#elif defined(HAVE_AS_XSAVEOPT) -# define CLWB_ENCODING "data16 xsaveopt %[p]" /* clwb */ -#else -# define CLWB_ENCODING ".byte 0x66, 0x0f, 0xae, 0x30" /* clwb (%%rax) */ -#endif - -#define BASE_INPUT(addr) [p] "m" (*(const char *)(addr)) -#if defined(HAVE_AS_CLWB) || defined(HAVE_AS_XSAVEOPT) -# define INPUT BASE_INPUT -#else -# define INPUT(addr) "a" (addr), BASE_INPUT(addr) -#endif - - asm volatile (CLWB_ENCODING :: INPUT(addr)); - -#undef INPUT -#undef BASE_INPUT -#undef CLWB_ENCODING - } + clwb(addr); asm volatile ("sfence" ::: "memory"); } diff --git a/xen/arch/x86/include/asm/system.h b/xen/arch/x86/include/asm/system.h index 8ceaaf45d1..57446c5b46 100644 --- a/xen/arch/x86/include/asm/system.h +++ b/xen/arch/x86/include/asm/system.h @@ -23,19 +23,12 @@ static inline void clflush(const void *p) static inline void clflushopt(const void *p) { - asm volatile ( "data16 clflush %0" :: "m" (*(const char *)p) ); + asm volatile ( "clflushopt %0" :: "m" (*(const char *)p) ); } static inline void clwb(const void *p) { -#if defined(HAVE_AS_CLWB) asm volatile ( "clwb %0" :: "m" (*(const char *)p) ); -#elif defined(HAVE_AS_XSAVEOPT) - asm volatile ( "data16 xsaveopt %0" :: "m" (*(const char *)p) ); -#else - asm volatile ( ".byte 0x66, 0x0f, 0xae, 0x32" - :: "d" (p), "m" (*(const char *)p) ); -#endif } #define xchg(ptr,v) \ -- generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |