Date: Thu, 4 Jun 2009 05:20:46 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r193428 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb Message-ID: <200906040520.n545KkvB078328@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Thu Jun 4 05:20:46 2009 New Revision: 193428 URL: http://svn.freebsd.org/changeset/base/193428 Log: simplify packet initialization in 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 Thu Jun 4 04:43:07 2009 (r193427) +++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c Thu Jun 4 05:20:46 2009 (r193428) @@ -2633,7 +2633,7 @@ get_packet(adapter_t *adap, unsigned int uint32_t flags = M_EXT; uint8_t sopeop = G_RSPD_SOP_EOP(ntohl(r->flags)); caddr_t cl; - struct mbuf *m, *m0; + struct mbuf *m; int ret = 0; prefetch(sd->rxsd_cl); @@ -2643,29 +2643,37 @@ get_packet(adapter_t *adap, unsigned int if (recycle_enable && len <= SGE_RX_COPY_THRES && sopeop == RSPQ_SOP_EOP) { - if ((m0 = m_gethdr(M_DONTWAIT, MT_DATA)) == NULL) + if ((m = m_gethdr(M_DONTWAIT, MT_DATA)) == NULL) goto skip_recycle; - cl = mtod(m0, void *); + cl = mtod(m, void *); memcpy(cl, sd->rxsd_cl, len); recycle_rx_buf(adap, fl, fl->cidx); - m = m0; - m0->m_len = len; - m0->m_flags = 0; + m->m_pkthdr.len = m->m_len = len; + m->m_flags = 0; + mh->mh_head = mh->mh_tail = m; + ret = 1; + goto done; } else { skip_recycle: - bus_dmamap_unload(fl->entry_tag, sd->map); cl = sd->rxsd_cl; - m = m0 = sd->m; + m = sd->m; if ((sopeop == RSPQ_SOP_EOP) || (sopeop == RSPQ_SOP)) flags |= M_PKTHDR; - if (fl->zone != zone_pack) - m_cljset(m0, cl, fl->type); - m0->m_flags = flags; - m0->m_next = m0->m_nextpkt = NULL; - m0->m_pkthdr.len = m0->m_len = len; + if (fl->zone == zone_pack) { + m_init(m, zone_pack, MCLBYTES, M_NOWAIT, MT_DATA, flags); + /* + * restore clobbered data pointer + */ + m->m_data = m->m_ext.ext_buf; + } else { + m_cljset(m, cl, fl->type); + m->m_flags = flags; + m->m_next = m->m_nextpkt = NULL; + } + m->m_len = len; } switch(sopeop) { case RSPQ_SOP_EOP: @@ -2700,6 +2708,9 @@ get_packet(adapter_t *adap, unsigned int ret = 1; break; } + if (cxgb_debug) + printf("len=%d pktlen=%d\n", m->m_len, m->m_pkthdr.len); +done: if (++fl->cidx == fl->size) fl->cidx = 0; @@ -2843,8 +2854,11 @@ process_responses(adapter_t *adap, struc int drop_thresh = eth ? SGE_RX_DROP_THRES : 0; eop = get_packet(adap, drop_thresh, qs, &rspq->rspq_mh, r); - rspq->rspq_mh.mh_head->m_flags |= M_FLOWID; - rspq->rspq_mh.mh_head->m_pkthdr.flowid = rss_hash; + if (eop) { + rspq->rspq_mh.mh_head->m_flags |= M_FLOWID; + rspq->rspq_mh.mh_head->m_pkthdr.flowid = rss_hash; + } + ethpad = 2; } else { DPRINTF("pure response\n");
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906040520.n545KkvB078328>