Author: stas
Date: Sun Nov 15 11:30:59 2009
New Revision: 199288
URL: http://svn.freebsd.org/changeset/base/199288

Log:
  - MFC r198320:
    Introduce new option BCE_JUMBO_HDRSPLIT that allows user to enable header
    in bce(4) instead of (ab)using ZERO_COPY_SOCKETS that was not
    into if_bce.c anyway.  It is disabled by default.

Modified:
  stable/8/sys/conf/NOTES
  stable/8/sys/conf/options
  stable/8/sys/dev/bce/if_bce.c
  stable/8/sys/dev/bce/if_bcereg.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/netinet6/   (props changed)

Modified: stable/8/sys/conf/NOTES
==============================================================================
--- stable/8/sys/conf/NOTES     Sun Nov 15 11:07:22 2009        (r199287)
+++ stable/8/sys/conf/NOTES     Sun Nov 15 11:30:59 2009        (r199288)
@@ -2023,6 +2023,12 @@ device           lmc
 # only works for Tigon II chips, and has no effect for Tigon I chips.
 options        TI_JUMBO_HDRSPLIT
 
+#
+# Use header splitting feature on bce(4) adapters.
+# This may help to reduce the amount of jumbo-sized memory buffers used.
+#
+options                BCE_JUMBO_HDRSPLIT
+
 # These two options allow manipulating the mbuf cluster size and mbuf size,
 # respectively.  Be very careful with NIC driver modules when changing
 # these from their default values, because that can potentially cause a

Modified: stable/8/sys/conf/options
==============================================================================
--- stable/8/sys/conf/options   Sun Nov 15 11:07:22 2009        (r199287)
+++ stable/8/sys/conf/options   Sun Nov 15 11:30:59 2009        (r199288)
@@ -511,6 +511,7 @@ DRM_DEBUG           opt_drm.h
 ZERO_COPY_SOCKETS      opt_zero.h
 TI_PRIVATE_JUMBOS      opt_ti.h
 TI_JUMBO_HDRSPLIT      opt_ti.h
+BCE_JUMBO_HDRSPLIT     opt_bce.h
 
 # XXX Conflict: # of devices vs network protocol (Native ATM).
 # This makes "atm.h" unusable.

