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>
This commit is contained in:
Chris Zankel 2009-04-16 00:28:09 -07:00
parent 35e71f9068
commit 7dbe5c5424
1 changed files with 4 additions and 2 deletions

View File

@ -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);
} }