Browse Source

xtensa: Fix checksum header file

We need to add a "memory" dependency (barrier) in assembly macros
that access (read or write) memory. Otherwise, the compiler might
ill-optimize the order of memory accesses.

Signed-off-by: Chris Zankel <chris@zankel.net>
Chris Zankel 16 years ago
parent
commit
7dbe5c5424
1 changed files with 4 additions and 2 deletions
  1. 4 2
      arch/xtensa/include/asm/checksum.h

+ 4 - 2
arch/xtensa/include/asm/checksum.h

@@ -113,7 +113,8 @@ static __inline__ __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
 	   are modified, we must also specify them as outputs, or gcc
 	   are modified, we must also specify them as outputs, or gcc
 	   will assume they contain their original values. */
 	   will assume they contain their original values. */
 		: "=r" (sum), "=r" (iph), "=r" (ihl), "=&r" (tmp), "=&r" (endaddr)
 		: "=r" (sum), "=r" (iph), "=r" (ihl), "=&r" (tmp), "=&r" (endaddr)
-		: "1" (iph), "2" (ihl));
+		: "1" (iph), "2" (ihl)
+		: "memory");
 
 
 	return	csum_fold(sum);
 	return	csum_fold(sum);
 }
 }
@@ -227,7 +228,8 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
 		"1:\t"
 		"1:\t"
 		: "=r" (sum), "=&r" (__dummy)
 		: "=r" (sum), "=&r" (__dummy)
 		: "r" (saddr), "r" (daddr),
 		: "r" (saddr), "r" (daddr),
-		  "r" (htonl(len)), "r" (htonl(proto)), "0" (sum));
+		  "r" (htonl(len)), "r" (htonl(proto)), "0" (sum)
+		: "memory");
 
 
 	return csum_fold(sum);
 	return csum_fold(sum);
 }
 }