svn commit: r193397 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb
Kip Macy
kmacy at FreeBSD.org
Wed Jun 3 20:49:25 UTC 2009
Author: kmacy
Date: Wed Jun 3 20:49:25 2009
New Revision: 193397
URL: http://svn.freebsd.org/changeset/base/193397
Log:
move qset allocation out from underneat the port and adapter locks
Modified:
user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_main.c
Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_main.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_main.c Wed Jun 3 20:25:13 2009 (r193396)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_main.c Wed Jun 3 20:49:25 2009 (r193397)
@@ -1676,30 +1676,6 @@ cxgb_up(struct adapter *sc)
{
int err = 0;
- if ((sc->flags & FULL_INIT_DONE) == 0) {
-
- if ((sc->flags & FW_UPTODATE) == 0)
- if ((err = upgrade_fw(sc)))
- goto out;
- if ((sc->flags & TPS_UPTODATE) == 0)
- if ((err = update_tpsram(sc)))
- goto out;
- err = t3_init_hw(sc, 0);
- if (err)
- goto out;
-
- t3_set_reg_field(sc, A_TP_PARA_REG5, 0, F_RXDDPOFFINIT);
- t3_write_reg(sc, A_ULPRX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12));
-
- err = setup_sge_qsets(sc);
- if (err)
- goto out;
-
- setup_rss(sc);
- t3_add_configured_sysctls(sc);
- sc->flags |= FULL_INIT_DONE;
- }
-
t3_intr_clear(sc);
/* If it's MSI or INTx, allocate a single interrupt for everything */
@@ -1863,12 +1839,47 @@ offload_close(struct t3cdev *tdev)
return (0);
}
+static int
+cxgb_first_init(struct adapter *sc)
+{
+ int err = 0;
+
+ if ((sc->flags & FW_UPTODATE) == 0)
+ if ((err = upgrade_fw(sc)))
+ goto out;
+ if ((sc->flags & TPS_UPTODATE) == 0)
+ if ((err = update_tpsram(sc)))
+ goto out;
+ err = t3_init_hw(sc, 0);
+ if (err)
+ goto out;
+
+ t3_set_reg_field(sc, A_TP_PARA_REG5, 0, F_RXDDPOFFINIT);
+ t3_write_reg(sc, A_ULPRX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12));
+
+ err = setup_sge_qsets(sc);
+ if (err)
+ goto out;
+
+ ADAPTER_LOCK(sc);
+ setup_rss(sc);
+ t3_add_configured_sysctls(sc);
+ sc->flags |= FULL_INIT_DONE;
+ ADAPTER_UNLOCK(sc);
+out:
+ return (err);
+}
static void
cxgb_init(void *arg)
{
struct port_info *p = arg;
-
+ struct adapter *sc = p->adapter;
+
+ if (((sc->flags & FULL_INIT_DONE) == 0) &&
+ (cxgb_first_init(sc)))
+ return;
+
PORT_LOCK(p);
cxgb_init_locked(p);
PORT_UNLOCK(p);
More information about the svn-src-user
mailing list