Date: Fri, 21 Nov 2008 08:20:28 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r185153 - user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb Message-ID: <200811210820.mAL8KS8l079014@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Fri Nov 21 08:20:28 2008 New Revision: 185153 URL: http://svn.freebsd.org/changeset/base/185153 Log: add per-hardware queue ifaltq to enable altq with multiple transmit queues Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_adapter.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_multiq.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_sge.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_adapter.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_adapter.h Fri Nov 21 08:19:20 2008 (r185152) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_adapter.h Fri Nov 21 08:20:28 2008 (r185153) @@ -260,7 +260,9 @@ struct sge_txq { */ struct mbuf_head cleanq; struct buf_ring *txq_mr; + struct ifaltq *txq_ifq; struct mbuf *immpkt; + uint32_t txq_drops; uint32_t txq_skipped; uint32_t txq_coalesced; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_multiq.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_multiq.c Fri Nov 21 08:19:20 2008 (r185152) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_multiq.c Fri Nov 21 08:20:28 2008 (r185153) @@ -149,7 +149,7 @@ cxgb_pcpu_enqueue_packet(struct ifnet *i #endif qs = &pi->adapter->sge.qs[qidx]; if (ALTQ_IS_ENABLED(&ifp->if_snd)) { - IFQ_ENQUEUE(&ifp->if_snd, m, err); + IFQ_ENQUEUE(qs->txq[0].txq_ifq, m, err); } else { err = cxgb_pcpu_enqueue_packet_(qs, m); } @@ -178,8 +178,8 @@ cxgb_dequeue_packet(struct sge_txq *txq, m_vec[0] = m; return (1); #endif - if (ALTQ_ENABLED(&pi->ifp->if_snd)) { - IFQ_DRV_DEQUEUE(&pi->ifp->if_snd, m); + if (ALTQ_IS_ENABLED(txq->txq_ifq)) { + IFQ_DRV_DEQUEUE(txq->txq_ifq, m); if (m == NULL) return (0); @@ -307,7 +307,7 @@ cxgb_pcpu_start_(struct sge_qset *qs, st else if (immpkt) { if (!buf_ring_empty(txq->txq_mr) - || ALTQ_ENABLED(&pi->ifp->if_snd)) + || ALTQ_IS_ENABLED(&pi->ifp->if_snd)) initerr = cxgb_pcpu_enqueue_packet_(qs, immpkt); else txq->immpkt = immpkt; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_sge.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_sge.c Fri Nov 21 08:19:20 2008 (r185152) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_sge.c Fri Nov 21 08:20:28 2008 (r185153) @@ -1714,9 +1714,15 @@ t3_free_qset(adapter_t *sc, struct sge_q t3_free_tx_desc_all(&q->txq[TXQ_ETH]); - for (i = 0; i < SGE_TXQ_PER_SET; i++) + for (i = 0; i < SGE_TXQ_PER_SET; i++) { if (q->txq[i].txq_mr != NULL) buf_ring_free(q->txq[i].txq_mr, M_DEVBUF); + if (q->txq[i].txq_ifq != NULL) { + ifq_detach(q->txq[i].txq_ifq); + free(q->txq[i].txq_ifq, M_DEVBUF); + } + } + for (i = 0; i < SGE_RXQ_PER_SET; ++i) { if (q->fl[i].desc) { mtx_lock_spin(&sc->sge.reg_lock); @@ -2281,6 +2287,13 @@ t3_sge_alloc_qset(adapter_t *sc, u_int i device_printf(sc->dev, "failed to allocate mbuf ring\n"); goto err; } + if ((q->txq[i].txq_ifq = + malloc(sizeof(struct ifaltq), M_DEVBUF, M_NOWAIT|M_ZERO)) + == NULL) { + device_printf(sc->dev, "failed to allocate ifq\n"); + goto err; + } + ifq_attach(q->txq[i].txq_ifq, pi->ifp); } init_qset_cntxt(q, id); q->idx = id;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811210820.mAL8KS8l079014>