From owner-p4-projects@FreeBSD.ORG Sun Sep 23 06:02:06 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1449C16A41B; Sun, 23 Sep 2007 06:02:06 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B69BA16A417 for ; Sun, 23 Sep 2007 06:02:05 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id BECCE13C48A for ; Sun, 23 Sep 2007 06:02:05 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l8N625ML021245 for ; Sun, 23 Sep 2007 06:02:05 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l8N625RN021242 for perforce@freebsd.org; Sun, 23 Sep 2007 06:02:05 GMT (envelope-from kmacy@freebsd.org) Date: Sun, 23 Sep 2007 06:02:05 GMT Message-Id: <200709230602.l8N625RN021242@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 126709 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Sep 2007 06:02:06 -0000 http://perforce.freebsd.org/chv.cgi?CH=126709 Change 126709 by kmacy@kmacy_home:ethng on 2007/09/23 06:01:53 - simplify reclaim logic - remove calls to m_freem_vec - the previous mbuf iovec API has been replaced with something a bit more robust Affected files ... .. //depot/projects/ethng/src/sys/dev/cxgb/cxgb_multiq.c#18 edit Differences ... ==== //depot/projects/ethng/src/sys/dev/cxgb/cxgb_multiq.c#18 (text+ko) ==== @@ -56,6 +56,7 @@ #include #include #include +#include #include #include @@ -80,10 +81,15 @@ #include #include +#include +#include + #ifdef CONFIG_DEFINED #include +#include #else #include +#include #endif extern struct sysctl_oid_list sysctl__hw_cxgb_children; @@ -117,7 +123,7 @@ int err = 0; if (qs->qs_flags & QS_EXITING) { - m_freem_vec(m); + m_freem(m); return (ENXIO); } txq = &qs->txq[TXQ_ETH]; @@ -349,7 +355,7 @@ */ if (mbufq_len(mbq) > cxgb_txq_mbuf_ring_size) { if (imm) { - m_freem_vec(imm); + m_freem(imm); txq->txq_drops++; } return (ENOBUFS); @@ -376,52 +382,35 @@ struct sge_txq *txq = &qs->txq[TXQ_ETH]; while ((m = mbufq_dequeue(&txq->sendq)) != NULL) - m_freem_vec(m); + m_freem(m); cxgb_pcpu_pkt_coalesce(txq, NULL); while ((m = mbufq_dequeue(&txq->sendq)) != NULL) - m_freem_vec(m); + m_freem(m); } static int cxgb_pcpu_reclaim_tx(struct sge_txq *txq, struct mbuf_head *mbq) { - int reclaimable, total_reclaimed, reclaimed, freed, i, j, n; - struct mbuf *m_vec[TX_CLEAN_MAX_DESC]; + int reclaimable; struct sge_qset *qs = txq_to_qset(txq, TXQ_ETH); - +#ifdef notyet KASSERT(qs->qs_cpuid == curcpu, ("cpu qset mismatch cpuid=%d curcpu=%d", qs->qs_cpuid, curcpu)); +#endif + + reclaimable = desc_reclaimable(txq); + if (reclaimable == 0) + return (0); - freed = total_reclaimed = j = 0; - while ((reclaimable = desc_reclaimable(txq)) > 0) { - n = t3_free_tx_desc(txq, reclaimable, m_vec, TX_CLEAN_MAX_DESC, &reclaimed); + t3_free_tx_desc(txq, reclaimable); - total_reclaimed += reclaimed; - - if (j > 20 || cxgb_debug) - printf("n=%d reclaimable=%d txq->processed=%d txq->cleaned=%d txq->in_use=%d\n", - n, reclaimable, txq->processed, txq->cleaned, txq->in_use); - - for (i = 0; i < n; i++) - prefetch(m_vec[i]); - /* - * really want to use an mbuf_ring here to avoid touching touching the mbufs - * when all we want to do is store them for later - */ - for (i = 0; i < n; i++) - mbufq_tail(mbq, m_vec[i]); - freed += n; - j++; - - txq->cleaned += reclaimed; - txq->in_use -= reclaimed; - if (isset(&qs->txq_stopped, TXQ_ETH)) - clrbit(&qs->txq_stopped, TXQ_ETH); - } - - txq->txq_frees += freed; - return (reclaimed); + txq->cleaned += reclaimable; + txq->in_use -= reclaimable; + if (isset(&qs->txq_stopped, TXQ_ETH)) + clrbit(&qs->txq_stopped, TXQ_ETH); + + return (reclaimable); } static int @@ -451,7 +440,7 @@ if (cxgb_debug) printf("cxgb link down\n"); if (immpkt) - m_freem_vec(immpkt); + m_freem(immpkt); return (initerr); } @@ -543,7 +532,7 @@ } else { critical_exit(); while ((m = mbufq_dequeue(&mbq)) != NULL) - m_freem_vec(m); + m_freem(m); } return ((err == ENOSPC) ? 0 : err); @@ -669,7 +658,7 @@ mbufq_init(&txq->cleanq); critical_exit(); while ((m = mbufq_dequeue(&mbq)) != NULL) - m_freem_vec(m); + m_freem(m); tsleep(qs, 1, "cxgbidle", sleep_ticks); }