Author: np
Date: Thu Mar 24 01:16:48 2011
New Revision: 219946
URL: http://svn.freebsd.org/changeset/base/219946

Log:
  t3_free_sge_resources should be given the number of qsets it needs to free.
  
  MFC after:    1 week

Modified:
  head/sys/dev/cxgb/cxgb_adapter.h
  head/sys/dev/cxgb/cxgb_main.c
  head/sys/dev/cxgb/cxgb_sge.c

Modified: head/sys/dev/cxgb/cxgb_adapter.h
==============================================================================
--- head/sys/dev/cxgb/cxgb_adapter.h    Thu Mar 24 01:13:28 2011        
(r219945)
+++ head/sys/dev/cxgb/cxgb_adapter.h    Thu Mar 24 01:16:48 2011        
(r219946)
@@ -510,7 +510,7 @@ int t3_sge_alloc(struct adapter *);
 int t3_sge_free(struct adapter *);
 int t3_sge_alloc_qset(adapter_t *, uint32_t, int, int, const struct 
qset_params *,
     int, struct port_info *);
-void t3_free_sge_resources(adapter_t *);
+void t3_free_sge_resources(adapter_t *, int);
 void t3_sge_start(adapter_t *);
 void t3_sge_stop(adapter_t *);
 void t3b_intr(void *data);

Modified: head/sys/dev/cxgb/cxgb_main.c
==============================================================================
--- head/sys/dev/cxgb/cxgb_main.c       Thu Mar 24 01:13:28 2011        
(r219945)
+++ head/sys/dev/cxgb/cxgb_main.c       Thu Mar 24 01:16:48 2011        
(r219946)
@@ -717,7 +717,7 @@ cxgb_controller_detach(device_t dev)
 static void
 cxgb_free(struct adapter *sc)
 {
-       int i;
+       int i, nqsets = 0;
 
        ADAPTER_LOCK(sc);
        sc->flags |= CXGB_SHUTDOWN;
@@ -731,6 +731,7 @@ cxgb_free(struct adapter *sc)
                if (sc->portdev[i] &&
                    device_delete_child(sc->dev, sc->portdev[i]) != 0)
                        device_printf(sc->dev, "failed to delete child port\n");
+               nqsets += sc->port[i].nqsets;
        }
 
        /*
@@ -756,7 +757,7 @@ cxgb_free(struct adapter *sc)
         * sysctls are cleaned up by the kernel linker.
         */
        if (sc->flags & FULL_INIT_DONE) {
-               t3_free_sge_resources(sc);
+               t3_free_sge_resources(sc, nqsets);
                sc->flags &= ~FULL_INIT_DONE;
        }
 
@@ -842,9 +843,9 @@ setup_sge_qsets(adapter_t *sc)
                            (sc->flags & USING_MSIX) ? qset_idx + 1 : irq_idx,
                            &sc->params.sge.qset[qset_idx], ntxq, pi);
                        if (err) {
-                               t3_free_sge_resources(sc);
-                               device_printf(sc->dev, "t3_sge_alloc_qset 
failed with %d\n",
-                                   err);
+                               t3_free_sge_resources(sc, qset_idx);
+                               device_printf(sc->dev,
+                                   "t3_sge_alloc_qset failed with %d\n", err);
                                return (err);
                        }
                }

Modified: head/sys/dev/cxgb/cxgb_sge.c
==============================================================================
--- head/sys/dev/cxgb/cxgb_sge.c        Thu Mar 24 01:13:28 2011        
(r219945)
+++ head/sys/dev/cxgb/cxgb_sge.c        Thu Mar 24 01:16:48 2011        
(r219946)
@@ -2092,18 +2092,14 @@ t3_free_qset(adapter_t *sc, struct sge_q
  *     Frees resources used by the SGE queue sets.
  */
 void
-t3_free_sge_resources(adapter_t *sc)
+t3_free_sge_resources(adapter_t *sc, int nqsets)
 {
-       int i, nqsets;
-       
-       for (nqsets = i = 0; i < (sc)->params.nports; i++) 
-               nqsets += sc->port[i].nqsets;
+       int i;
 
        for (i = 0; i < nqsets; ++i) {
                TXQ_LOCK(&sc->sge.qs[i]);
                t3_free_qset(sc, &sc->sge.qs[i]);
        }
-       
 }
 
 /**
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to