Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Feb 2015 11:39:15 +0000 (UTC)
From:      Andrew Rybchenko <arybchik@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r278250 - in head/sys/dev/sfxge: . common
Message-ID:  <201502051139.t15BdFUS070793@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: arybchik
Date: Thu Feb  5 11:39:15 2015
New Revision: 278250
URL: https://svnweb.freebsd.org/changeset/base/278250

Log:
  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:
  head/sys/dev/sfxge/common/efsys.h
  head/sys/dev/sfxge/sfxge.c
  head/sys/dev/sfxge/sfxge.h
  head/sys/dev/sfxge/sfxge_ev.c
  head/sys/dev/sfxge/sfxge_mcdi.c
  head/sys/dev/sfxge/sfxge_port.c
  head/sys/dev/sfxge/sfxge_tx.c
  head/sys/dev/sfxge/sfxge_tx.h

Modified: head/sys/dev/sfxge/common/efsys.h
==============================================================================
--- head/sys/dev/sfxge/common/efsys.h	Thu Feb  5 11:38:29 2015	(r278249)
+++ head/sys/dev/sfxge/common/efsys.h	Thu Feb  5 11:39:15 2015	(r278250)
@@ -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: head/sys/dev/sfxge/sfxge.c
==============================================================================
--- head/sys/dev/sfxge/sfxge.c	Thu Feb  5 11:38:29 2015	(r278249)
+++ head/sys/dev/sfxge/sfxge.c	Thu Feb  5 11:39:15 2015	(r278250)
@@ -338,7 +338,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)
@@ -376,7 +378,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);
 }
@@ -401,7 +404,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),
@@ -435,7 +438,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;
@@ -537,7 +541,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: head/sys/dev/sfxge/sfxge.h
==============================================================================
--- head/sys/dev/sfxge/sfxge.h	Thu Feb  5 11:38:29 2015	(r278249)
+++ head/sys/dev/sfxge/sfxge.h	Thu Feb  5 11:39:15 2015	(r278250)
@@ -122,6 +122,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
@@ -162,6 +163,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 {
@@ -186,6 +190,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 {
@@ -198,6 +205,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;
@@ -210,7 +218,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;
@@ -249,6 +257,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
 };
 
@@ -314,8 +323,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)						\
@@ -325,8 +341,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)						\
@@ -336,8 +360,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)						\
@@ -347,8 +379,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: head/sys/dev/sfxge/sfxge_ev.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_ev.c	Thu Feb  5 11:38:29 2015	(r278249)
+++ head/sys/dev/sfxge/sfxge_ev.c	Thu Feb  5 11:39:15 2015	(r278250)
@@ -832,7 +832,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: head/sys/dev/sfxge/sfxge_mcdi.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_mcdi.c	Thu Feb  5 11:38:29 2015	(r278249)
+++ head/sys/dev/sfxge/sfxge_mcdi.c	Thu Feb  5 11:39:15 2015	(r278250)
@@ -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: head/sys/dev/sfxge/sfxge_port.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_port.c	Thu Feb  5 11:38:29 2015	(r278249)
+++ head/sys/dev/sfxge/sfxge_port.c	Thu Feb  5 11:39:15 2015	(r278250)
@@ -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: head/sys/dev/sfxge/sfxge_tx.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_tx.c	Thu Feb  5 11:38:29 2015	(r278249)
+++ head/sys/dev/sfxge/sfxge_tx.c	Thu Feb  5 11:39:15 2015	(r278250)
@@ -1467,7 +1467,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: head/sys/dev/sfxge/sfxge_tx.h
==============================================================================
--- head/sys/dev/sfxge/sfxge_tx.h	Thu Feb  5 11:38:29 2015	(r278249)
+++ head/sys/dev/sfxge/sfxge_tx.h	Thu Feb  5 11:39:15 2015	(r278250)
@@ -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
 	 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502051139.t15BdFUS070793>