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 acquired again.
Cc: cy...@connect.ust.hk Bugzilla ID: 776 Signed-off-by: Chengfeng Ye <cy...@connect.ust.hk> --- drivers/net/axgbe/axgbe_phy_impl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/axgbe/axgbe_phy_impl.c b/drivers/net/axgbe/axgbe_phy_impl.c index 02236ec192..cf39095ee4 100644 --- a/drivers/net/axgbe/axgbe_phy_impl.c +++ b/drivers/net/axgbe/axgbe_phy_impl.c @@ -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; } -- 2.17.1