Grant Grundler | 1 Jun 2008 03:37
Favicon

Re: [bug] gcc-4.3 miscompiling causing networking to bugger up

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
> >  <at>  <at>  -65,7 +65,7  <at>  <at>  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 <at> vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Gmane