net/axgbe: fix protential unreleased lock problem
Checks
Commit Message
The lock pdata->phy_mutex may not be correctly released if the function return in these two branches, which may lead to deadlock if the lock is acuired again. The patch is to fix this problem.
Cc: cyeaa@connect.ust.hk
Bugzilla ID: 776
Signed-off-by: Chengfeng Ye <cyeaa@connect.ust.hk>
---
drivers/net/axgbe/axgbe_phy_impl.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
@@ -418,8 +418,10 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port *pdata)
*/
pthread_mutex_lock(&pdata->phy_mutex);
- if (phy_data->comm_owned)
+ if (phy_data->comm_owned) {
+ pthread_mutex_unlock(&pdata->phy_mutex);
return 0;
+ }
/* Clear the mutexes */
XP_IOWRITE(pdata, XP_I2C_MUTEX, AXGBE_MUTEX_RELEASE);
@@ -444,6 +446,7 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port *pdata)
XP_IOWRITE(pdata, XP_MDIO_MUTEX, mutex_id);
phy_data->comm_owned = 1;
+ pthread_mutex_unlock(&pdata->phy_mutex);
return 0;
}