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)

Reply via email to