Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F167954457
D1772.id3626.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
26 KB
Referenced Files
None
Subscribers
None
D1772.id3626.diff
View Options
Index: sys/dev/sfxge/common/efsys.h
===================================================================
--- sys/dev/sfxge/common/efsys.h
+++ sys/dev/sfxge/common/efsys.h
@@ -517,6 +517,15 @@
struct resource *esb_res;
} efsys_bar_t;
+#define SFXGE_BAR_LOCK_INIT(_esbp, _name) \
+ mtx_init(&(_esbp)->esb_lock, (_name), NULL, MTX_DEF)
+#define SFXGE_BAR_LOCK_DESTROY(_esbp) \
+ mtx_destroy(&(_esbp)->esb_lock)
+#define SFXGE_BAR_LOCK(_esbp) \
+ mtx_lock(&(_esbp)->esb_lock)
+#define SFXGE_BAR_UNLOCK(_esbp) \
+ mtx_unlock(&(_esbp)->esb_lock)
+
#define EFSYS_BAR_READD(_esbp, _offset, _edp, _lock) \
do { \
_NOTE(CONSTANTCONDITION) \
@@ -525,7 +534,7 @@
\
_NOTE(CONSTANTCONDITION) \
if (_lock) \
- mtx_lock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_LOCK(_esbp); \
\
(_edp)->ed_u32[0] = bus_space_read_4((_esbp)->esb_tag, \
(_esbp)->esb_handle, (_offset)); \
@@ -535,7 +544,7 @@
\
_NOTE(CONSTANTCONDITION) \
if (_lock) \
- mtx_unlock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_UNLOCK(_esbp); \
_NOTE(CONSTANTCONDITION) \
} while (B_FALSE)
@@ -545,7 +554,7 @@
KASSERT(IS_P2ALIGNED(_offset, sizeof (efx_qword_t)), \
("not power of 2 aligned")); \
\
- mtx_lock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_LOCK(_esbp); \
\
(_eqp)->eq_u32[0] = bus_space_read_4((_esbp)->esb_tag, \
(_esbp)->esb_handle, (_offset)); \
@@ -556,7 +565,7 @@
uint32_t, (_eqp)->eq_u32[1], \
uint32_t, (_eqp)->eq_u32[0]); \
\
- mtx_unlock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_UNLOCK(_esbp); \
_NOTE(CONSTANTCONDITION) \
} while (B_FALSE)
@@ -568,7 +577,7 @@
\
_NOTE(CONSTANTCONDITION) \
if (_lock) \
- mtx_lock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_LOCK(_esbp); \
\
(_eop)->eo_u32[0] = bus_space_read_4((_esbp)->esb_tag, \
(_esbp)->esb_handle, (_offset)); \
@@ -587,7 +596,7 @@
\
_NOTE(CONSTANTCONDITION) \
if (_lock) \
- mtx_unlock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_UNLOCK(_esbp); \
_NOTE(CONSTANTCONDITION) \
} while (B_FALSE)
@@ -599,7 +608,7 @@
\
_NOTE(CONSTANTCONDITION) \
if (_lock) \
- mtx_lock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_LOCK(_esbp); \
\
EFSYS_PROBE2(bar_writed, unsigned int, (_offset), \
uint32_t, (_edp)->ed_u32[0]); \
@@ -609,7 +618,7 @@
\
_NOTE(CONSTANTCONDITION) \
if (_lock) \
- mtx_unlock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_UNLOCK(_esbp); \
_NOTE(CONSTANTCONDITION) \
} while (B_FALSE)
@@ -619,7 +628,7 @@
KASSERT(IS_P2ALIGNED(_offset, sizeof (efx_qword_t)), \
("not power of 2 aligned")); \
\
- mtx_lock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_LOCK(_esbp); \
\
EFSYS_PROBE3(bar_writeq, unsigned int, (_offset), \
uint32_t, (_eqp)->eq_u32[1], \
@@ -630,7 +639,7 @@
bus_space_write_4((_esbp)->esb_tag, (_esbp)->esb_handle,\
(_offset+4), (_eqp)->eq_u32[1]); \
\
- mtx_unlock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_UNLOCK(_esbp); \
_NOTE(CONSTANTCONDITION) \
} while (B_FALSE)
@@ -642,7 +651,7 @@
\
_NOTE(CONSTANTCONDITION) \
if (_lock) \
- mtx_lock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_LOCK(_esbp); \
\
EFSYS_PROBE5(bar_writeo, unsigned int, (_offset), \
uint32_t, (_eop)->eo_u32[3], \
@@ -661,7 +670,7 @@
\
_NOTE(CONSTANTCONDITION) \
if (_lock) \
- mtx_unlock(&((_esbp)->esb_lock)); \
+ SFXGE_BAR_UNLOCK(_esbp); \
_NOTE(CONSTANTCONDITION) \
} while (B_FALSE)
Index: sys/dev/sfxge/sfxge.h
===================================================================
--- sys/dev/sfxge/sfxge.h
+++ sys/dev/sfxge/sfxge.h
@@ -314,4 +314,48 @@
#define SFXGE_MAX_MTU (9 * 1024)
+#define SFXGE_ADAPTER_LOCK_INIT(_sc, _name) \
+ sx_init(&(_sc)->softc_lock, (_name))
+#define SFXGE_ADAPTER_LOCK_DESTROY(_sc) \
+ sx_destroy(&(_sc)->softc_lock)
+#define SFXGE_ADAPTER_LOCK(_sc) \
+ sx_xlock(&(_sc)->softc_lock)
+#define SFXGE_ADAPTER_UNLOCK(_sc) \
+ sx_xunlock(&(_sc)->softc_lock)
+#define SFXGE_ADAPTER_LOCK_ASSERT_OWNED(_sc) \
+ sx_assert(&(_sc)->softc_lock, LA_XLOCKED)
+
+#define SFXGE_PORT_LOCK_INIT(_port, _name) \
+ mtx_init(&(_port)->lock, (_name), NULL, MTX_DEF)
+#define SFXGE_PORT_LOCK_DESTROY(_port) \
+ mtx_destroy(&(_port)->lock)
+#define SFXGE_PORT_LOCK(_port) \
+ mtx_lock(&(_port)->lock)
+#define SFXGE_PORT_UNLOCK(_port) \
+ mtx_unlock(&(_port)->lock)
+#define SFXGE_PORT_LOCK_ASSERT_OWNED(_port) \
+ mtx_assert(&(_port)->lock, MA_OWNED)
+
+#define SFXGE_MCDI_LOCK_INIT(_mcdi, _name) \
+ mtx_init(&(_mcdi)->lock, (_name), NULL, MTX_DEF)
+#define SFXGE_MCDI_LOCK_DESTROY(_mcdi) \
+ mtx_destroy(&(_mcdi)->lock)
+#define SFXGE_MCDI_LOCK(_mcdi) \
+ mtx_lock(&(_mcdi)->lock)
+#define SFXGE_MCDI_UNLOCK(_mcdi) \
+ mtx_unlock(&(_mcdi)->lock)
+#define SFXGE_MCDI_LOCK_ASSERT_OWNED(_mcdi) \
+ mtx_assert(&(_mcdi)->lock, MA_OWNED)
+
+#define SFXGE_EVQ_LOCK_INIT(_evq, _name) \
+ mtx_init(&(_evq)->lock, (_name), NULL, MTX_DEF)
+#define SFXGE_EVQ_LOCK_DESTROY(_evq) \
+ mtx_destroy(&(_evq)->lock)
+#define SFXGE_EVQ_LOCK(_evq) \
+ mtx_lock(&(_evq)->lock)
+#define SFXGE_EVQ_UNLOCK(_evq) \
+ mtx_unlock(&(_evq)->lock)
+#define SFXGE_EVQ_LOCK_ASSERT_OWNED(_evq) \
+ mtx_assert(&(_evq)->lock, MA_OWNED)
+
#endif /* _SFXGE_H */
Index: sys/dev/sfxge/sfxge.c
===================================================================
--- sys/dev/sfxge/sfxge.c
+++ sys/dev/sfxge/sfxge.c
@@ -95,7 +95,7 @@
{
int rc;
- sx_assert(&sc->softc_lock, LA_XLOCKED);
+ SFXGE_ADAPTER_LOCK_ASSERT_OWNED(sc);
if (sc->init_state == SFXGE_STARTED)
return (0);
@@ -164,15 +164,15 @@
sc = (struct sfxge_softc *)arg;
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
(void)sfxge_start(sc);
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
}
static void
sfxge_stop(struct sfxge_softc *sc)
{
- sx_assert(&sc->softc_lock, LA_XLOCKED);
+ SFXGE_ADAPTER_LOCK_ASSERT_OWNED(sc);
if (sc->init_state != SFXGE_STARTED)
return;
@@ -212,7 +212,7 @@
switch (command) {
case SIOCSIFFLAGS:
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
if (ifp->if_flags & IFF_UP) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
if ((ifp->if_flags ^ sc->if_flags) &
@@ -225,7 +225,7 @@
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
sfxge_stop(sc);
sc->if_flags = ifp->if_flags;
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
break;
case SIOCSIFMTU:
if (ifr->ifr_mtu == ifp->if_mtu) {
@@ -238,11 +238,11 @@
error = 0;
} else {
/* Restart required */
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
sfxge_stop(sc);
ifp->if_mtu = ifr->ifr_mtu;
error = sfxge_start(sc);
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
if (error != 0) {
ifp->if_flags &= ~IFF_UP;
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
@@ -256,7 +256,7 @@
sfxge_mac_filter_set(sc);
break;
case SIOCSIFCAP:
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
/*
* The networking core already rejects attempts to
@@ -266,7 +266,7 @@
*/
if (~ifr->ifr_reqcap & SFXGE_CAP_FIXED) {
error = EINVAL;
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
break;
}
@@ -280,7 +280,7 @@
else
ifp->if_hwassist &= ~CSUM_TSO;
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
break;
case SIOCSIFMEDIA:
case SIOCGIFMEDIA:
@@ -298,9 +298,9 @@
{
struct sfxge_softc *sc = ifp->if_softc;
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
sfxge_stop(sc);
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
ifmedia_removeall(&sc->media);
ether_ifdetach(ifp);
@@ -376,7 +376,7 @@
}
esbp->esb_tag = rman_get_bustag(esbp->esb_res);
esbp->esb_handle = rman_get_bushandle(esbp->esb_res);
- mtx_init(&esbp->esb_lock, "sfxge_efsys_bar", NULL, MTX_DEF);
+ SFXGE_BAR_LOCK_INIT(esbp, "sfxge_efsys_bar");
return (0);
}
@@ -388,7 +388,7 @@
bus_release_resource(sc->dev, SYS_RES_MEMORY, esbp->esb_rid,
esbp->esb_res);
- mtx_destroy(&esbp->esb_lock);
+ SFXGE_BAR_LOCK_DESTROY(esbp);
}
static int
@@ -401,7 +401,7 @@
dev = sc->dev;
- sx_init(&sc->softc_lock, "sfxge_softc");
+ SFXGE_ADAPTER_LOCK_INIT(sc, "sfxge_softc");
sc->max_rss_channels = 0;
snprintf(rss_param_name, sizeof(rss_param_name),
@@ -545,7 +545,7 @@
fail:
sc->dev = NULL;
- sx_destroy(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK_DESTROY(sc);
return (error);
}
@@ -594,7 +594,7 @@
taskqueue_drain(taskqueue_thread, &sc->task_reset);
/* Destroy the softc lock. */
- sx_destroy(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK_DESTROY(sc);
}
static int
@@ -696,7 +696,7 @@
sc = (struct sfxge_softc *)arg;
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
if (sc->init_state != SFXGE_STARTED)
goto done;
@@ -709,7 +709,7 @@
rc);
done:
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
}
void
Index: sys/dev/sfxge/sfxge_ev.c
===================================================================
--- sys/dev/sfxge/sfxge_ev.c
+++ sys/dev/sfxge/sfxge_ev.c
@@ -415,7 +415,7 @@
unsigned int index;
clock_t now;
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
if (sc->evq[0]->init_state != SFXGE_EVQ_STARTED)
goto out;
@@ -429,12 +429,12 @@
/* Add event counts from each event queue in turn */
for (index = 0; index < sc->intr.n_alloc; index++) {
evq = sc->evq[index];
- mtx_lock(&evq->lock);
+ SFXGE_EVQ_LOCK(evq);
efx_ev_qstats_update(evq->common, sc->ev_stats);
- mtx_unlock(&evq->lock);
+ SFXGE_EVQ_UNLOCK(evq);
}
out:
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
}
static int
@@ -495,7 +495,7 @@
int error;
int index;
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
if (req->newptr != NULL) {
if ((error = SYSCTL_IN(req, &moderation, sizeof(moderation)))
@@ -522,7 +522,7 @@
}
out:
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
return (error);
}
@@ -577,7 +577,7 @@
{
int rc;
- mtx_lock(&evq->lock);
+ SFXGE_EVQ_LOCK(evq);
if (evq->init_state != SFXGE_EVQ_STARTING &&
evq->init_state != SFXGE_EVQ_STARTED) {
@@ -607,12 +607,12 @@
if ((rc = efx_ev_qprime(evq->common, evq->read_ptr)) != 0)
goto fail;
- mtx_unlock(&evq->lock);
+ SFXGE_EVQ_UNLOCK(evq);
return (0);
fail:
- mtx_unlock(&(evq->lock));
+ SFXGE_EVQ_UNLOCK(evq);
return (rc);
}
@@ -626,7 +626,7 @@
KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
("evq->init_state != SFXGE_EVQ_STARTED"));
- mtx_lock(&evq->lock);
+ SFXGE_EVQ_LOCK(evq);
evq->init_state = SFXGE_EVQ_INITIALIZED;
evq->read_ptr = 0;
evq->exception = B_FALSE;
@@ -639,7 +639,7 @@
efx_ev_qdestroy(evq->common);
efx_sram_buf_tbl_clear(sc->enp, evq->buf_base_id,
EFX_EVQ_NBUFS(evq->entries));
- mtx_unlock(&evq->lock);
+ SFXGE_EVQ_UNLOCK(evq);
}
static int
@@ -669,7 +669,7 @@
evq->buf_base_id, &evq->common)) != 0)
goto fail;
- mtx_lock(&evq->lock);
+ SFXGE_EVQ_LOCK(evq);
/* Set the default moderation */
(void)efx_ev_qmoderate(evq->common, sc->ev_moderation);
@@ -680,7 +680,7 @@
evq->init_state = SFXGE_EVQ_STARTING;
- mtx_unlock(&evq->lock);
+ SFXGE_EVQ_UNLOCK(evq);
/* Wait for the initialization event */
count = 0;
@@ -701,10 +701,10 @@
return (0);
fail3:
- mtx_lock(&evq->lock);
+ SFXGE_EVQ_LOCK(evq);
evq->init_state = SFXGE_EVQ_INITIALIZED;
fail2:
- mtx_unlock(&evq->lock);
+ SFXGE_EVQ_UNLOCK(evq);
efx_ev_qdestroy(evq->common);
fail:
efx_sram_buf_tbl_clear(sc->enp, evq->buf_base_id,
@@ -785,7 +785,7 @@
sc->evq[index] = NULL;
- mtx_destroy(&evq->lock);
+ SFXGE_EVQ_LOCK_DESTROY(evq);
free(evq, M_SFXGE);
}
@@ -832,7 +832,7 @@
sfxge_sram_buf_tbl_alloc(sc, EFX_EVQ_NBUFS(evq->entries),
&evq->buf_base_id);
- mtx_init(&evq->lock, "evq", NULL, MTX_DEF);
+ SFXGE_EVQ_LOCK_INIT(evq, "evq");
evq->init_state = SFXGE_EVQ_INITIALIZED;
Index: sys/dev/sfxge/sfxge_mcdi.c
===================================================================
--- sys/dev/sfxge/sfxge_mcdi.c
+++ sys/dev/sfxge/sfxge_mcdi.c
@@ -52,8 +52,7 @@
static void
sfxge_mcdi_acquire(struct sfxge_mcdi *mcdi)
{
-
- mtx_lock(&mcdi->lock);
+ SFXGE_MCDI_LOCK(mcdi);
KASSERT(mcdi->state != SFXGE_MCDI_UNINITIALIZED,
("MCDI not initialized"));
@@ -61,15 +60,14 @@
(void)cv_wait_sig(&mcdi->cv, &mcdi->lock);
mcdi->state = SFXGE_MCDI_BUSY;
- mtx_unlock(&mcdi->lock);
+ SFXGE_MCDI_UNLOCK(mcdi);
}
/* Release ownership of MCDI on request completion. */
static void
sfxge_mcdi_release(struct sfxge_mcdi *mcdi)
{
-
- mtx_lock(&mcdi->lock);
+ SFXGE_MCDI_LOCK(mcdi);
KASSERT((mcdi->state == SFXGE_MCDI_BUSY ||
mcdi->state == SFXGE_MCDI_COMPLETED),
("MCDI not busy or task not completed"));
@@ -77,7 +75,7 @@
mcdi->state = SFXGE_MCDI_INITIALIZED;
cv_broadcast(&mcdi->cv);
- mtx_unlock(&mcdi->lock);
+ SFXGE_MCDI_UNLOCK(mcdi);
}
static void
@@ -160,11 +158,11 @@
sc = (struct sfxge_softc *)arg;
mcdi = &sc->mcdi;
- mtx_lock(&mcdi->lock);
+ SFXGE_MCDI_LOCK(mcdi);
KASSERT(mcdi->state == SFXGE_MCDI_BUSY, ("MCDI not busy"));
mcdi->state = SFXGE_MCDI_COMPLETED;
cv_broadcast(&mcdi->cv);
- mtx_unlock(&mcdi->lock);
+ SFXGE_MCDI_UNLOCK(mcdi);
}
static void
@@ -203,7 +201,7 @@
KASSERT(mcdi->state == SFXGE_MCDI_UNINITIALIZED,
("MCDI already initialized"));
- mtx_init(&mcdi->lock, "sfxge_mcdi", NULL, MTX_DEF);
+ SFXGE_MCDI_LOCK_INIT(mcdi, "sfxge_mcdi");
mcdi->state = SFXGE_MCDI_INITIALIZED;
@@ -220,7 +218,7 @@
return (0);
fail:
- mtx_destroy(&mcdi->lock);
+ SFXGE_MCDI_LOCK_DESTROY(mcdi);
mcdi->state = SFXGE_MCDI_UNINITIALIZED;
return (rc);
}
@@ -236,7 +234,7 @@
mcdi = &sc->mcdi;
emtp = &mcdi->transport;
- mtx_lock(&mcdi->lock);
+ SFXGE_MCDI_LOCK(mcdi);
KASSERT(mcdi->state == SFXGE_MCDI_INITIALIZED,
("MCDI not initialized"));
@@ -244,7 +242,7 @@
bzero(emtp, sizeof(*emtp));
cv_destroy(&mcdi->cv);
- mtx_unlock(&mcdi->lock);
+ SFXGE_MCDI_UNLOCK(mcdi);
- mtx_destroy(&mcdi->lock);
+ SFXGE_MCDI_LOCK_DESTROY(mcdi);
}
Index: sys/dev/sfxge/sfxge_port.c
===================================================================
--- sys/dev/sfxge/sfxge_port.c
+++ sys/dev/sfxge/sfxge_port.c
@@ -48,7 +48,7 @@
unsigned int count;
int rc;
- mtx_lock(&port->lock);
+ SFXGE_PORT_LOCK(port);
if (port->init_state != SFXGE_PORT_STARTED) {
rc = 0;
@@ -82,7 +82,7 @@
rc = ETIMEDOUT;
out:
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
return (rc);
}
@@ -170,7 +170,7 @@
sc = arg1;
port = &sc->port;
- mtx_lock(&port->lock);
+ SFXGE_PORT_LOCK(port);
if (req->newptr != NULL) {
if ((error = SYSCTL_IN(req, &fcntl, sizeof(fcntl))) != 0)
@@ -191,7 +191,7 @@
}
out:
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
return (error);
}
@@ -207,13 +207,13 @@
sc = arg1;
port = &sc->port;
- mtx_lock(&port->lock);
+ SFXGE_PORT_LOCK(port);
if (port->init_state == SFXGE_PORT_STARTED && SFXGE_LINK_UP(sc))
efx_mac_fcntl_get(sc->enp, &wanted_fc, &link_fc);
else
link_fc = 0;
error = SYSCTL_OUT(req, &link_fc, sizeof(link_fc));
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
return (error);
}
@@ -262,7 +262,7 @@
enp = sc->enp;
port = &sc->port;
- mtx_lock(&port->lock);
+ SFXGE_PORT_LOCK(port);
if (port->init_state != SFXGE_PORT_STARTED)
goto done;
@@ -272,7 +272,7 @@
sfxge_mac_link_update(sc, mode);
done:
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
}
static int
@@ -320,7 +320,7 @@
struct sfxge_port *port = &sc->port;
int rc;
- mtx_lock(&port->lock);
+ SFXGE_PORT_LOCK(port);
/*
* The function may be called without softc_lock held in the
* case of SIOCADDMULTI and SIOCDELMULTI ioctls. ioctl handler
@@ -335,7 +335,7 @@
rc = sfxge_mac_filter_set_locked(sc);
else
rc = 0;
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
return (rc);
}
@@ -348,7 +348,7 @@
port = &sc->port;
enp = sc->enp;
- mtx_lock(&port->lock);
+ SFXGE_PORT_LOCK(port);
KASSERT(port->init_state == SFXGE_PORT_STARTED,
("port not started"));
@@ -367,7 +367,7 @@
/* Destroy the common code port object. */
efx_port_fini(sc->enp);
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
}
int
@@ -383,7 +383,7 @@
port = &sc->port;
enp = sc->enp;
- mtx_lock(&port->lock);
+ SFXGE_PORT_LOCK(port);
KASSERT(port->init_state == SFXGE_PORT_INITIALIZED,
("port not initialized"));
@@ -426,7 +426,7 @@
port->init_state = SFXGE_PORT_STARTED;
/* Single poll in case there were missing initial events */
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
sfxge_mac_poll_work(sc, 0);
return (0);
@@ -439,7 +439,7 @@
fail2:
efx_port_fini(sc->enp);
fail:
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
return (rc);
}
@@ -453,7 +453,7 @@
unsigned int count;
int rc;
- mtx_lock(&port->lock);
+ SFXGE_PORT_LOCK(port);
if (port->init_state != SFXGE_PORT_STARTED) {
rc = 0;
@@ -487,7 +487,7 @@
rc = ETIMEDOUT;
out:
- mtx_unlock(&port->lock);
+ SFXGE_PORT_UNLOCK(port);
return (rc);
}
@@ -554,7 +554,7 @@
sfxge_dma_free(esmp);
free(port->mac_stats.decode_buf, M_SFXGE);
- mtx_destroy(&port->lock);
+ SFXGE_PORT_LOCK_DESTROY(port);
port->sc = NULL;
}
@@ -577,7 +577,7 @@
port->sc = sc;
- mtx_init(&port->lock, "sfxge_port", NULL, MTX_DEF);
+ SFXGE_PORT_LOCK_INIT(port, "sfxge_port");
port->phy_stats.decode_buf = malloc(EFX_PHY_NSTATS * sizeof(uint32_t),
M_SFXGE, M_WAITOK | M_ZERO);
@@ -615,7 +615,7 @@
sfxge_dma_free(phy_stats_buf);
fail:
free(port->phy_stats.decode_buf, M_SFXGE);
- (void)mtx_destroy(&port->lock);
+ SFXGE_PORT_LOCK_DESTROY(port);
port->sc = NULL;
return (rc);
}
@@ -655,7 +655,7 @@
efx_link_mode_t mode;
sc = ifp->if_softc;
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
ifmr->ifm_status = IFM_AVALID;
ifmr->ifm_active = IFM_ETHER;
@@ -669,7 +669,7 @@
ifmr->ifm_active |= sfxge_port_link_fc_ifm(sc);
}
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
}
static int
@@ -682,7 +682,7 @@
sc = ifp->if_softc;
ifm = sc->media.ifm_cur;
- sx_xlock(&sc->softc_lock);
+ SFXGE_ADAPTER_LOCK(sc);
if (!SFXGE_RUNNING(sc)) {
rc = 0;
@@ -695,7 +695,7 @@
rc = efx_phy_adv_cap_set(sc->enp, ifm->ifm_data);
out:
- sx_xunlock(&sc->softc_lock);
+ SFXGE_ADAPTER_UNLOCK(sc);
return (rc);
}
Index: sys/dev/sfxge/sfxge_rx.c
===================================================================
--- sys/dev/sfxge/sfxge_rx.c
+++ sys/dev/sfxge/sfxge_rx.c
@@ -207,7 +207,7 @@
prefetch_read_many(sc->enp);
prefetch_read_many(rxq->common);
- mtx_assert(&evq->lock, MA_OWNED);
+ SFXGE_EVQ_LOCK_ASSERT_OWNED(evq);
if (rxq->init_state != SFXGE_RXQ_STARTED)
return;
@@ -749,7 +749,7 @@
index = rxq->index;
evq = sc->evq[index];
- mtx_assert(&evq->lock, MA_OWNED);
+ SFXGE_EVQ_LOCK_ASSERT_OWNED(evq);
completed = rxq->completed;
while (completed != rxq->pending) {
@@ -834,7 +834,7 @@
rxq = sc->rxq[index];
evq = sc->evq[index];
- mtx_lock(&evq->lock);
+ SFXGE_EVQ_LOCK(evq);
KASSERT(rxq->init_state == SFXGE_RXQ_STARTED,
("rxq not started"));
@@ -849,7 +849,7 @@
/* Flush the receive queue */
efx_rx_qflush(rxq->common);
- mtx_unlock(&evq->lock);
+ SFXGE_EVQ_UNLOCK(evq);
count = 0;
do {
@@ -861,7 +861,7 @@
} while (++count < 20);
- mtx_lock(&evq->lock);
+ SFXGE_EVQ_LOCK(evq);
if (rxq->flush_state == SFXGE_FLUSH_FAILED)
goto again;
@@ -885,7 +885,7 @@
efx_sram_buf_tbl_clear(sc->enp, rxq->buf_base_id,
EFX_RXQ_NBUFS(sc->rxq_entries));
- mtx_unlock(&evq->lock);
+ SFXGE_EVQ_UNLOCK(evq);
}
static int
@@ -916,7 +916,7 @@
&rxq->common)) != 0)
goto fail;
- mtx_lock(&evq->lock);
+ SFXGE_EVQ_LOCK(evq);
/* Enable the receive queue. */
efx_rx_qenable(rxq->common);
@@ -926,7 +926,7 @@
/* Try to fill the queue from the pool. */
sfxge_rx_qfill(rxq, EFX_RXQ_LIMIT(sc->rxq_entries), B_FALSE);
- mtx_unlock(&evq->lock);
+ SFXGE_EVQ_UNLOCK(evq);
return (0);
Index: sys/dev/sfxge/sfxge_tx.h
===================================================================
--- sys/dev/sfxge/sfxge_tx.h
+++ sys/dev/sfxge/sfxge_tx.h
@@ -123,13 +123,27 @@
#define SFXGE_TX_BATCH 64
#ifdef SFXGE_HAVE_MQ
-#define SFXGE_TXQ_LOCK(txq) (&(txq)->lock)
+#define SFXGE_TX_LOCK(txq) (&(txq)->lock)
#define SFXGE_TX_SCALE(sc) ((sc)->intr.n_alloc)
#else
-#define SFXGE_TXQ_LOCK(txq) (&(txq)->sc->tx_lock)
+#define SFXGE_TX_LOCK(txq) (&(txq)->sc->tx_lock)
#define SFXGE_TX_SCALE(sc) 1
#endif
+#define SFXGE_TXQ_LOCK_INIT(_txq, _name) \
+ mtx_init(&(_txq)->lock, (_name), NULL, MTX_DEF)
+#define SFXGE_TXQ_LOCK_DESTROY(_txq) \
+ mtx_destroy(&(_txq)->lock)
+#define SFXGE_TXQ_LOCK(_txq) \
+ mtx_lock(SFXGE_TX_LOCK(_txq))
+#define SFXGE_TXQ_TRYLOCK(_txq) \
+ mtx_trylock(SFXGE_TX_LOCK(_txq))
+#define SFXGE_TXQ_UNLOCK(_txq) \
+ mtx_unlock(SFXGE_TX_LOCK(_txq))
+#define SFXGE_TXQ_LOCK_ASSERT_OWNED(_txq) \
+ mtx_assert(SFXGE_TX_LOCK(_txq), MA_OWNED)
+
+
struct sfxge_txq {
/* The following fields should be written very rarely */
struct sfxge_softc *sc;
Index: sys/dev/sfxge/sfxge_tx.c
===================================================================
--- sys/dev/sfxge/sfxge_tx.c
+++ sys/dev/sfxge/sfxge_tx.c
@@ -118,7 +118,7 @@
{
unsigned int completed;
- mtx_assert(&evq->lock, MA_OWNED);
+ SFXGE_EVQ_LOCK_ASSERT_OWNED(evq);
completed = txq->completed;
while (completed != txq->pending) {
@@ -178,7 +178,7 @@
unsigned int count;
unsigned int non_tcp_count;
- mtx_assert(&txq->lock, MA_OWNED);
+ SFXGE_TXQ_LOCK_ASSERT_OWNED(txq);
stdp = &txq->dpl;
@@ -221,7 +221,7 @@
static void
sfxge_tx_qreap(struct sfxge_txq *txq)
{
- mtx_assert(SFXGE_TXQ_LOCK(txq), MA_OWNED);
+ SFXGE_TXQ_LOCK_ASSERT_OWNED(txq);
txq->reaped = txq->completed;
}
@@ -233,7 +233,7 @@
unsigned int level;
int rc;
- mtx_assert(SFXGE_TXQ_LOCK(txq), MA_OWNED);
+ SFXGE_TXQ_LOCK_ASSERT_OWNED(txq);
KASSERT(txq->n_pend_desc != 0, ("txq->n_pend_desc == 0"));
KASSERT(txq->n_pend_desc <= SFXGE_TSO_MAX_DESC,
@@ -408,7 +408,7 @@
unsigned int pushed;
int rc;
- mtx_assert(&txq->lock, MA_OWNED);
+ SFXGE_TXQ_LOCK_ASSERT_OWNED(txq);
sc = txq->sc;
stdp = &txq->dpl;
@@ -484,7 +484,7 @@
static inline void
sfxge_tx_qdpl_service(struct sfxge_txq *txq)
{
- mtx_assert(&txq->lock, MA_OWNED);
+ SFXGE_TXQ_LOCK_ASSERT_OWNED(txq);
do {
if (SFXGE_TX_QDPL_PENDING(txq))
@@ -493,9 +493,9 @@
if (!txq->blocked)
sfxge_tx_qdpl_drain(txq);
- mtx_unlock(&txq->lock);
+ SFXGE_TXQ_UNLOCK(txq);
} while (SFXGE_TX_QDPL_PENDING(txq) &&
- mtx_trylock(&txq->lock));
+ SFXGE_TXQ_TRYLOCK(txq));
}
/*
@@ -519,7 +519,7 @@
KASSERT(mbuf->m_nextpkt == NULL, ("mbuf->m_nextpkt != NULL"));
if (locked) {
- mtx_assert(&txq->lock, MA_OWNED);
+ SFXGE_TXQ_LOCK_ASSERT_OWNED(txq);
sfxge_tx_qdpl_swizzle(txq);
@@ -588,11 +588,11 @@
* the packet will be appended to the "get list" of the deferred
* packet list. Otherwise, it will be pushed on the "put list".
*/
- locked = mtx_trylock(&txq->lock);
+ locked = SFXGE_TXQ_TRYLOCK(txq);
if (sfxge_tx_qdpl_put(txq, m, locked) != 0) {
if (locked)
- mtx_unlock(&txq->lock);
+ SFXGE_TXQ_UNLOCK(txq);
rc = ENOBUFS;
goto fail;
}
@@ -605,7 +605,7 @@
* is processing the list.
*/
if (!locked)
- locked = mtx_trylock(&txq->lock);
+ locked = SFXGE_TXQ_TRYLOCK(txq);
if (locked) {
/* Try to service the list. */
@@ -626,7 +626,7 @@
struct sfxge_tx_dpl *stdp = &txq->dpl;
struct mbuf *mbuf, *next;
- mtx_lock(&txq->lock);
+ SFXGE_TXQ_LOCK(txq);
sfxge_tx_qdpl_swizzle(txq);
for (mbuf = stdp->std_get; mbuf != NULL; mbuf = next) {
@@ -638,7 +638,7 @@
stdp->std_get_non_tcp_count = 0;
stdp->std_getp = &stdp->std_get;
- mtx_unlock(&txq->lock);
+ SFXGE_TXQ_UNLOCK(txq);
}
void
@@ -753,21 +753,20 @@
{
struct sfxge_softc *sc = ifp->if_softc;
- mtx_lock(&sc->tx_lock);
+ SFXGE_TXQ_LOCK(sc->txq[0]);
sfxge_if_start_locked(ifp);
- mtx_unlock(&sc->tx_lock);
+ SFXGE_TXQ_UNLOCK(sc->txq[0]);
}
static inline void
sfxge_tx_qdpl_service(struct sfxge_txq *txq)
{
- struct sfxge_softc *sc = txq->sc;
- struct ifnet *ifp = sc->ifnet;
+ struct ifnet *ifp = txq->sc->ifnet;
- mtx_assert(&sc->tx_lock, MA_OWNED);
+ SFXGE_TXQ_LOCK_ASSERT_OWNED(txq);
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
sfxge_if_start_locked(ifp);
- mtx_unlock(&sc->tx_lock);
+ SFXGE_TXQ_UNLOCK(txq);
}
#endif /* SFXGE_HAVE_MQ */
@@ -1118,12 +1117,12 @@
sc = txq->sc;
evq = sc->evq[txq->evq_index];
- mtx_assert(&evq->lock, MA_OWNED);
+ SFXGE_EVQ_LOCK_ASSERT_OWNED(evq);
if (txq->init_state != SFXGE_TXQ_STARTED)
return;
- mtx_lock(SFXGE_TXQ_LOCK(txq));
+ SFXGE_TXQ_LOCK(txq);
if (txq->blocked) {
unsigned int level;
@@ -1154,7 +1153,7 @@
txq = sc->txq[index];
evq = sc->evq[txq->evq_index];
- mtx_lock(SFXGE_TXQ_LOCK(txq));
+ SFXGE_TXQ_LOCK(txq);
KASSERT(txq->init_state == SFXGE_TXQ_STARTED,
("txq->init_state != SFXGE_TXQ_STARTED"));
@@ -1165,7 +1164,7 @@
/* Flush the transmit queue. */
efx_tx_qflush(txq->common);
- mtx_unlock(SFXGE_TXQ_LOCK(txq));
+ SFXGE_TXQ_UNLOCK(txq);
count = 0;
do {
@@ -1176,8 +1175,8 @@
break;
} while (++count < 20);
- mtx_lock(&evq->lock);
- mtx_lock(SFXGE_TXQ_LOCK(txq));
+ SFXGE_EVQ_LOCK(evq);
+ SFXGE_TXQ_LOCK(txq);
KASSERT(txq->flush_state != SFXGE_FLUSH_FAILED,
("txq->flush_state == SFXGE_FLUSH_FAILED"));
@@ -1207,8 +1206,8 @@
efx_sram_buf_tbl_clear(sc->enp, txq->buf_base_id,
EFX_TXQ_NBUFS(sc->txq_entries));
- mtx_unlock(&evq->lock);
- mtx_unlock(SFXGE_TXQ_LOCK(txq));
+ SFXGE_EVQ_UNLOCK(evq);
+ SFXGE_TXQ_UNLOCK(txq);
}
static int
@@ -1257,14 +1256,14 @@
&txq->common)) != 0)
goto fail;
- mtx_lock(SFXGE_TXQ_LOCK(txq));
+ SFXGE_TXQ_LOCK(txq);
/* Enable the transmit queue. */
efx_tx_qenable(txq->common);
txq->init_state = SFXGE_TXQ_STARTED;
- mtx_unlock(SFXGE_TXQ_LOCK(txq));
+ SFXGE_TXQ_UNLOCK(txq);
return (0);
@@ -1362,7 +1361,7 @@
sc->txq[index] = NULL;
#ifdef SFXGE_HAVE_MQ
- mtx_destroy(&txq->lock);
+ SFXGE_TXQ_LOCK_DESTROY(txq);
#endif
free(txq, M_SFXGE);
@@ -1468,7 +1467,7 @@
stdp->std_get_non_tcp_max = sfxge_tx_dpl_get_non_tcp_max;
stdp->std_getp = &stdp->std_get;
- mtx_init(&txq->lock, "txq", NULL, MTX_DEF);
+ SFXGE_TXQ_LOCK_INIT(txq, "txq");
SYSCTL_ADD_UINT(device_get_sysctl_ctx(sc->dev),
SYSCTL_CHILDREN(txq_node), OID_AUTO,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Aug 26, 2:55 PM (6 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37304990
Default Alt Text
D1772.id3626.diff (26 KB)
Attached To
Mode
D1772: sfxge: Add macros to init, destroy, acquire, release and assert locks
Attached
Detach File
Event Timeline
Log In to Comment