xen: x86 & generic: change to __builtin_prefetch()
authorIan Campbell <ian.campbell@citrix.com>
Wed, 26 Mar 2014 13:38:36 +0000 (13:38 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Thu, 3 Apr 2014 16:15:41 +0000 (17:15 +0100)
Quoting Andi Kleen in Linux b483570a13be from 2007:
    gcc 3.2+ supports __builtin_prefetch, so it's possible to use it on all
    architectures. Change the generic fallback in linux/prefetch.h to use it
    instead of noping it out. gcc should do the right thing when the
    architecture doesn't support prefetching

    Undefine the x86-64 inline assembler version and use the fallback.

ARM wants to use the builtins.

Fix a pair of spelling errors, one of which was from Lucas De Marchi in the
Linux tree.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Cc: Keir Fraser <keir@xen.org>
Acked-by: Tim Deegan <tim@xen.org>
xen/include/xen/prefetch.h

index 8d7d3ffeb4818d6d566dc27c4a79cdcead327f8d..ba7399828e6993c01097b6aab69f9166139aa1ae 100644 (file)
        prefetchw(x)    - prefetches the cacheline at "x" for write
        spin_lock_prefetch(x) - prefectches the spinlock *x for taking
        
-       there is also PREFETCH_STRIDE which is the architecure-prefered 
+       there is also PREFETCH_STRIDE which is the architecture-preferred
        "lookahead" size for prefetching streamed operations.
        
 */
 
-/*
- *     These cannot be do{}while(0) macros. See the mental gymnastics in
- *     the loop macro.
- */
 #ifndef ARCH_HAS_PREFETCH
-#define ARCH_HAS_PREFETCH
-static inline void prefetch(const void *x) {;}
+#define prefetch(x) __builtin_prefetch(x)
 #endif
 
 #ifndef ARCH_HAS_PREFETCHW
-#define ARCH_HAS_PREFETCHW
-static inline void prefetchw(const void *x) {;}
+#define prefetchw(x) __builtin_prefetch(x,1)
 #endif
 
 #ifndef ARCH_HAS_SPINLOCK_PREFETCH