Port-powerpc archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: about powerpc version of in{,4}_cksum



On Tue, 30 Jul 2002, enami tsugutomo wrote:

> There is some bug and some possible improvement for current powerpc
> version of in{,4}_cksum (which is found in
> sys/arch/powerpc/powerpc/in_cksum.c).  Highlight is:
>
> 1) addze 7,7 or addze %1,%1 are used to clear carry bit, but they
>    aren't correct.  The former fails to clear if junk register r7
>    happen to contain 0xffffffff, and the latter may crobber non-junk
>    (i.e., necessary) register.
>
> 2) When adjusting to 4 byte boundary, just adding 16bit value to the
>    variable `sum' isn't enough, since the `sum' may have full 32bit
>    value there, depending on how a packet is divided into mbufs.  So,
>    we need to care carry bit.  This actually prevented my Mac
>    (g4-500dp) from netbooting.  (we can REDUCE instead but it results
>    longer instructions).
>
> 3) In asm statemnt, constraint letter "b" (base register) should be
>    used instead of "r" for pointer operand.
>
> 4) Load with update is slower than ordinary load (+ add) depending on
>    implementation (this is written in powerpc programming manual).
>    With appended changes below, in4_cksum for a paticular packet
>    (which is a nfs packet I've used to debug 2) above) runs about 15%
>    faster on my Mac.  I'm not sure how this affects other powerpc
>    variant though.
>
> Comments?

Heh. And posting on problems with this routine was on my schedule for
today. :-)

I've been working on the NFS bug reported by Erik Anggard
<erik.anggard%packetfront.com@localhost>, because I encountered a similar bug 
while
compiling X over an nfs mount.

> ***************
> *** 229,234 ****
> --- 236,242 ----
>   int
>   in_cksum(struct mbuf *m, int len)
>   {
> +
>       return (in_cksum_internal(m, 0, len, 0));
>   }
>
>

This change is the only one I'm not sure about. :-)

Please commit it and request a pullup to 1.6.

Thanks!

Take care,

Bill




Home | Main Index | Thread Index | Old Index