Deleted Added
full compact
31c31
< __FBSDID("$FreeBSD: head/sys/dev/cxgb/cxgb_main.c 170789 2007-06-15 20:02:02Z kmacy $");
---
> __FBSDID("$FreeBSD: head/sys/dev/cxgb/cxgb_main.c 170869 2007-06-17 04:33:38Z kmacy $");
99c99,100
< static void cxgb_down(struct adapter *sc);
---
> static void cxgb_tick_handler(void *, int);
> static void cxgb_down_locked(struct adapter *sc);
321d321
<
338c338
<
---
>
371,374c371,380
< mtx_init(&sc->sge.reg_lock, "SGE reg lock", NULL, MTX_DEF);
< mtx_init(&sc->lock, "cxgb controller lock", NULL, MTX_DEF);
< mtx_init(&sc->mdio_lock, "cxgb mdio", NULL, MTX_DEF);
< mtx_init(&sc->elmer_lock, "cxgb elmer", NULL, MTX_DEF);
---
> snprintf(sc->lockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb controller lock %d",
> device_get_unit(dev));
> ADAPTER_LOCK_INIT(sc, sc->lockbuf);
>
> snprintf(sc->reglockbuf, ADAPTER_LOCK_NAME_LEN, "SGE reg lock %d",
> device_get_unit(dev));
> snprintf(sc->mdiolockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb mdio lock %d",
> device_get_unit(dev));
> snprintf(sc->elmerlockbuf, ADAPTER_LOCK_NAME_LEN, "cxgb elmer lock %d",
> device_get_unit(dev));
375a382,385
> MTX_INIT(&sc->sge.reg_lock, sc->reglockbuf, NULL, MTX_DEF);
> MTX_INIT(&sc->mdio_lock, sc->mdiolockbuf, NULL, MTX_DEF);
> MTX_INIT(&sc->elmer_lock, sc->elmerlockbuf, NULL, MTX_DEF);
>
451a462
> TASK_INIT(&sc->tick_task, 0, cxgb_tick_handler, sc);
455c466
< callout_init_mtx(&sc->cxgb_tick_ch, &sc->lock, CALLOUT_RETURNUNLOCKED);
---
> callout_init(&sc->cxgb_tick_ch, TRUE);
539c550,554
< cxgb_down(sc);
---
> ADAPTER_LOCK(sc);
> /*
> * drops the lock
> */
> cxgb_down_locked(sc);
554,559d568
< /*
< * XXX need to drain the ifq by hand until
< * it is taught about mbuf iovecs
< */
< callout_drain(&sc->cxgb_tick_ch);
<
563a573
> taskqueue_drain(sc->tq, &sc->tick_task);
565a576,577
>
> tsleep(&sc, 0, "cxgb unload", hz);
582c594,596
<
---
>
> cxgb_offload_exit();
>
587,589c601,604
< mtx_destroy(&sc->mdio_lock);
< mtx_destroy(&sc->sge.reg_lock);
< mtx_destroy(&sc->lock);
---
> MTX_DESTROY(&sc->mdio_lock);
> MTX_DESTROY(&sc->sge.reg_lock);
> MTX_DESTROY(&sc->elmer_lock);
> ADAPTER_LOCK_DEINIT(sc);
761d775
< char buf[64];
765,766c779,781
< snprintf(buf, sizeof(buf), "cxgb port %d", p->port);
< mtx_init(&p->lock, buf, 0, MTX_DEF);
---
> snprintf(p->lockbuf, PORT_NAME_LEN, "cxgb port lock %d:%d",
> device_get_unit(device_get_parent(dev)), p->port);
> PORT_LOCK_INIT(p, p->lockbuf);
837c852
< snprintf(buf, sizeof(buf), "cxgb_port_taskq%d", p->port);
---
> snprintf(p->taskqbuf, TASKQ_NAME_LEN, "cxgb_port_taskq%d", p->port);
840c855
< p->tq = taskqueue_create(buf, M_NOWAIT,
---
> p->tq = taskqueue_create(p->taskqbuf, M_NOWAIT,
873d887
< mtx_destroy(&p->lock);
879c893,894
<
---
>
> PORT_LOCK_DEINIT(p);
1271c1286
< cxgb_down(struct adapter *sc)
---
> cxgb_down_locked(struct adapter *sc)
1276d1290
< ADAPTER_LOCK(sc);
1278,1279d1291
< ADAPTER_UNLOCK(sc);
<
1294a1307
> ADAPTER_UNLOCK(sc);
1295a1309
> callout_drain(&sc->cxgb_tick_ch);
1296a1311
>
1366d1380
< ADAPTER_LOCK(adapter);
1369d1382
< ADAPTER_UNLOCK(adapter);
1393c1406
< mtx_assert(&p->lock, MA_OWNED);
---
> PORT_LOCK_ASSERT_OWNED(p);
1402c1415
< if (p->adapter->open_device_map == 0)
---
> if (p->adapter->open_device_map == 0) {
1404c1417,1418
<
---
> t3_sge_init_adapter(sc);
> }
1422c1436
<
---
>
1433c1447
< mtx_assert(&p->lock, MA_OWNED);
---
> PORT_LOCK_ASSERT_OWNED(p);
1444,1445c1458,1459
< mtx_assert(&p->lock, MA_OWNED);
< mtx_assert(&p->adapter->lock, MA_NOTOWNED);
---
> PORT_LOCK_ASSERT_OWNED(p);
> ADAPTER_LOCK_ASSERT_NOTOWNED(p->adapter);
1456,1461c1470,1476
< /*
< * XXX cancel check_task
< */
< if (p->adapter->open_device_map == 0)
< cxgb_down(p->adapter);
< ADAPTER_UNLOCK(p->adapter);
---
>
>
> if (p->adapter->open_device_map == 0) {
> cxgb_down_locked(p->adapter);
> } else
> ADAPTER_UNLOCK(p->adapter);
>
1514c1529,1530
< PORT_LOCK(p);
---
> callout_drain(&p->adapter->cxgb_tick_ch);
> PORT_LOCK(p);
1521d1536
<
1525,1534c1540,1547
< } else {
< callout_stop(&p->adapter->cxgb_tick_ch);
< if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
< cxgb_stop_locked(p);
< } else {
< adapter_t *sc = p->adapter;
< callout_reset(&sc->cxgb_tick_ch,
< sc->params.stats_update_period * hz,
< cxgb_tick, sc);
< }
---
> } else if (ifp->if_drv_flags & IFF_DRV_RUNNING)
> cxgb_stop_locked(p);
>
> if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
> adapter_t *sc = p->adapter;
> callout_reset(&sc->cxgb_tick_ch,
> sc->params.stats_update_period * hz,
> cxgb_tick, sc);
1749,1751c1762,1765
<
< t3_slow_intr_handler(sc);
<
---
> /*
> * May need to sleep - defer to taskqueue
> */
> taskqueue_enqueue(sc->tq, &sc->slow_intr_task);
1826a1841,1852
>
> taskqueue_enqueue(sc->tq, &sc->tick_task);
>
> if (sc->open_device_map != 0)
> callout_reset(&sc->cxgb_tick_ch, sc->params.stats_update_period * hz,
> cxgb_tick, sc);
> }
>
> static void
> cxgb_tick_handler(void *arg, int count)
> {
> adapter_t *sc = (adapter_t *)arg;
1828a1855
> ADAPTER_LOCK(sc);
1831,1832d1857
< callout_reset(&sc->cxgb_tick_ch, sc->params.stats_update_period * hz,
< cxgb_tick, sc);