Module Name: src Committed By: msaitoh Date: Fri Mar 29 08:54:35 UTC 2019
Modified Files: src/sys/dev/pci: if_bnx.c if_bnxreg.h Log Message: - Use m_defrag() when bus_dmamap_load_mbuf() returned with EFBIG. - Style change to reduce diff against {Free,Open}BSD. - Make it compilable with BNX_DEBUG. - Use __nothing for null macro. To generate a diff of this commit: cvs rdiff -u -r1.73 -r1.74 src/sys/dev/pci/if_bnx.c cvs rdiff -u -r1.21 -r1.22 src/sys/dev/pci/if_bnxreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_bnx.c diff -u src/sys/dev/pci/if_bnx.c:1.73 src/sys/dev/pci/if_bnx.c:1.74 --- src/sys/dev/pci/if_bnx.c:1.73 Fri Mar 29 06:31:54 2019 +++ src/sys/dev/pci/if_bnx.c Fri Mar 29 08:54:35 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bnx.c,v 1.73 2019/03/29 06:31:54 msaitoh Exp $ */ +/* $NetBSD: if_bnx.c,v 1.74 2019/03/29 08:54:35 msaitoh Exp $ */ /* $OpenBSD: if_bnx.c,v 1.101 2013/03/28 17:21:44 brad Exp $ */ /*- @@ -35,7 +35,7 @@ #if 0 __FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $"); #endif -__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.73 2019/03/29 06:31:54 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.74 2019/03/29 08:54:35 msaitoh Exp $"); /* * The following controllers are supported by this driver: @@ -176,6 +176,7 @@ static const struct bnx_product { }, }; + /****************************************************************************/ /* Supported Flash NVRAM device data. */ /****************************************************************************/ @@ -183,6 +184,7 @@ static struct flash_spec flash_table[] = { #define BUFFERED_FLAGS (BNX_NV_BUFFERED | BNX_NV_TRANSLATE) #define NONBUFFERED_FLAGS (BNX_NV_WREN) + /* Slow EEPROM */ {0x00000000, 0x40830380, 0x009f0081, 0xa184a053, 0xaf000400, BUFFERED_FLAGS, SEEPROM_PAGE_BITS, SEEPROM_PAGE_SIZE, @@ -1231,9 +1233,8 @@ bnx_miibus_statchg(struct ifnet *ifp) if ((mii->mii_media_active & IFM_GMASK) == IFM_HDX) { DBPRINT(sc, BNX_INFO, "Setting Half-Duplex interface.\n"); val |= BNX_EMAC_MODE_HALF_DUPLEX; - } else { + } else DBPRINT(sc, BNX_INFO, "Setting Full-Duplex interface.\n"); - } REG_WR(sc, BNX_EMAC_MODE, val); @@ -2192,7 +2193,7 @@ bnx_get_media(struct bnx_softc *sc) sc->bnx_phy_flags |= BNX_PHY_CRC_FIX_FLAG; bnx_get_media_exit: - DBPRINT(sc, (BNX_INFO_LOAD), + DBPRINT(sc, (BNX_INFO_LOAD | BNX_INFO_PHY), "Using PHY address %d.\n", sc->bnx_phy_addr); } @@ -5000,7 +5001,7 @@ void bnx_mgmt_init(struct bnx_softc *sc) { struct ifnet *ifp = &sc->bnx_ec.ec_if; - u_int32_t val; + uint32_t val; /* Check if the driver is still running and bail out if it is. */ if (ifp->if_flags & IFF_RUNNING) @@ -5023,7 +5024,7 @@ bnx_mgmt_init(struct bnx_softc *sc) bnx_ifmedia_upd(ifp); bnx_mgmt_init_exit: - DBPRINT(sc, BNX_VERBOSE_RESET, "Exiting %s()\n", __FUNCTION__); + DBPRINT(sc, BNX_VERBOSE_RESET, "Exiting %s()\n", __func__); } /****************************************************************************/ @@ -5047,6 +5048,7 @@ bnx_tx_encap(struct bnx_softc *sc, struc uint32_t addr, prod_bseq; int i, error; static struct work bnx_wk; /* Dummy work. Statically allocated. */ + bool remap = true; mutex_enter(&sc->tx_pkt_mtx); pkt = TAILQ_FIRST(&sc->tx_free_pkts); @@ -5089,10 +5091,21 @@ bnx_tx_encap(struct bnx_softc *sc, struc map = pkt->pkt_dmamap; /* Map the mbuf into our DMA address space. */ +retry: error = bus_dmamap_load_mbuf(sc->bnx_dmatag, map, m, BUS_DMA_NOWAIT); - if (error != 0) { - aprint_error_dev(sc->bnx_dev, - "Error mapping mbuf into TX chain!\n"); + if (__predict_false(error)) { + if (error == EFBIG) { + if (remap == true) { + struct mbuf *newm; + + remap = false; + newm = m_defrag(m, M_NOWAIT); + if (newm != NULL) { + m = newm; + goto retry; + } + } + } sc->tx_dma_map_failures++; goto maperr; } @@ -5134,6 +5147,7 @@ bnx_tx_encap(struct bnx_softc *sc, struc txbd->tx_bd_flags |= TX_BD_FLAGS_START; prod = NEXT_TX_BD(prod); } + /* Set the END flag on the last TX buffer descriptor. */ txbd->tx_bd_flags |= TX_BD_FLAGS_END; @@ -5433,13 +5447,12 @@ bnx_intr(void *xsc) if (((status_attn_bits & ~STATUS_ATTN_BITS_LINK_STATE) != (sblk->status_attn_bits_ack & ~STATUS_ATTN_BITS_LINK_STATE))) { - DBRUN(1, sc->unexpected_attentions++); + DBRUN(sc->unexpected_attentions++); BNX_PRINTF(sc, "Fatal attention detected: 0x%08X\n", sblk->status_attn_bits); - DBRUN(BNX_FATAL, - if (bnx_debug_unexpected_attention == 0) + DBRUNIF((bnx_debug_unexpected_attention == 0), bnx_breakpoint(sc)); bnx_init(ifp); @@ -5989,7 +6002,7 @@ bnx_dump_tx_chain(struct bnx_softc *sc, "tx_bd per page = 0x%08X, usable tx_bd per page = 0x%08X\n", (uint32_t)TOTAL_TX_BD_PER_PAGE, (uint32_t)USABLE_TX_BD_PER_PAGE); - BNX_PRINTF(sc, "total tx_bd = 0x%08X\n", TOTAL_TX_BD); + BNX_PRINTF(sc, "total tx_bd = 0x%08X\n", (uint32_t)TOTAL_TX_BD); aprint_error_dev(sc->bnx_dev, "" "-----------------------------" @@ -6034,7 +6047,7 @@ bnx_dump_rx_chain(struct bnx_softc *sc, "rx_bd per page = 0x%08X, usable rx_bd per page = 0x%08X\n", (uint32_t)TOTAL_RX_BD_PER_PAGE, (uint32_t)USABLE_RX_BD_PER_PAGE); - BNX_PRINTF(sc, "total rx_bd = 0x%08X\n", TOTAL_RX_BD); + BNX_PRINTF(sc, "total rx_bd = 0x%08X\n", (uint32_t)TOTAL_RX_BD); aprint_error_dev(sc->bnx_dev, "----------------------------" Index: src/sys/dev/pci/if_bnxreg.h diff -u src/sys/dev/pci/if_bnxreg.h:1.21 src/sys/dev/pci/if_bnxreg.h:1.22 --- src/sys/dev/pci/if_bnxreg.h:1.21 Thu Mar 28 08:56:55 2019 +++ src/sys/dev/pci/if_bnxreg.h Fri Mar 29 08:54:35 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bnxreg.h,v 1.21 2019/03/28 08:56:55 msaitoh Exp $ */ +/* $NetBSD: if_bnxreg.h,v 1.22 2019/03/29 08:54:35 msaitoh Exp $ */ /* $OpenBSD: if_bnxreg.h,v 1.33 2009/09/05 16:02:28 claudio Exp $ */ /*- @@ -63,6 +63,7 @@ #define BNX_CP_INTR 0x00000008 #define BNX_CP_UNLOAD 0x00000010 #define BNX_CP_RESET 0x00000020 +#define BNX_CP_PHY 0x00000040 #define BNX_CP_ALL 0x00FFFFFF #define BNX_CP_MASK 0x00FFFFFF @@ -105,6 +106,12 @@ #define BNX_VERBOSE_RESET (BNX_CP_RESET | BNX_LEVEL_VERBOSE) #define BNX_EXCESSIVE_RESET (BNX_CP_RESET | BNX_LEVEL_EXCESSIVE) +#define BNX_WARN_PHY (BNX_CP_PHY | BNX_LEVEL_WARN) +#define BNX_INFO_PHY (BNX_CP_PHY | BNX_LEVEL_INFO) +#define BNX_VERBOSE_PHY (BNX_CP_PHY | BNX_LEVEL_VERBOSE) +#define BNX_EXTREME_PHY (BNX_CP_PHY | BNX_LEVEL_EXTREME) +#define BNX_INSANE_PHY (BNX_CP_PHY | BNX_LEVEL_INSANE) + #define BNX_FATAL (BNX_CP_ALL | BNX_LEVEL_FATAL) #define BNX_WARN (BNX_CP_ALL | BNX_LEVEL_WARN) #define BNX_INFO (BNX_CP_ALL | BNX_LEVEL_INFO) @@ -112,7 +119,8 @@ #define BNX_EXCESSIVE (BNX_CP_ALL | BNX_LEVEL_EXCESSIVE) #define BNX_CODE_PATH(cp) ((cp & BNX_CP_MASK) & bnx_debug) -#define BNX_MSG_LEVEL(lv) ((lv & BNX_LEVEL_MASK) <= (bnx_debug & BNX_LEVEL_MASK)) +#define BNX_MSG_LEVEL(lv) \ + ((lv & BNX_LEVEL_MASK) <= (bnx_debug & BNX_LEVEL_MASK)) #define BNX_LOG_MSG(m) (BNX_CODE_PATH(m) && BNX_MSG_LEVEL(m)) #ifdef BNX_DEBUG @@ -163,17 +171,17 @@ #else -#define DBPRINT(level, format, ...) -#define DBRUN(m, ...) -#define DBRUNLV(level, ...) -#define DBRUNCP(cp, ...) -#define DBRUNIF(cond, ...) -#define DB_RANDOMFALSE(defects) -#define DB_OR_RANDOMFALSE(percent) -#define DB_AND_RANDOMFALSE(percent) -#define DB_RANDOMTRUE(defects) -#define DB_OR_RANDOMTRUE(percent) -#define DB_AND_RANDOMTRUE(percent) +#define DBPRINT(level, format, ...) __nothing +#define DBRUN(m, ...) __nothing +#define DBRUNLV(level, ...) __nothing +#define DBRUNCP(cp, ...) __nothing +#define DBRUNIF(cond, ...) __nothing +#define DB_RANDOMFALSE(defects) __nothing +#define DB_OR_RANDOMFALSE(percent) __nothing +#define DB_AND_RANDOMFALSE(percent) __nothing +#define DB_RANDOMTRUE(defects) __nothing +#define DB_OR_RANDOMTRUE(percent) __nothing +#define DB_AND_RANDOMTRUE(percent) __nothing #endif /* BNX_DEBUG */