On 2025-04-03 19:34, Andrew Cooper wrote:
On 04/04/2025 12:28 am, Andrew Cooper wrote:
Also, I forgot to write in the ticket, clflushopt wants similar
treatment, even if there isn't an outward define for it. I think the
following two hunks should do:
~Andrew
diff --git a/xen/arch/x86/flushtlb.c b/xen/arch/x86/flushtlb.c
index 18748b2bc805..ef30ef546336 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_io("ds; clflush %[p]",
- "data16 clflush %[p]", /* clflushopt */
+ "clflushopt %[p]",
Agree on these changes. However, I see branch staging uses
alternative_input and the below /* no outputs */ does not exist.
X86_FEATURE_CLFLUSHOPT,
/* no outputs */,
[p] "m" (*(const char *)(addr)));
diff --git a/xen/arch/x86/include/asm/system.h
b/xen/arch/x86/include/asm/system.h
index 73cb16ca68d6..6f5b6d502911 100644
--- a/xen/arch/x86/include/asm/system.h
+++ b/xen/arch/x86/include/asm/system.h
@@ -23,7 +23,7 @@ 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)