svn commit: r280524 - in stable/10/sys/dev/sfxge: . common
Andrew Rybchenko
arybchik at FreeBSD.org
Wed Mar 25 10:30:49 UTC 2015
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
*/
More information about the svn-src-stable-10
mailing list