On Sat, May 31, 2008 at 04:58:58AM -0600, Matthew Wilcox wrote: ... > So if GCC has something in a register, it might not bother to write it > back to ram before this asm if we don't have the memory clobber. Willy, thanks for explaining...I had to reread this a few times to "get it". This would also explain why we saw it on ip_output where the ipv4 header was being written. > Fantastic work, Kyle. Thanks for spending so much time on this. Agreed. I owe you a bar of chocolate. > > diff --git a/include/asm-parisc/checksum.h b/include/asm-parisc/checksum.h > > index cc3ec1b..1916ebe 100644 > > --- a/include/asm-parisc/checksum.h > > +++ b/include/asm-parisc/checksum.h > > @@ -65,7 +65,7 @@ static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl) > > "2:\n" > > : "=r" (sum), "=r" (iph), "=r" (ihl) > > : "1" (iph), "2" (ihl) > > - : "r19", "r20", "r21" ); > > + : "r19", "r20", "r21", "memory" ); > > > > return (__force __sum16)sum; > > } Does csum_ipv6_magic() also need the same treatment? Kyle suspects csum_ipv6_magic() might be ok because it's passing in a "struct ipv6_addr *". If that's correct, maybe we should ask davem/et al to change ip_fast_csum() to take "struct iphdr *" as well? thanks, grant -- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html