From owner-svn-src-user@FreeBSD.ORG Fri Jun 5 04:20:14 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E782A1065670; Fri, 5 Jun 2009 04:20:14 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BBC978FC14; Fri, 5 Jun 2009 04:20:14 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n554KEmo014115; Fri, 5 Jun 2009 04:20:14 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n554KEqT014114; Fri, 5 Jun 2009 04:20:14 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906050420.n554KEqT014114@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Jun 2009 04:20:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r193481 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jun 2009 04:20:15 -0000 Author: kmacy Date: Fri Jun 5 04:20:14 2009 New Revision: 193481 URL: http://svn.freebsd.org/changeset/base/193481 Log: fix prefetching in tx clean and get packet Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c Fri Jun 5 03:06:24 2009 (r193480) +++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c Fri Jun 5 04:20:14 2009 (r193481) @@ -2034,19 +2034,22 @@ void t3_free_tx_desc(struct sge_qset *qs, int reclaimable, int queue) { struct tx_sw_desc *txsd; - unsigned int cidx; + unsigned int cidx, mask; struct sge_txq *q = &qs->txq[queue]; - + #ifdef T3_TRACE T3_TRACE2(sc->tb[q->cntxt_id & 7], "reclaiming %u Tx descriptors at cidx %u", reclaimable, cidx); #endif cidx = q->cidx; + mask = q->size - 1; txsd = &q->sdesc[cidx]; - DPRINTF("reclaiming %d WR\n", reclaimable); + mtx_assert(&qs->lock, MA_OWNED); while (reclaimable--) { - DPRINTF("cidx=%d d=%p\n", cidx, txsd); + prefetch(q->sdesc[(cidx + 1) & mask].m); + prefetch(q->sdesc[(cidx + 2) & mask].m); + if (txsd->m != NULL) { if (txsd->flags & TX_SW_DESC_MAPPED) { bus_dmamap_unload(q->entry_tag, txsd->map); @@ -2688,15 +2691,20 @@ get_packet(adapter_t *adap, unsigned int unsigned int len_cq = ntohl(r->len_cq); struct sge_fl *fl = (len_cq & F_RSPD_FLQ) ? &qs->fl[1] : &qs->fl[0]; - struct rx_sw_desc *sd = &fl->sdesc[fl->cidx]; + int mask, cidx = fl->cidx; + struct rx_sw_desc *sd = &fl->sdesc[cidx]; uint32_t len = G_RSPD_LEN(len_cq); uint32_t flags = M_EXT; uint8_t sopeop = G_RSPD_SOP_EOP(ntohl(r->flags)); caddr_t cl; struct mbuf *m; int ret = 0; - - prefetch(sd->rxsd_cl); + + mask = fl->size - 1; + prefetch(fl->sdesc[(cidx + 1) & mask].m); + prefetch(fl->sdesc[(cidx + 2) & mask].m); + prefetch(fl->sdesc[(cidx + 1) & mask].rxsd_cl); + prefetch(fl->sdesc[(cidx + 2) & mask].rxsd_cl); fl->credits--; bus_dmamap_sync(fl->entry_tag, sd->map, BUS_DMASYNC_POSTREAD); @@ -2935,7 +2943,7 @@ process_responses(adapter_t *adap, struc rspq->gen ^= 1; r = rspq->desc; } - prefetch(r); + if (++rspq->credits >= (rspq->size / 4)) { refill_rspq(adap, rspq, rspq->credits); rspq->credits = 0; @@ -2955,8 +2963,6 @@ process_responses(adapter_t *adap, struc } else if (eth && eop) { struct mbuf *m = rspq->rspq_mh.mh_head; - prefetch(mtod(m, uint8_t *)); - prefetch(mtod(m, uint8_t *) + L1_CACHE_BYTES); t3_rx_eth(adap, rspq, m, ethpad);