Modified: stable/8/sys/dev/bce/if_bce.c
==============================================================================
--- stable/8/sys/dev/bce/if_bce.c       Sun Nov 15 11:07:22 2009        
(r199287)
+++ stable/8/sys/dev/bce/if_bce.c       Sun Nov 15 11:30:59 2009        
(r199288)
@@ -293,12 +293,12 @@ static void bce_dump_enet           (str
 static void bce_dump_mbuf                      (struct bce_softc *, struct 
mbuf *);
 static void bce_dump_tx_mbuf_chain     (struct bce_softc *, u16, int);
 static void bce_dump_rx_mbuf_chain     (struct bce_softc *, u16, int);
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 static void bce_dump_pg_mbuf_chain     (struct bce_softc *, u16, int);
 #endif
 static void bce_dump_txbd                      (struct bce_softc *, int, 
struct tx_bd *);
 static void bce_dump_rxbd                      (struct bce_softc *, int, 
struct rx_bd *);
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 static void bce_dump_pgbd                      (struct bce_softc *, int, 
struct rx_bd *);
 #endif
 static void bce_dump_l2fhdr                    (struct bce_softc *, int, 
struct l2_fhdr *);
@@ -306,7 +306,7 @@ static void bce_dump_ctx                    (struct bce_s
 static void bce_dump_ftqs                      (struct bce_softc *);
 static void bce_dump_tx_chain          (struct bce_softc *, u16, int);
 static void bce_dump_rx_chain          (struct bce_softc *, u16, int);
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 static void bce_dump_pg_chain          (struct bce_softc *, u16, int);
 #endif
 static void bce_dump_status_block      (struct bce_softc *);
@@ -393,7 +393,7 @@ static int  bce_init_rx_chain               (struct b
 static void bce_fill_rx_chain          (struct bce_softc *);
 static void bce_free_rx_chain          (struct bce_softc *);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 static int  bce_get_pg_buf                     (struct bce_softc *, struct 
mbuf *, u16 *, u16 *);
 static int  bce_init_pg_chain          (struct bce_softc *);
 static void bce_fill_pg_chain          (struct bce_softc *);
@@ -602,7 +602,7 @@ bce_print_adapter_info(struct bce_softc 
        /* Firmware version and device features. */
        printf("B/C (%s); Flags (", sc->bce_bc_ver);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        printf("SPLT ");
     i++;
 #endif
@@ -1066,7 +1066,7 @@ bce_attach(device_t dev)
         * This may change later if the MTU size is set to
         * something other than 1500.
         */
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        sc->rx_bd_mbuf_alloc_size = MHLEN;
        /* Make sure offset is 16 byte aligned for hardware. */
        sc->rx_bd_mbuf_align_pad  = roundup2((MSIZE - MHLEN), 16) -
@@ -2835,7 +2835,7 @@ bce_dma_free(struct bce_softc *sc)
        }
 
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        /* Free, unmap and destroy all page buffer descriptor chain pages. */
        for (i = 0; i < PG_PAGES; i++ ) {
                if (sc->pg_bd_chain[i] != NULL) {
@@ -2899,7 +2899,7 @@ bce_dma_free(struct bce_softc *sc)
                sc->rx_mbuf_tag = NULL;
        }
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        /* Unload and destroy the page mbuf maps. */
        for (i = 0; i < TOTAL_PG_BD; i++) {
                if (sc->pg_mbuf_map[i] != NULL) {
@@ -3345,7 +3345,7 @@ bce_dma_alloc(device_t dev)
        /*
         * Create a DMA tag for RX mbufs.
         */
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        max_size = max_seg_size = ((sc->rx_bd_mbuf_alloc_size < MCLBYTES) ?
                MCLBYTES : sc->rx_bd_mbuf_alloc_size);
 #else
@@ -3386,7 +3386,7 @@ bce_dma_alloc(device_t dev)
                }
        }
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        /*
         * Create a DMA tag for the page buffer descriptor chain,
         * allocate and clear the memory, and fetch the physical
@@ -4473,7 +4473,7 @@ bce_stop(struct bce_softc *sc)
        bce_disable_intr(sc);
 
        /* Free RX buffers. */
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        bce_free_pg_chain(sc);
 #endif
        bce_free_rx_chain(sc);
@@ -4910,7 +4910,7 @@ bce_get_rx_buf(struct bce_softc *sc, str
                        goto bce_get_rx_buf_exit);
 
                /* This is a new mbuf allocation. */
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
                MGETHDR(m_new, M_DONTWAIT, MT_DATA);
 #else
                if (sc->rx_bd_mbuf_alloc_size <= MCLBYTES)
@@ -4991,7 +4991,7 @@ bce_get_rx_buf_exit:
 }
 
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 /****************************************************************************/
 /* Encapsulate an mbuf cluster into the page chain.                        */
 /*                                                                          */
@@ -5100,7 +5100,7 @@ bce_get_pg_buf_exit:
 
        return(rc);
 }
-#endif /* ZERO_COPY_SOCKETS */
+#endif /* BCE_JUMBO_HDRSPLIT */
 
 /****************************************************************************/
 /* Initialize the TX context memory.                                        */
@@ -5456,7 +5456,7 @@ bce_free_rx_chain(struct bce_softc *sc)
 }
 
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 /****************************************************************************/
 /* Allocate memory and initialize the page data structures.                 */
 /* Assumes that bce_init_rx_chain() has not already been called.            */
@@ -5620,7 +5620,7 @@ bce_free_pg_chain(struct bce_softc *sc)
 
        DBEXIT(BCE_VERBOSE_RESET | BCE_VERBOSE_RECV | BCE_VERBOSE_UNLOAD);
 }
-#endif /* ZERO_COPY_SOCKETS */
+#endif /* BCE_JUMBO_HDRSPLIT */
 
 
 /****************************************************************************/
@@ -5793,7 +5793,7 @@ bce_rx_intr(struct bce_softc *sc)
        unsigned int pkt_len;
        u16 sw_rx_cons, sw_rx_cons_idx, hw_rx_cons;
        u32 status;
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        unsigned int rem_len;
        u16 sw_pg_cons, sw_pg_cons_idx;
 #endif
@@ -5809,7 +5809,7 @@ bce_rx_intr(struct bce_softc *sc)
                bus_dmamap_sync(sc->rx_bd_chain_tag,
                    sc->rx_bd_chain_map[i], BUS_DMASYNC_POSTREAD);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        /* Prepare the page chain pages to be accessed by the host CPU. */
        for (int i = 0; i < PG_PAGES; i++)
                bus_dmamap_sync(sc->pg_bd_chain_tag,
@@ -5821,7 +5821,7 @@ bce_rx_intr(struct bce_softc *sc)
 
        /* Get working copies of the driver's view of the consumer indices. */
        sw_rx_cons = sc->rx_cons;
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        sw_pg_cons = sc->pg_cons;
 #endif
 
@@ -5882,7 +5882,7 @@ bce_rx_intr(struct bce_softc *sc)
                 */
                m_adj(m0, sizeof(struct l2_fhdr) + ETHER_ALIGN);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
                /*
                 * Check whether the received frame fits in a single
                 * mbuf or not (i.e. packet data + FCS <=
@@ -6056,7 +6056,7 @@ bce_rx_int_next_rx:
                if (m0) {
                        /* Make sure we don't lose our place when we release 
the lock. */
                        sc->rx_cons = sw_rx_cons;
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
                        sc->pg_cons = sw_pg_cons;
 #endif
 
@@ -6066,7 +6066,7 @@ bce_rx_int_next_rx:
 
                        /* Recover our place. */
                        sw_rx_cons = sc->rx_cons;
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
                        sw_pg_cons = sc->pg_cons;
 #endif
                }
