In the interest of completeness, I'll split these patches up and submit to the powerpc dev list. Any discussion or ack/nack would be appreciated.
--- lwsync is defined to only order memory operations on cacheable memory. A full sync appears to be the only barrier that will order all memory loads including device memory. Signed-off-by: Nick Piggin <[EMAIL PROTECTED]> Index: linux-2.6/include/asm-powerpc/system.h =================================================================== --- linux-2.6.orig/include/asm-powerpc/system.h +++ linux-2.6/include/asm-powerpc/system.h @@ -33,7 +33,7 @@ * SMP since it is only used to order updates to system memory. */ #define mb() __asm__ __volatile__ ("sync" : : : "memory") -#define rmb() __asm__ __volatile__ (__stringify(LWSYNC) : : : "memory") +#define rmb() __asm__ __volatile__ ("sync" : : : "memory") #define wmb() __asm__ __volatile__ ("sync" : : : "memory") #define read_barrier_depends() do { } while(0) @@ -42,7 +42,7 @@ #ifdef __KERNEL__ #ifdef CONFIG_SMP #define smp_mb() mb() -#define smp_rmb() rmb() +#define smp_rmb() __asm__ __volatile__ (__stringify(LWSYNC) : : : "memory") #define smp_wmb() eieio() #define smp_read_barrier_depends() read_barrier_depends() #else _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev