Date: Mon, 9 Feb 2009 04:00:55 +0000 (UTC) From: Pyun YongHyeon <yongari@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org Subject: svn commit: r188378 - in stable/7/sys: . contrib/pf dev/cxgb dev/fxp Message-ID: <200902090400.n1940tvv044785@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: yongari Date: Mon Feb 9 04:00:54 2009 New Revision: 188378 URL: http://svn.freebsd.org/changeset/base/188378 Log: MFC r186262: It seems that we don't need to reserve a TBD to set total TCP payload length in TSO case. Leaving unused TBD also seem to cause SCB timeouts under certain conditions when TSO/non-TSO traffics are active at the same time. Modified: stable/7/sys/ (props changed) stable/7/sys/contrib/pf/ (props changed) stable/7/sys/dev/cxgb/ (props changed) stable/7/sys/dev/fxp/if_fxp.c Modified: stable/7/sys/dev/fxp/if_fxp.c ============================================================================== --- stable/7/sys/dev/fxp/if_fxp.c Mon Feb 9 03:58:29 2009 (r188377) +++ stable/7/sys/dev/fxp/if_fxp.c Mon Feb 9 04:00:54 2009 (r188378) @@ -1540,8 +1540,8 @@ fxp_encap(struct fxp_softc *sc, struct m * the chip is an 82550/82551 or not. */ if (sc->flags & FXP_FLAG_EXT_RFA) { - cbp->tbd[i + 2].tb_addr = htole32(segs[i].ds_addr); - cbp->tbd[i + 2].tb_size = htole32(segs[i].ds_len); + cbp->tbd[i + 1].tb_addr = htole32(segs[i].ds_addr); + cbp->tbd[i + 1].tb_size = htole32(segs[i].ds_len); } else { cbp->tbd[i].tb_addr = htole32(segs[i].ds_addr); cbp->tbd[i].tb_size = htole32(segs[i].ds_len); @@ -1550,13 +1550,13 @@ fxp_encap(struct fxp_softc *sc, struct m if (sc->flags & FXP_FLAG_EXT_RFA) { /* Configure dynamic TBD for 82550/82551. */ cbp->tbd_number = 0xFF; - cbp->tbd[nseg + 1].tb_size |= htole32(0x8000); + cbp->tbd[nseg].tb_size |= htole32(0x8000); } else cbp->tbd_number = nseg; /* Configure TSO. */ if (m->m_pkthdr.csum_flags & CSUM_TSO) { cbp->tbd[-1].tb_size = htole32(m->m_pkthdr.tso_segsz << 16); - cbp->tbd[1].tb_size = htole32(tcp_payload << 16); + cbp->tbd[1].tb_size |= htole32(tcp_payload << 16); cbp->ipcb_ip_schedule |= FXP_IPCB_LARGESEND_ENABLE | FXP_IPCB_IP_CHECKSUM_ENABLE | FXP_IPCB_TCP_PACKET |
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200902090400.n1940tvv044785>