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
         */
_______________________________________________
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