Author: marius
Date: Wed Jan 13 21:47:27 2016
New Revision: 293854
URL: https://svnweb.freebsd.org/changeset/base/293854

Log:
  Given that em(4), lem(4) and igb(4) hardware doesn't require the
  alignment guarantees provided by m_defrag(9), use m_collapse(9)
  instead for performance reasons.
  While at it, sanitize the statistics softc members, i. e. retire
  unused ones and add SYSCTL nodes missing for actually used ones.
  
  Differential Revision:        https://reviews.freebsd.org/D4717

Modified:
  head/sys/dev/e1000/if_em.c
  head/sys/dev/e1000/if_em.h
  head/sys/dev/e1000/if_igb.c
  head/sys/dev/e1000/if_igb.h
  head/sys/dev/e1000/if_lem.c
  head/sys/dev/e1000/if_lem.h

Modified: head/sys/dev/e1000/if_em.c
==============================================================================
--- head/sys/dev/e1000/if_em.c  Wed Jan 13 21:38:52 2016        (r293853)
+++ head/sys/dev/e1000/if_em.c  Wed Jan 13 21:47:27 2016        (r293854)
@@ -2035,9 +2035,9 @@ retry:
        if (error == EFBIG && remap) {
                struct mbuf *m;
 
-               m = m_defrag(*m_headp, M_NOWAIT);
+               m = m_collapse(*m_headp, M_NOWAIT, EM_MAX_SCATTER);
                if (m == NULL) {
-                       adapter->mbuf_alloc_failed++;
+                       adapter->mbuf_defrag_failed++;
                        m_freem(*m_headp);
                        *m_headp = NULL;
                        return (ENOBUFS);
@@ -5493,18 +5493,15 @@ em_add_hw_stats(struct adapter *adapter)
        char namebuf[QUEUE_NAME_LEN];
        
        /* Driver Statistics */
-       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "link_irq",
-                       CTLFLAG_RD, &adapter->link_irq,
-                       "Link MSIX IRQ Handled");
-       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_alloc_fail", 
-                        CTLFLAG_RD, &adapter->mbuf_alloc_failed,
-                        "Std mbuf failed");
-       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "cluster_alloc_fail", 
-                        CTLFLAG_RD, &adapter->mbuf_cluster_failed,
-                        "Std mbuf cluster failed");
        SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped", 
                        CTLFLAG_RD, &adapter->dropped_pkts,
                        "Driver dropped packets");
+       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "link_irq",
+                       CTLFLAG_RD, &adapter->link_irq,
+                       "Link MSIX IRQ Handled");
+       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_defrag_fail", 
+                        CTLFLAG_RD, &adapter->mbuf_defrag_failed,
+                        "Defragmenting mbuf chain failed");
        SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "tx_dma_fail", 
                        CTLFLAG_RD, &adapter->no_tx_dma_setup,
                        "Driver tx dma failure in xmit");

Modified: head/sys/dev/e1000/if_em.h
==============================================================================
--- head/sys/dev/e1000/if_em.h  Wed Jan 13 21:38:52 2016        (r293853)
+++ head/sys/dev/e1000/if_em.h  Wed Jan 13 21:47:27 2016        (r293854)
@@ -473,13 +473,12 @@ struct adapter {
 
        /* Misc stats maintained by the driver */
        unsigned long   dropped_pkts;
-       unsigned long   mbuf_alloc_failed;
-       unsigned long   mbuf_cluster_failed;
+       unsigned long   link_irq;
+       unsigned long   mbuf_defrag_failed;
+       unsigned long   no_tx_dma_setup;
        unsigned long   no_tx_map_avail;
-        unsigned long  no_tx_dma_setup;
        unsigned long   rx_overruns;
        unsigned long   watchdog_events;
-       unsigned long   link_irq;
 
        struct e1000_hw_stats stats;
 };

Modified: head/sys/dev/e1000/if_igb.c
==============================================================================
--- head/sys/dev/e1000/if_igb.c Wed Jan 13 21:38:52 2016        (r293853)
+++ head/sys/dev/e1000/if_igb.c Wed Jan 13 21:47:27 2016        (r293854)
@@ -1835,7 +1835,8 @@ retry:
                        /* Try it again? - one try */
                        if (remap == TRUE) {
                                remap = FALSE;
-                               m = m_defrag(*m_headp, M_NOWAIT);
+                               m = m_collapse(*m_headp, M_NOWAIT,
+                                   IGB_MAX_SCATTER);
                                if (m == NULL) {
                                        adapter->mbuf_defrag_failed++;
                                        m_freem(*m_headp);
@@ -5826,12 +5827,15 @@ igb_add_hw_stats(struct adapter *adapter
        char namebuf[QUEUE_NAME_LEN];
 
        /* Driver Statistics */
-       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "link_irq", 
-                       CTLFLAG_RD, &adapter->link_irq,
-                       "Link MSIX IRQ Handled");
        SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped", 
                        CTLFLAG_RD, &adapter->dropped_pkts,
                        "Driver dropped packets");
+       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "link_irq", 
+                       CTLFLAG_RD, &adapter->link_irq,
+                       "Link MSIX IRQ Handled");
+       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_defrag_fail",
+                       CTLFLAG_RD, &adapter->mbuf_defrag_failed,
+                       "Defragmenting mbuf chain failed");
        SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "tx_dma_fail", 
                        CTLFLAG_RD, &adapter->no_tx_dma_setup,
                        "Driver tx dma failure in xmit");

