Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145525027
D42466.id129721.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D42466.id129721.diff
View Options
diff --git a/sys/dev/etherswitch/e6000sw/e6000sw.c b/sys/dev/etherswitch/e6000sw/e6000sw.c
--- a/sys/dev/etherswitch/e6000sw/e6000sw.c
+++ b/sys/dev/etherswitch/e6000sw/e6000sw.c
@@ -66,6 +66,7 @@
#define E6000SW_UNLOCK(_sc) sx_unlock(&(_sc)->sx)
#define E6000SW_LOCK_ASSERT(_sc, _what) sx_assert(&(_sc)->sx, (_what))
#define E6000SW_TRYLOCK(_sc) sx_tryxlock(&(_sc)->sx)
+#define E6000SW_LOCKED(_sc) sx_xlocked(&(_sc)->sx)
#define E6000SW_WAITREADY(_sc, _reg, _bit) \
e6000sw_waitready((_sc), REG_GLOBAL, (_reg), (_bit))
#define E6000SW_WAITREADY2(_sc, _reg, _bit) \
@@ -169,8 +170,8 @@
DEVMETHOD(bus_add_child, device_add_child_ordered),
/* mii interface */
- DEVMETHOD(miibus_readreg, e6000sw_readphy_locked),
- DEVMETHOD(miibus_writereg, e6000sw_writephy_locked),
+ DEVMETHOD(miibus_readreg, e6000sw_readphy),
+ DEVMETHOD(miibus_writereg, e6000sw_writephy),
/* etherswitch interface */
DEVMETHOD(etherswitch_getinfo, e6000sw_getinfo),
@@ -747,14 +748,16 @@
static int e6000sw_readphy(device_t dev, int phy, int reg)
{
e6000sw_softc_t *sc;
- int ret;
+ int locked, ret;
sc = device_get_softc(dev);
- E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
- E6000SW_LOCK(sc);
+ locked = E6000SW_LOCKED(sc);
+ if (!locked)
+ E6000SW_LOCK(sc);
ret = e6000sw_readphy_locked(dev, phy, reg);
- E6000SW_UNLOCK(sc);
+ if (!locked)
+ E6000SW_UNLOCK(sc);
return (ret);
}
@@ -798,14 +801,16 @@
static int e6000sw_writephy(device_t dev, int phy, int reg, int data)
{
e6000sw_softc_t *sc;
- int ret;
+ int locked, ret;
sc = device_get_softc(dev);
- E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
- E6000SW_LOCK(sc);
+ locked = E6000SW_LOCKED(sc);
+ if (!locked)
+ E6000SW_LOCK(sc);
ret = e6000sw_writephy_locked(dev, phy, reg, data);
- E6000SW_UNLOCK(sc);
+ if (!locked)
+ E6000SW_UNLOCK(sc);
return (ret);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Feb 22, 12:04 AM (1 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28929481
Default Alt Text
D42466.id129721.diff (1 KB)
Attached To
Mode
D42466: e6000sw: Fix locking in miibus_{read,write}reg implementations
Attached
Detach File
Event Timeline
Log In to Comment