BXE: use separate lists for 9ns and BSD stuff
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 29 Jan 2015 19:57:37 +0000 (14:57 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:31 +0000 (10:12 -0500)
The old prev list was supposed to be for something else.  We'll just use our
own TAILQ for the ctlr list.

kern/drivers/net/bxe/bxe.c
kern/drivers/net/bxe/bxe.h
kern/drivers/net/bxe/bxe_dev.c

index 81ccc42..22e361e 100644 (file)
@@ -250,9 +250,9 @@ static device_method_t bxe_methods[] = {
 };
 
 #endif
-qlock_t bxe_prev_mtx;
-struct bxe_prev_list bxe_prev_list = LIST_HEAD_INITIALIZER(bxe_prev_list);
+#define BXE_PREV_WAIT_NEEDED 1
 
+qlock_t bxe_prev_mtx;
 struct bxe_prev_list_node {
     LIST_ENTRY(bxe_prev_list_node) node;
     uint8_t bus;
@@ -261,7 +261,7 @@ struct bxe_prev_list_node {
     uint8_t aer; /* XXX automatic error recovery */
     uint8_t undi;
 };
-//static LIST_HEAD(, bxe_prev_list_node) bxe_prev_list = LIST_HEAD_INITIALIZER(bxe_prev_list);
+static LIST_HEAD(, bxe_prev_list_node) bxe_prev_list = LIST_HEAD_INITIALIZER(bxe_prev_list);
 
 /* Tunable device values... */
 
@@ -15636,7 +15636,7 @@ bxe_prev_mark_path(struct bxe_adapter *sc,
     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);
+          LIST_INSERT_HEAD(&bxe_prev_list, tmp, node);
 
     qunlock(&bxe_prev_mtx);
 
index 9de3bd0..9913779 100644 (file)
@@ -1320,7 +1320,7 @@ struct bxe_adapter {
         * has a first element of 'void *if_softc' (which is us). XXX
         */
        if_t        ifp;
-       LIST_ENTRY(bxe_adapter)         node;
+       TAILQ_ENTRY(bxe_adapter)                link9ns;
        /* OS defined structs */
        struct net_device *netdev;
        struct pci_device *pcidev;
@@ -2274,10 +2274,8 @@ 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 */
+/* Declared in bxe.c, init'd in pnp */
 extern qlock_t bxe_prev_mtx;
-LIST_HEAD(bxe_prev_list, bxe_adapter);
-extern struct bxe_prev_list bxe_prev_list;
 
 /***********/
 /* INLINES */
index 0283204..0e1fecb 100644 (file)
 /* We're required to print out stats at some point.  Here are a couple from
  * igbe, as an example. */
 
+spinlock_t bxe_adapter_tq_lock = SPINLOCK_INITIALIZER;
+TAILQ_HEAD(bxe_adapter_tq, bxe_adapter);
+struct bxe_adapter_tq bxe_adapter_tq = TAILQ_HEAD_INITIALIZER(bxe_adapter_tq);
+
 static char *statistics[Nstatistics] = {
        "CRC Error",
        "Alignment Error",
@@ -372,10 +376,9 @@ static void bxepci(void)
                        continue;
                }
 
-               /* BSD used mutexes for this list for other reasons */
-               qlock(&bxe_prev_mtx);
-               LIST_INSERT_HEAD(&bxe_prev_list, ctlr, node);
-               qunlock(&bxe_prev_mtx);
+               spin_lock(&bxe_adapter_tq_lock);
+               TAILQ_INSERT_TAIL(&bxe_adapter_tq, ctlr, link9ns);
+               spin_unlock(&bxe_adapter_tq_lock);
        }
 }
 
@@ -390,15 +393,15 @@ static int bxepnp(struct ether *edev)
         * MMIO/port setup */
        run_once(bxepci());
 
-       qlock(&bxe_prev_mtx);
-       LIST_FOREACH(ctlr, &bxe_prev_list, node) {
+       spin_lock(&bxe_adapter_tq_lock);
+       TAILQ_FOREACH(ctlr, &bxe_adapter_tq, link9ns) {
                /* just take the first inactive ctlr on the list */
                if (ctlr->active)
                        continue;
                ctlr->active = 1;
                break;
        }
-       qunlock(&bxe_prev_mtx);
+       spin_unlock(&bxe_adapter_tq_lock);
        if (ctlr == NULL)
                return -1;