Modified: head/sys/dev/e1000/if_igb.h
==============================================================================
--- head/sys/dev/e1000/if_igb.h Wed Jan 13 21:38:52 2016        (r293853)
+++ head/sys/dev/e1000/if_igb.h Wed Jan 13 21:47:27 2016        (r293854)
@@ -512,20 +512,19 @@ struct adapter {
        u8                      *mta;
 
        /* Misc stats maintained by the driver */
+       unsigned long           device_control;
        unsigned long           dropped_pkts;
+       unsigned long           eint_mask;
+       unsigned long           int_mask;
+       unsigned long           link_irq;
        unsigned long           mbuf_defrag_failed;
-       unsigned long           mbuf_header_failed;
-       unsigned long           mbuf_packet_failed;
        unsigned long           no_tx_dma_setup;
-       unsigned long           watchdog_events;
-       unsigned long           link_irq;
-       unsigned long           rx_overruns;
-       unsigned long           device_control;
-       unsigned long           rx_control;
-       unsigned long           int_mask;
-       unsigned long           eint_mask;
        unsigned long           packet_buf_alloc_rx;
        unsigned long           packet_buf_alloc_tx;
+       unsigned long           rx_control;
+       unsigned long           rx_overruns;
+       unsigned long           watchdog_events;
+
        /* Used in pf and vf */
        void                    *stats;
 

Modified: head/sys/dev/e1000/if_lem.c
==============================================================================
--- head/sys/dev/e1000/if_lem.c Wed Jan 13 21:38:52 2016        (r293853)
+++ head/sys/dev/e1000/if_lem.c Wed Jan 13 21:47:27 2016        (r293854)
@@ -1675,9 +1675,9 @@ lem_xmit(struct adapter *adapter, struct
        if (error == EFBIG) {
                struct mbuf *m;
 
-               m = m_defrag(*m_headp, M_NOWAIT);
+               m = m_collapse(*m_headp, M_NOWAIT, EM_MAX_SCATTER);
                if (m == NULL) {
-                       adapter->mbuf_alloc_failed++;
+                       adapter->mbuf_defrag_failed++;
                        m_freem(*m_headp);
                        *m_headp = NULL;
                        return (ENOBUFS);
@@ -4526,12 +4526,12 @@ lem_add_hw_stats(struct adapter *adapter
        struct sysctl_oid_list *stat_list;
 
        /* Driver Statistics */
-       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_alloc_fail", 
-                        CTLFLAG_RD, &adapter->mbuf_alloc_failed,
-                        "Std mbuf failed");
        SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "cluster_alloc_fail", 
                         CTLFLAG_RD, &adapter->mbuf_cluster_failed,
                         "Std mbuf cluster failed");
+       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_defrag_fail", 
+                        CTLFLAG_RD, &adapter->mbuf_defrag_failed,
+                        "Defragmenting mbuf chain failed");
        SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped", 
                        CTLFLAG_RD, &adapter->dropped_pkts,
                        "Driver dropped packets");

Modified: head/sys/dev/e1000/if_lem.h
==============================================================================
--- head/sys/dev/e1000/if_lem.h Wed Jan 13 21:38:52 2016        (r293853)
+++ head/sys/dev/e1000/if_lem.h Wed Jan 13 21:47:27 2016        (r293854)
@@ -417,17 +417,17 @@ struct adapter {
 
        /* Misc stats maintained by the driver */
        unsigned long   dropped_pkts;
-       unsigned long   mbuf_alloc_failed;
+       unsigned long   link_irq;
        unsigned long   mbuf_cluster_failed;
+       unsigned long   mbuf_defrag_failed;
        unsigned long   no_tx_desc_avail1;
        unsigned long   no_tx_desc_avail2;
+       unsigned long   no_tx_dma_setup;
        unsigned long   no_tx_map_avail;
-        unsigned long  no_tx_dma_setup;
        unsigned long   watchdog_events;
-       unsigned long   rx_overruns;
        unsigned long   rx_irq;
+       unsigned long   rx_overruns;
        unsigned long   tx_irq;
-       unsigned long   link_irq;
 
        /* 82547 workaround */
        uint32_t        tx_fifo_size;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to