From owner-svn-src-all@FreeBSD.ORG Wed Mar 25 10:30:49 2015 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 71E5DD5E; Wed, 25 Mar 2015 10:30:49 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 528F6864; Wed, 25 Mar 2015 10:30:49 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t2PAUnZj086023; Wed, 25 Mar 2015 10:30:49 GMT (envelope-from arybchik@FreeBSD.org) Received: (from arybchik@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t2PAUkox084873; Wed, 25 Mar 2015 10:30:46 GMT (envelope-from arybchik@FreeBSD.org) Message-Id: <201503251030.t2PAUkox084873@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: arybchik set sender to arybchik@FreeBSD.org using -f From: Andrew Rybchenko Date: Wed, 25 Mar 2015 10:30:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r280524 - in stable/10/sys/dev/sfxge: . common X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Mar 2015 10:30:49 -0000 Author: arybchik Date: Wed Mar 25 10:30:45 2015 New Revision: 280524 URL: https://svnweb.freebsd.org/changeset/base/280524 Log: MFC: 278250 sfxge: make lock names unique Lock name should include interface name. Tx queue and event queue lock name should include queue number. Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor) Modified: stable/10/sys/dev/sfxge/common/efsys.h stable/10/sys/dev/sfxge/sfxge.c stable/10/sys/dev/sfxge/sfxge.h stable/10/sys/dev/sfxge/sfxge_ev.c stable/10/sys/dev/sfxge/sfxge_mcdi.c stable/10/sys/dev/sfxge/sfxge_port.c stable/10/sys/dev/sfxge/sfxge_tx.c stable/10/sys/dev/sfxge/sfxge_tx.h Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sfxge/common/efsys.h ============================================================================== --- stable/10/sys/dev/sfxge/common/efsys.h Wed Mar 25 10:29:08 2015 (r280523) +++ stable/10/sys/dev/sfxge/common/efsys.h Wed Mar 25 10:30:45 2015 (r280524) @@ -509,16 +509,26 @@ typedef struct efsys_mem_s { /* BAR */ +#define SFXGE_LOCK_NAME_MAX 16 + typedef struct efsys_bar_s { struct mtx esb_lock; + char esb_lock_name[SFXGE_LOCK_NAME_MAX]; bus_space_tag_t esb_tag; bus_space_handle_t esb_handle; int esb_rid; struct resource *esb_res; } efsys_bar_t; -#define SFXGE_BAR_LOCK_INIT(_esbp, _name) \ - mtx_init(&(_esbp)->esb_lock, (_name), NULL, MTX_DEF) +#define SFXGE_BAR_LOCK_INIT(_esbp, _ifname) \ + do { \ + snprintf((_esbp)->esb_lock_name, \ + sizeof((_esbp)->esb_lock_name), \ + "%s:bar", (_ifname)); \ + mtx_init(&(_esbp)->esb_lock, (_esbp)->esb_lock_name, \ + NULL, MTX_DEF); \ + _NOTE(CONSTANTCONDITION) \ + } while (B_FALSE) #define SFXGE_BAR_LOCK_DESTROY(_esbp) \ mtx_destroy(&(_esbp)->esb_lock) #define SFXGE_BAR_LOCK(_esbp) \ @@ -721,13 +731,35 @@ typedef clock_t efsys_timestamp_t; /* LOCK */ -typedef struct mtx efsys_lock_t; +typedef struct efsys_lock_s { + struct mtx lock; + char lock_name[SFXGE_LOCK_NAME_MAX]; +} efsys_lock_t; + +#define SFXGE_EFSYS_LOCK_INIT(_eslp, _ifname, _label) \ + do { \ + efsys_lock_t *__eslp = (_eslp); \ + \ + snprintf((__eslp)->lock_name, \ + sizeof((__eslp)->lock_name), \ + "%s:%s", (_ifname), (_label)); \ + mtx_init(&(__eslp)->lock, (__eslp)->lock_name, \ + NULL, MTX_DEF); \ + } while (B_FALSE) +#define SFXGE_EFSYS_LOCK_DESTROY(_eslp) \ + mtx_destroy(&(_eslp)->lock) +#define SFXGE_EFSYS_LOCK(_eslp) \ + mtx_lock(&(_eslp)->lock) +#define SFXGE_EFSYS_UNLOCK(_eslp) \ + mtx_unlock(&(_eslp)->lock) +#define SFXGE_EFSYS_LOCK_ASSERT_OWNED(_eslp) \ + mtx_assert(&(_eslp)->lock, MA_OWNED) #define EFSYS_LOCK_MAGIC 0x000010c4 #define EFSYS_LOCK(_lockp, _state) \ do { \ - mtx_lock(_lockp); \ + SFXGE_EFSYS_LOCK(_lockp); \ (_state) = EFSYS_LOCK_MAGIC; \ _NOTE(CONSTANTCONDITION) \ } while (B_FALSE) @@ -736,7 +768,7 @@ typedef struct mtx efsys_lock_t; do { \ if ((_state) != EFSYS_LOCK_MAGIC) \ KASSERT(B_FALSE, ("not locked")); \ - mtx_unlock(_lockp); \ + SFXGE_EFSYS_UNLOCK(_lockp); \ _NOTE(CONSTANTCONDITION) \ } while (B_FALSE) Modified: stable/10/sys/dev/sfxge/sfxge.c ============================================================================== --- stable/10/sys/dev/sfxge/sfxge.c Wed Mar 25 10:29:08 2015 (r280523) +++ stable/10/sys/dev/sfxge/sfxge.c Wed Mar 25 10:30:45 2015 (r280524) @@ -337,7 +337,9 @@ sfxge_ifnet_init(struct ifnet *ifp, stru ifp->if_snd.ifq_drv_maxlen = sc->txq_entries - 1; IFQ_SET_READY(&ifp->if_snd); - mtx_init(&sc->tx_lock, "txq", NULL, MTX_DEF); + snprintf(sc->tx_lock_name, sizeof(sc->tx_lock_name), + "%s:tx", device_get_nameunit(sc->dev)); + mtx_init(&sc->tx_lock, sc->tx_lock_name, NULL, MTX_DEF); #endif if ((rc = sfxge_port_ifmedia_init(sc)) != 0) @@ -375,7 +377,8 @@ sfxge_bar_init(struct sfxge_softc *sc) } esbp->esb_tag = rman_get_bustag(esbp->esb_res); esbp->esb_handle = rman_get_bushandle(esbp->esb_res); - SFXGE_BAR_LOCK_INIT(esbp, "sfxge_efsys_bar"); + + SFXGE_BAR_LOCK_INIT(esbp, device_get_nameunit(sc->dev)); return (0); } @@ -400,7 +403,7 @@ sfxge_create(struct sfxge_softc *sc) dev = sc->dev; - SFXGE_ADAPTER_LOCK_INIT(sc, "sfxge_softc"); + SFXGE_ADAPTER_LOCK_INIT(sc, device_get_nameunit(sc->dev)); sc->max_rss_channels = 0; snprintf(rss_param_name, sizeof(rss_param_name), @@ -434,7 +437,8 @@ sfxge_create(struct sfxge_softc *sc) KASSERT(error == 0, ("Family should be filtered by sfxge_probe()")); /* Create the common code nic object. */ - mtx_init(&sc->enp_lock, "sfxge_nic", NULL, MTX_DEF); + SFXGE_EFSYS_LOCK_INIT(&sc->enp_lock, + device_get_nameunit(sc->dev), "nic"); if ((error = efx_nic_create(sc->family, (efsys_identifier_t *)sc, &sc->bar, &sc->enp_lock, &enp)) != 0) goto fail3; @@ -536,7 +540,7 @@ fail_tx_ring_entries: fail_rx_ring_entries: sc->enp = NULL; efx_nic_destroy(enp); - mtx_destroy(&sc->enp_lock); + SFXGE_EFSYS_LOCK_DESTROY(&sc->enp_lock); fail3: sfxge_bar_fini(sc); Modified: stable/10/sys/dev/sfxge/sfxge.h ============================================================================== --- stable/10/sys/dev/sfxge/sfxge.h Wed Mar 25 10:29:08 2015 (r280523) +++ stable/10/sys/dev/sfxge/sfxge.h Wed Mar 25 10:30:45 2015 (r280524) @@ -121,6 +121,7 @@ struct sfxge_evq { /* Structure members not used on event processing path */ unsigned int buf_base_id; unsigned int entries; + char lock_name[SFXGE_LOCK_NAME_MAX]; } __aligned(CACHE_LINE_SIZE); #define SFXGE_NDESCS 1024 @@ -161,6 +162,9 @@ struct sfxge_mcdi { struct cv cv; enum sfxge_mcdi_state state; efx_mcdi_transport_t transport; + + /* Only used in debugging output */ + char lock_name[SFXGE_LOCK_NAME_MAX]; }; struct sfxge_hw_stats { @@ -185,6 +189,9 @@ struct sfxge_port { struct sfxge_hw_stats phy_stats; struct sfxge_hw_stats mac_stats; efx_link_mode_t link_mode; + + /* Only used in debugging output */ + char lock_name[SFXGE_LOCK_NAME_MAX]; }; enum sfxge_softc_state { @@ -197,6 +204,7 @@ enum sfxge_softc_state { struct sfxge_softc { device_t dev; struct sx softc_lock; + char softc_lock_name[SFXGE_LOCK_NAME_MAX]; enum sfxge_softc_state init_state; struct ifnet *ifnet; unsigned int if_flags; @@ -209,7 +217,7 @@ struct sfxge_softc { caddr_t vpd_data; size_t vpd_size; efx_nic_t *enp; - struct mtx enp_lock; + efsys_lock_t enp_lock; unsigned int rxq_entries; unsigned int txq_entries; @@ -248,6 +256,7 @@ struct sfxge_softc { #ifndef SFXGE_HAVE_MQ struct mtx tx_lock __aligned(CACHE_LINE_SIZE); + char tx_lock_name[SFXGE_LOCK_NAME_MAX]; #endif }; @@ -313,8 +322,15 @@ extern int sfxge_port_ifmedia_init(struc #define SFXGE_MAX_MTU (9 * 1024) -#define SFXGE_ADAPTER_LOCK_INIT(_sc, _name) \ - sx_init(&(_sc)->softc_lock, (_name)) +#define SFXGE_ADAPTER_LOCK_INIT(_sc, _ifname) \ + do { \ + struct sfxge_softc *__sc = (_sc); \ + \ + snprintf((__sc)->softc_lock_name, \ + sizeof((__sc)->softc_lock_name), \ + "%s:softc", (_ifname)); \ + sx_init(&(__sc)->softc_lock, (__sc)->softc_lock_name); \ + } while (B_FALSE) #define SFXGE_ADAPTER_LOCK_DESTROY(_sc) \ sx_destroy(&(_sc)->softc_lock) #define SFXGE_ADAPTER_LOCK(_sc) \ @@ -324,8 +340,16 @@ extern int sfxge_port_ifmedia_init(struc #define SFXGE_ADAPTER_LOCK_ASSERT_OWNED(_sc) \ sx_assert(&(_sc)->softc_lock, LA_XLOCKED) -#define SFXGE_PORT_LOCK_INIT(_port, _name) \ - mtx_init(&(_port)->lock, (_name), NULL, MTX_DEF) +#define SFXGE_PORT_LOCK_INIT(_port, _ifname) \ + do { \ + struct sfxge_port *__port = (_port); \ + \ + snprintf((__port)->lock_name, \ + sizeof((__port)->lock_name), \ + "%s:port", (_ifname)); \ + mtx_init(&(__port)->lock, (__port)->lock_name, \ + NULL, MTX_DEF); \ + } while (B_FALSE) #define SFXGE_PORT_LOCK_DESTROY(_port) \ mtx_destroy(&(_port)->lock) #define SFXGE_PORT_LOCK(_port) \ @@ -335,8 +359,16 @@ extern int sfxge_port_ifmedia_init(struc #define SFXGE_PORT_LOCK_ASSERT_OWNED(_port) \ mtx_assert(&(_port)->lock, MA_OWNED) -#define SFXGE_MCDI_LOCK_INIT(_mcdi, _name) \ - mtx_init(&(_mcdi)->lock, (_name), NULL, MTX_DEF) +#define SFXGE_MCDI_LOCK_INIT(_mcdi, _ifname) \ + do { \ + struct sfxge_mcdi *__mcdi = (_mcdi); \ + \ + snprintf((__mcdi)->lock_name, \ + sizeof((__mcdi)->lock_name), \ + "%s:mcdi", (_ifname)); \ + mtx_init(&(__mcdi)->lock, (__mcdi)->lock_name, \ + NULL, MTX_DEF); \ + } while (B_FALSE) #define SFXGE_MCDI_LOCK_DESTROY(_mcdi) \ mtx_destroy(&(_mcdi)->lock) #define SFXGE_MCDI_LOCK(_mcdi) \ @@ -346,8 +378,16 @@ extern int sfxge_port_ifmedia_init(struc #define SFXGE_MCDI_LOCK_ASSERT_OWNED(_mcdi) \ mtx_assert(&(_mcdi)->lock, MA_OWNED) -#define SFXGE_EVQ_LOCK_INIT(_evq, _name) \ - mtx_init(&(_evq)->lock, (_name), NULL, MTX_DEF) +#define SFXGE_EVQ_LOCK_INIT(_evq, _ifname, _evq_index) \ + do { \ + struct sfxge_evq *__evq = (_evq); \ + \ + snprintf((__evq)->lock_name, \ + sizeof((__evq)->lock_name), \ + "%s:evq%u", (_ifname), (_evq_index)); \ + mtx_init(&(__evq)->lock, (__evq)->lock_name, \ + NULL, MTX_DEF); \ + } while (B_FALSE) #define SFXGE_EVQ_LOCK_DESTROY(_evq) \ mtx_destroy(&(_evq)->lock) #define SFXGE_EVQ_LOCK(_evq) \ Modified: stable/10/sys/dev/sfxge/sfxge_ev.c ============================================================================== --- stable/10/sys/dev/sfxge/sfxge_ev.c Wed Mar 25 10:29:08 2015 (r280523) +++ stable/10/sys/dev/sfxge/sfxge_ev.c Wed Mar 25 10:30:45 2015 (r280524) @@ -827,7 +827,7 @@ sfxge_ev_qinit(struct sfxge_softc *sc, u sfxge_sram_buf_tbl_alloc(sc, EFX_EVQ_NBUFS(evq->entries), &evq->buf_base_id); - SFXGE_EVQ_LOCK_INIT(evq, "evq"); + SFXGE_EVQ_LOCK_INIT(evq, device_get_nameunit(sc->dev), index); evq->init_state = SFXGE_EVQ_INITIALIZED; Modified: stable/10/sys/dev/sfxge/sfxge_mcdi.c ============================================================================== --- stable/10/sys/dev/sfxge/sfxge_mcdi.c Wed Mar 25 10:29:08 2015 (r280523) +++ stable/10/sys/dev/sfxge/sfxge_mcdi.c Wed Mar 25 10:30:45 2015 (r280524) @@ -201,7 +201,7 @@ sfxge_mcdi_init(struct sfxge_softc *sc) KASSERT(mcdi->state == SFXGE_MCDI_UNINITIALIZED, ("MCDI already initialized")); - SFXGE_MCDI_LOCK_INIT(mcdi, "sfxge_mcdi"); + SFXGE_MCDI_LOCK_INIT(mcdi, device_get_nameunit(sc->dev)); mcdi->state = SFXGE_MCDI_INITIALIZED; Modified: stable/10/sys/dev/sfxge/sfxge_port.c ============================================================================== --- stable/10/sys/dev/sfxge/sfxge_port.c Wed Mar 25 10:29:08 2015 (r280523) +++ stable/10/sys/dev/sfxge/sfxge_port.c Wed Mar 25 10:30:45 2015 (r280524) @@ -583,7 +583,7 @@ sfxge_port_init(struct sfxge_softc *sc) port->sc = sc; - SFXGE_PORT_LOCK_INIT(port, "sfxge_port"); + SFXGE_PORT_LOCK_INIT(port, device_get_nameunit(sc->dev)); port->phy_stats.decode_buf = malloc(EFX_PHY_NSTATS * sizeof(uint32_t), M_SFXGE, M_WAITOK | M_ZERO); Modified: stable/10/sys/dev/sfxge/sfxge_tx.c ============================================================================== --- stable/10/sys/dev/sfxge/sfxge_tx.c Wed Mar 25 10:29:08 2015 (r280523) +++ stable/10/sys/dev/sfxge/sfxge_tx.c Wed Mar 25 10:30:45 2015 (r280524) @@ -1466,7 +1466,7 @@ sfxge_tx_qinit(struct sfxge_softc *sc, u stdp->std_get_non_tcp_max = sfxge_tx_dpl_get_non_tcp_max; stdp->std_getp = &stdp->std_get; - SFXGE_TXQ_LOCK_INIT(txq, "txq"); + SFXGE_TXQ_LOCK_INIT(txq, device_get_nameunit(sc->dev), txq_index); SYSCTL_ADD_UINT(device_get_sysctl_ctx(sc->dev), SYSCTL_CHILDREN(txq_node), OID_AUTO, Modified: stable/10/sys/dev/sfxge/sfxge_tx.h ============================================================================== --- stable/10/sys/dev/sfxge/sfxge_tx.h Wed Mar 25 10:29:08 2015 (r280523) +++ stable/10/sys/dev/sfxge/sfxge_tx.h Wed Mar 25 10:30:45 2015 (r280524) @@ -130,8 +130,16 @@ enum sfxge_txq_type { #define SFXGE_TX_SCALE(sc) 1 #endif -#define SFXGE_TXQ_LOCK_INIT(_txq, _name) \ - mtx_init(&(_txq)->lock, (_name), NULL, MTX_DEF) +#define SFXGE_TXQ_LOCK_INIT(_txq, _ifname, _txq_index) \ + do { \ + struct sfxge_txq *__txq = (_txq); \ + \ + snprintf((__txq)->lock_name, \ + sizeof((__txq)->lock_name), \ + "%s:txq%u", (_ifname), (_txq_index)); \ + mtx_init(&(__txq)->lock, (__txq)->lock_name, \ + NULL, MTX_DEF); \ + } while (B_FALSE) #define SFXGE_TXQ_LOCK_DESTROY(_txq) \ mtx_destroy(&(_txq)->lock) #define SFXGE_TXQ_LOCK(_txq) \ @@ -164,6 +172,8 @@ struct sfxge_txq { efsys_mem_t *tsoh_buffer; + char lock_name[SFXGE_LOCK_NAME_MAX]; + /* This field changes more often and is read regularly on both * the initiation and completion paths */