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,