Re: FTP stalls on tl0 on Challenge S

"Stephen M. Rumble" <[email protected]> Fri, 26 Mar 2010 19:43:25 -0700
Newsgroups gmane.os.netbsd.ports.sgimips
Message-ID <[email protected]>
On Mar 26, 2010, at 3:21 PM, George Harvey wrote:

> Good call, the bad checksum count does increment. Wireshark says the IP
> and TCP checksums are good so that tends to confirm the problem's in
> the SGI.

Hi George,

Sounds like we may be messing up the receive DMA. Could you try the attached patch (against src/sys/dev/pci/if_tl.c)? I recall correctly, I eventually discovered that this nic's pci<->gio bus bridge can't DMA across page boundaries. I fixed the TX side, but for some reason neglected RX. I don't recall if I just forgot to handle the RX case and it worked well enough, or if I believed it wasn't necessary for some reason.

Anyway, if that doesn't work, I'd suspect that if_tl's bus_dma usage isn't quite correct, but I think it has been used by others in SGI O2s without trouble.

Let me know if you'd like me to build a kernel. I don't have the toolchain set up, but that'd be easy to do.

Steve
if_tl.c.patch (application/octet-stream, 497 B)
--- if_tl.c.old	2008-10-04 14:00:28.000000000 -0700
+++ if_tl.c	2009-09-13 03:34:27.000000000 -0700
@@ -664,8 +664,8 @@
 
 	error = bus_dmamap_create(sc->tl_dmatag,
 	    sizeof(struct tl_Rx_list) * TL_NBUF, 1,
-	    sizeof(struct tl_Rx_list) * TL_NBUF, 0, BUS_DMA_WAITOK,
-	    &sc->Rx_dmamap);
+	    sizeof(struct tl_Rx_list) * TL_NBUF, boundary,
+	    BUS_DMA_WAITOK, &sc->Rx_dmamap);
 	if (error == 0)
 		error = bus_dmamap_create(sc->tl_dmatag,
 		    sizeof(struct tl_Tx_list) * TL_NBUF, 1,