BXE: locking and mutexes
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 14 Jan 2015 22:33:49 +0000 (14:33 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:27 +0000 (10:12 -0500)
kern/drivers/net/bxe/bxe.c
kern/drivers/net/bxe/bxe.h
kern/drivers/net/bxe/bxe_debug.c
kern/drivers/net/bxe/bxe_dev.c
kern/drivers/net/bxe/ecore_sp.h
scripts/spatch/bsd/locks.cocci [new file with mode: 0644]

index 5a2b33d..d6aebe7 100644 (file)
@@ -249,7 +249,8 @@ static device_method_t bxe_methods[] = {
 };
 
 #endif
-//MTX_SYSINIT(bxe_prev_mtx, &bxe_prev_mtx, "bxe_prev_lock", MTX_DEF);
+qlock_t bxe_prev_mtx;
+
 struct bxe_prev_list_node {
     LIST_ENTRY(bxe_prev_list_node) node;
     uint8_t bus;
@@ -15675,8 +15676,7 @@ bxe_prev_is_path_marked(struct bxe_adapter *sc)
 {
     struct bxe_prev_list_node *tmp;
     int rc = FALSE;
-#warning "TODO: figure out bxe_prev_mtx"
-    //    mtx_lock(&bxe_prev_mtx);
+    qlock(&bxe_prev_mtx);
 
     tmp = bxe_prev_path_get_entry(sc);
     if (tmp) {
@@ -15692,7 +15692,7 @@ bxe_prev_is_path_marked(struct bxe_adapter *sc)
         }
     }
 
-    //    mtx_unlock(&bxe_prev_mtx);
+    qunlock(&bxe_prev_mtx);
 
     return (rc);
 }
@@ -15703,7 +15703,7 @@ bxe_prev_mark_path(struct bxe_adapter *sc,
 {
     struct bxe_prev_list_node *tmp;
 
-    //    mtx_lock(&bxe_prev_mtx);
+    qlock(&bxe_prev_mtx);
 
     /* Check whether the entry for this path already exists */
     tmp = bxe_prev_path_get_entry(sc);
@@ -15719,11 +15719,11 @@ bxe_prev_mark_path(struct bxe_adapter *sc,
             tmp->aer = 0;
         }
 
-       //        mtx_unlock(&bxe_prev_mtx);
+               qunlock(&bxe_prev_mtx);
         return (0);
     }
 
-    //    mtx_unlock(&bxe_prev_mtx);
+    qunlock(&bxe_prev_mtx);
 
     /* Create an entry for this path and add it */
     tmp = kmalloc(sizeof(struct bxe_prev_list_node), 0); //M_DEVBUF,
@@ -15739,14 +15739,14 @@ bxe_prev_mark_path(struct bxe_adapter *sc,
     tmp->aer  = 0;
     tmp->undi = after_undi ? (1 << SC_PORT(sc)) : 0;
 
-    //    mtx_lock(&bxe_prev_mtx);
+    qlock(&bxe_prev_mtx);
 
     BLOGD(sc, DBG_LOAD,
           "Marked path %d/%d/%d - finished previous unload\n",
           sc->pcie_bus, sc->pcie_device, SC_PATH(sc));
     //    LIST_INSERT_HEAD(&bxe_prev_list, tmp, node);
 
-    //    mtx_unlock(&bxe_prev_mtx);
+    qunlock(&bxe_prev_mtx);
 
     return (0);
 }
index 5e9131b..afcfd7d 100644 (file)
@@ -58,16 +58,11 @@ typedef uintptr_t bus_dmamap_t;
 typedef uintptr_t bus_dma_segment_t;
 typedef uintptr_t bus_space_tag_t;
 typedef uintptr_t vm_offset_t;
-typedef qlock_t ECORE_MUTEX_SPIN;
-typedef qlock_t ECORE_MUTEX;
-typedef qlock_t mtx;
 typedef int device_t;
 // WTF ...
 typedef uint64_t uintmax_t;
-#define mtx_lock(x) qlock(x)
-#define mtx_unlock(x) qunlock(x)
 #define MA_OWNED 0
-#define MTX_ASSERT(lock, thing) assert(0)
+#define mtx_assert(lock, thing) assert(1)
 #define device_printf(ignore, format, args...) printk(format, args)
 
 
@@ -523,18 +518,17 @@ struct bxe_sw_tpa_info {
 struct bxe_fastpath {
     /* pointer back to parent structure */
     struct bxe_adapter *sc;
-#warning "need to fix up the mtx"
     qlock_t tx_mtx;
     char       tx_mtx_name[32];
     qlock_t rx_mtx;
     char       rx_mtx_name[32];
-#define BXE_FP_TX_LOCK(fp)        mtx_lock(&fp->tx_mtx)
-#define BXE_FP_TX_UNLOCK(fp)      mtx_unlock(&fp->tx_mtx)
-#define BXE_FP_TX_LOCK_ASSERT(fp) assert(0) /*mtx_assert(&fp->tx_mtx, MA_OWNED)*/
+#define BXE_FP_TX_LOCK(fp)        qlock(&fp->tx_mtx)
+#define BXE_FP_TX_UNLOCK(fp)      qunlock(&fp->tx_mtx)
+#define BXE_FP_TX_LOCK_ASSERT(fp) mtx_assert(&fp->tx_mtx, MA_OWNED)
 
-#define BXE_FP_RX_LOCK(fp)        mtx_lock(&fp->rx_mtx)
-#define BXE_FP_RX_UNLOCK(fp)      mtx_unlock(&fp->rx_mtx)
-#define BXE_FP_RX_LOCK_ASSERT(fp) assert(0) /*mtx_assert(&fp->rx_mtx, MA_OWNED)*/
+#define BXE_FP_RX_LOCK(fp)        qlock(&fp->rx_mtx)
+#define BXE_FP_RX_UNLOCK(fp)      qunlock(&fp->rx_mtx)
+#define BXE_FP_RX_LOCK_ASSERT(fp) mtx_assert(&fp->rx_mtx, MA_OWNED)
 
     /* status block */
     struct bxe_dma                 sb_dma;
@@ -1029,8 +1023,8 @@ struct bxe_port {
        qlock_t phy_mtx;
        char        phy_mtx_name[32];
 
-#define BXE_PHY_LOCK(sc)          mtx_lock(&sc->port.phy_mtx)
-#define BXE_PHY_UNLOCK(sc)        mtx_unlock(&sc->port.phy_mtx)
+#define BXE_PHY_LOCK(sc)          qlock(&sc->port.phy_mtx)
+#define BXE_PHY_UNLOCK(sc)        qunlock(&sc->port.phy_mtx)
 #define BXE_PHY_LOCK_ASSERT(sc)   mtx_assert(&sc->port.phy_mtx, MA_OWNED)
 
     /*
@@ -1472,30 +1466,30 @@ struct bxe_adapter {
 #define BXE_CORE_UNLOCK(sc)       sx_xunlock(&sc->core_sx)
 #define BXE_CORE_LOCK_ASSERT(sc)  sx_assert(&sc->core_sx, SA_XLOCKED)
 #else
-#define BXE_CORE_TRYLOCK(sc)      mtx_trylock(&sc->core_mtx)
-#define BXE_CORE_LOCK(sc)         mtx_lock(&sc->core_mtx)
-#define BXE_CORE_UNLOCK(sc)       mtx_unlock(&sc->core_mtx)
+#define BXE_CORE_TRYLOCK(sc)      canqlock(&sc->core_mtx)
+#define BXE_CORE_LOCK(sc)         qlock(&sc->core_mtx)
+#define BXE_CORE_UNLOCK(sc)       qunlock(&sc->core_mtx)
 #define BXE_CORE_LOCK_ASSERT(sc)  mtx_assert(&sc->core_mtx, MA_OWNED)
 #endif
 
-#define BXE_SP_LOCK(sc)           mtx_lock(&sc->sp_mtx)
-#define BXE_SP_UNLOCK(sc)         mtx_unlock(&sc->sp_mtx)
+#define BXE_SP_LOCK(sc)           qlock(&sc->sp_mtx)
+#define BXE_SP_UNLOCK(sc)         qunlock(&sc->sp_mtx)
 #define BXE_SP_LOCK_ASSERT(sc)    mtx_assert(&sc->sp_mtx, MA_OWNED)
 
-#define BXE_DMAE_LOCK(sc)         mtx_lock(&sc->dmae_mtx)
-#define BXE_DMAE_UNLOCK(sc)       mtx_unlock(&sc->dmae_mtx)
+#define BXE_DMAE_LOCK(sc)         qlock(&sc->dmae_mtx)
+#define BXE_DMAE_UNLOCK(sc)       qunlock(&sc->dmae_mtx)
 #define BXE_DMAE_LOCK_ASSERT(sc)  mtx_assert(&sc->dmae_mtx, MA_OWNED)
 
-#define BXE_FWMB_LOCK(sc)         mtx_lock(&sc->fwmb_mtx)
-#define BXE_FWMB_UNLOCK(sc)       mtx_unlock(&sc->fwmb_mtx)
+#define BXE_FWMB_LOCK(sc)         qlock(&sc->fwmb_mtx)
+#define BXE_FWMB_UNLOCK(sc)       qunlock(&sc->fwmb_mtx)
 #define BXE_FWMB_LOCK_ASSERT(sc)  mtx_assert(&sc->fwmb_mtx, MA_OWNED)
 
-#define BXE_PRINT_LOCK(sc)        mtx_lock(&sc->print_mtx)
-#define BXE_PRINT_UNLOCK(sc)      mtx_unlock(&sc->print_mtx)
+#define BXE_PRINT_LOCK(sc)        qlock(&sc->print_mtx)
+#define BXE_PRINT_UNLOCK(sc)      qunlock(&sc->print_mtx)
 #define BXE_PRINT_LOCK_ASSERT(sc) mtx_assert(&sc->print_mtx, MA_OWNED)
 
-#define BXE_STATS_LOCK(sc)        mtx_lock(&sc->stats_mtx)
-#define BXE_STATS_UNLOCK(sc)      mtx_unlock(&sc->stats_mtx)
+#define BXE_STATS_LOCK(sc)        qlock(&sc->stats_mtx)
+#define BXE_STATS_UNLOCK(sc)      qunlock(&sc->stats_mtx)
 #define BXE_STATS_LOCK_ASSERT(sc) mtx_assert(&sc->stats_mtx, MA_OWNED)
 
 #warning "find outwhat IF_ADDR_LOCK is"
@@ -2278,6 +2272,9 @@ void bxe_dump_mem(struct bxe_adapter *sc, char *tag,
 void bxe_dump_mbuf_data(struct bxe_adapter *sc, char *pTag,
                         struct mbuf *m, uint8_t contents);
 
+/* Defined in bxe.c, init'd in bxereset or something in bxe_dev.c */
+extern qlock_t bxe_prev_mtx;
+
 /***********/
 /* INLINES */
 /***********/
index 80d6106..cd368a2 100644 (file)
@@ -179,7 +179,7 @@ bxe_dump_mem(struct bxe_adapter *sc,
     char c[32];
     int  xx;
 
-    mtx_lock(&bxe_prev_mtx);
+    qlock(&bxe_prev_mtx);
 
     BLOGI(sc, "++++++++++++ %s\n", tag);
     strcpy(buf, "** 000: ");
@@ -204,7 +204,7 @@ bxe_dump_mem(struct bxe_adapter *sc,
     BLOGI(sc, "%s\n", buf);
     BLOGI(sc, "------------ %s\n", tag);
 
-    mtx_unlock(&bxe_prev_mtx);
+    qunlock(&bxe_prev_mtx);
 }
 #endif
 #if 0
@@ -219,7 +219,7 @@ bxe_dump_mbuf_data(struct bxe_adapter *sc,
     uint8_t *memp;
     int i, xx = 0;
 
-    mtx_lock(&bxe_prev_mtx);
+    qlock(&bxe_prev_mtx);
 
     BLOGI(sc, "++++++++++++ %s\n", tag);
 
@@ -264,7 +264,7 @@ bxe_dump_mbuf_data(struct bxe_adapter *sc,
 
     BLOGI(sc, "------------ %s\n", tag);
 
-    mtx_unlock(&bxe_prev_mtx);
+    qunlock(&bxe_prev_mtx);
 }
 #endif
 
index 362d869..8b6efef 100644 (file)
@@ -308,6 +308,7 @@ static int bxereset(struct bxe_adapter *ctlr)
 {
        int ctrl, i, pause, r, swdpio, txcw;
 
+       run_once(qlock_init(&bxe_prev_mtx));
 //     if (igbedetach(ctlr))
 //             return -1;
 
index 8d2448f..59db924 100644 (file)
@@ -84,15 +84,13 @@ typedef _Bool bool;
 
 #define IRO sc->iro_array
 
-//typedef struct mtx ECORE_MUTEX;
-#define ECORE_MUTEX_INIT(_mutex) /*    mtx_init(_mutex, "ecore_lock", "ECORE Lock", MTX_DEF)*/
-#define ECORE_MUTEX_LOCK(_mutex)   mtx_lock(_mutex)
-#define ECORE_MUTEX_UNLOCK(_mutex) mtx_unlock(_mutex)
+#define ECORE_MUTEX_INIT(_mutex)   qlock_init(_mutex)
+#define ECORE_MUTEX_LOCK(_mutex)   qlock(_mutex)
+#define ECORE_MUTEX_UNLOCK(_mutex) qunlock(_mutex)
 
-//typedef struct mtx ECORE_MUTEX_SPIN;
-#define ECORE_SPIN_LOCK_INIT(_spin, _sc) /*    mtx_init(_spin, "ecore_lock", "ECORE Lock", MTX_DEF)*/
-#define ECORE_SPIN_LOCK_BH(_spin)   mtx_lock(_spin) /* bh = bottom-half */
-#define ECORE_SPIN_UNLOCK_BH(_spin) mtx_unlock(_spin) /* bh = bottom-half */
+#define ECORE_SPIN_LOCK_INIT(_spin, _sc) spinlock_init_irqsave(_spin)
+#define ECORE_SPIN_LOCK_BH(_spin)   spin_lock_irqsave(_spin) /* bh = bottom-half */
+#define ECORE_SPIN_UNLOCK_BH(_spin) spin_unlock_irqsave(_spin) /* bh = bottom-half */
 
 #define ECORE_SMP_MB_AFTER_CLEAR_BIT()  mb()
 #define ECORE_SMP_MB_BEFORE_CLEAR_BIT() mb()
@@ -641,7 +639,7 @@ struct ecore_exe_queue_obj {
        /* Commands pending for an completion. */
        ecore_list_t    pending_comp;
 
-       ECORE_MUTEX_SPIN                lock;
+       spinlock_t              lock;
 
        /* Maximum length of commands' list for one execution */
        int                     exe_chunk_len;
@@ -1687,7 +1685,7 @@ struct ecore_func_sp_obj {
        /* this mutex validates that when pending flag is taken, the next
         * ramrod to be sent will be the one set the pending bit
         */
-       ECORE_MUTEX             one_pending_mutex;
+       qlock_t         one_pending_mutex;
 
        /* Driver interface */
        struct ecore_func_sp_drv_ops    *drv;
diff --git a/scripts/spatch/bsd/locks.cocci b/scripts/spatch/bsd/locks.cocci
new file mode 100644 (file)
index 0000000..055246a
--- /dev/null
@@ -0,0 +1,15 @@
+@@
+typedef ECORE_MUTEX_SPIN;
+typedef spinlock_t;
+@@
+-ECORE_MUTEX_SPIN
++spinlock_t
+
+@@
+typedef ECORE_MUTEX;
+typedef qlock_t;
+@@
+-ECORE_MUTEX
++qlock_t
+
+