@@ -6077,7 +6077,7 @@ bce_rx_int_next_rx:
        }
 
        /* No new packets to process.  Refill the RX and page chains and exit. 
*/
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        sc->pg_cons = sw_pg_cons;
        bce_fill_pg_chain(sc);
 #endif
@@ -6090,7 +6090,7 @@ bce_rx_int_next_rx:
                bus_dmamap_sync(sc->rx_bd_chain_tag,
                    sc->rx_bd_chain_map[i], BUS_DMASYNC_PREWRITE);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        for (int i = 0; i < PG_PAGES; i++)
                bus_dmamap_sync(sc->pg_bd_chain_tag,
                    sc->pg_bd_chain_map[i], BUS_DMASYNC_PREWRITE);
@@ -6336,7 +6336,7 @@ bce_init_locked(struct bce_softc *sc)
         * Calculate and program the hardware Ethernet MTU
         * size. Be generous on the receive if we have room.
         */
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        if (ifp->if_mtu <= (sc->rx_bd_mbuf_data_len + 
sc->pg_bd_mbuf_alloc_size))
                ether_mtu = sc->rx_bd_mbuf_data_len + sc->pg_bd_mbuf_alloc_size;
 #else
@@ -6368,7 +6368,7 @@ bce_init_locked(struct bce_softc *sc)
        /* Program appropriate promiscuous/multicast filtering. */
        bce_set_rx_mode(sc);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        DBPRINT(sc, BCE_INFO_LOAD, "%s(): pg_bd_mbuf_alloc_size = %d\n",
                __FUNCTION__, sc->pg_bd_mbuf_alloc_size);
 
@@ -6881,7 +6881,7 @@ bce_ioctl(struct ifnet *ifp, u_long comm
                        BCE_LOCK(sc);
                        ifp->if_mtu = ifr->ifr_mtu;
                        ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
                        /* No buffer allocation size changes are necessary. */
 #else
                        /* Recalculate our buffer allocation sizes. */
@@ -7584,7 +7584,7 @@ bce_tick(void *xsc)
        bce_stats_update(sc);
 
        /* Top off the receive and page chains. */
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        bce_fill_pg_chain(sc);
 #endif
        bce_fill_rx_chain(sc);
@@ -7764,7 +7764,7 @@ bce_sysctl_dump_tx_chain(SYSCTL_HANDLER_
 }
 
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 /****************************************************************************/
 /* Provides a sysctl interface to allow dumping the page chain.             */
 /*                                                                          */
@@ -8392,7 +8392,7 @@ bce_add_sysctls(struct bce_softc *sc)
                (void *)sc, 0,
                bce_sysctl_dump_tx_chain, "I", "Dump tx_bd chain");
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
                "dump_pg_chain", CTLTYPE_INT | CTLFLAG_RW,
                (void *)sc, 0,
@@ -8687,7 +8687,7 @@ bce_dump_rx_mbuf_chain(struct bce_softc 
 }
 
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 /****************************************************************************/
 /* Prints out the mbufs in the mbuf page chain.                             */
 /*                                                                          */
@@ -8811,7 +8811,7 @@ bce_dump_rxbd(struct bce_softc *sc, int 
 }
 
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 /****************************************************************************/
 /* Prints out a rx_bd structure in the page chain.                          */
 /*                                                                          */
@@ -9298,7 +9298,7 @@ bce_dump_rx_chain(struct bce_softc *sc, 
 }
 
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 /****************************************************************************/
 /* Prints out the page chain.                                               */
 /*                                                                          */
