|
@@ -218,6 +218,8 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
|
|
__u32 len, unsigned short proto,
|
|
|
__wsum sum)
|
|
|
{
|
|
|
+ __wsum tmp;
|
|
|
+
|
|
|
__asm__(
|
|
|
" .set push # csum_ipv6_magic\n"
|
|
|
" .set noreorder \n"
|
|
@@ -270,9 +272,9 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
|
|
|
|
|
" addu %0, $1 # Add final carry\n"
|
|
|
" .set pop"
|
|
|
- : "=r" (sum), "=r" (proto)
|
|
|
+ : "=&r" (sum), "=&r" (tmp)
|
|
|
: "r" (saddr), "r" (daddr),
|
|
|
- "0" (htonl(len)), "1" (htonl(proto)), "r" (sum));
|
|
|
+ "0" (htonl(len)), "r" (htonl(proto)), "r" (sum));
|
|
|
|
|
|
return csum_fold(sum);
|
|
|
}
|