@@ -9779,7 +9779,7 @@ bce_dump_driver_state(struct bce_softc *
                "0x%08X:%08X - (sc->rx_bd_chain) rx_bd chain virtual address\n",
                val_hi, val_lo);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        val_hi = BCE_ADDR_HI(sc->pg_bd_chain);
        val_lo = BCE_ADDR_LO(sc->pg_bd_chain);
        BCE_PRINTF(
@@ -9799,7 +9799,7 @@ bce_dump_driver_state(struct bce_softc *
                "0x%08X:%08X - (sc->rx_mbuf_ptr) rx mbuf chain virtual 
address\n",
                val_hi, val_lo);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        val_hi = BCE_ADDR_HI(sc->pg_mbuf_ptr);
        val_lo = BCE_ADDR_LO(sc->pg_mbuf_ptr);
        BCE_PRINTF(
@@ -9852,7 +9852,7 @@ bce_dump_driver_state(struct bce_softc *
        BCE_PRINTF("         0x%08X - (sc->free_rx_bd) free rx_bd's\n",
                sc->free_rx_bd);
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        BCE_PRINTF("     0x%04X(0x%04X) - (sc->pg_prod) page producer index\n",
                sc->pg_prod, (u16) PG_CHAIN_IDX(sc->pg_prod));
 
@@ -10358,7 +10358,7 @@ bce_breakpoint(struct bce_softc *sc)
                bce_dump_tpat_state(sc, 0);
                bce_dump_cp_state(sc, 0);
                bce_dump_com_state(sc, 0);
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
                bce_dump_pgbd(sc, 0, NULL);
                bce_dump_pg_mbuf_chain(sc, 0, USABLE_PG_BD);
                bce_dump_pg_chain(sc, 0, USABLE_PG_BD);

Modified: stable/8/sys/dev/bce/if_bcereg.h
==============================================================================
--- stable/8/sys/dev/bce/if_bcereg.h    Sun Nov 15 11:07:22 2009        
(r199287)
+++ stable/8/sys/dev/bce/if_bcereg.h    Sun Nov 15 11:30:59 2009        
(r199288)
@@ -6216,7 +6216,7 @@ struct l2_fhdr {
 #define RX_PAGE(x) (((x) & ~USABLE_RX_BD_PER_PAGE) >> (BCM_PAGE_BITS - 4))
 #define RX_IDX(x) ((x) & USABLE_RX_BD_PER_PAGE)
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
 /*
  * To accomodate jumbo frames, the page chain should
  * be 4 times larger than the receive chain.
@@ -6238,7 +6238,7 @@ struct l2_fhdr {
 #define PG_PAGE(x) (((x) & ~USABLE_PG_BD_PER_PAGE) >> (BCM_PAGE_BITS - 4))
 #define PG_IDX(x) ((x) & USABLE_PG_BD_PER_PAGE)
 
-#endif /* ZERO_COPY_SOCKETS */
+#endif /* BCE_JUMBO_HDRSPLIT */
 
 #define CTX_INIT_RETRY_COUNT        10
 
@@ -6517,7 +6517,7 @@ struct bce_softc
        u16                                     tx_cons;
        u32                                     tx_prod_bseq;   /* Counts the 
bytes used.  */
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        u16                                     pg_prod;
        u16                                     pg_cons;
 #endif
@@ -6534,7 +6534,7 @@ struct bce_softc
        int                                     rx_bd_mbuf_data_len;
        int                                     rx_bd_mbuf_align_pad;
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        int                                     pg_bd_mbuf_alloc_size;
 #endif
 
@@ -6556,7 +6556,7 @@ struct bce_softc
        struct rx_bd            *rx_bd_chain[RX_PAGES];
        bus_addr_t                      rx_bd_chain_paddr[RX_PAGES];
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        /* H/W maintained page buffer descriptor chain structure. */
        bus_dma_tag_t           pg_bd_chain_tag;
        bus_dmamap_t            pg_bd_chain_map[PG_PAGES];
@@ -6593,7 +6593,7 @@ struct bce_softc
        bus_dma_tag_t           rx_mbuf_tag;
        bus_dma_tag_t           tx_mbuf_tag;
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        bus_dma_tag_t           pg_mbuf_tag;
 #endif
 
@@ -6605,7 +6605,7 @@ struct bce_softc
        bus_dmamap_t            rx_mbuf_map[TOTAL_RX_BD];
        struct mbuf                     *rx_mbuf_ptr[TOTAL_RX_BD];
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        /* S/W maintained mbuf page chain structure. */
        bus_dmamap_t            pg_mbuf_map[TOTAL_PG_BD];
        struct mbuf                     *pg_mbuf_ptr[TOTAL_PG_BD];
@@ -6617,7 +6617,7 @@ struct bce_softc
        u16 used_tx_bd;
        u16 max_tx_bd;
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        u16 free_pg_bd;
        u16 max_pg_bd;
 #endif
@@ -6705,7 +6705,7 @@ struct bce_softc
        int     debug_tx_mbuf_alloc;
        int debug_rx_mbuf_alloc;
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        int debug_pg_mbuf_alloc;
 #endif
 
@@ -6722,7 +6722,7 @@ struct bce_softc
        u32     rx_low_watermark;                       /* Lowest number of 
rx_bd's free. */
        u32 rx_empty_count;                             /* Number of times the 
RX chain was empty. */
 
-#ifdef ZERO_COPY_SOCKETS
+#ifdef BCE_JUMBO_HDRSPLIT
        u32     pg_low_watermark;                       /* Lowest number of 
pages free. */
        u32 pg_empty_count;                     /* Number of times the page 
chain was empty. */
 #endif
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to