Commit 0d2b5255 authored by Tom Lendacky's avatar Tom Lendacky Committed by David S. Miller

amd-xgbe: Remove use of comm_owned field

The comm_owned field can hide logic where double locking is attempted
and prevent multiple threads for the same device from accessing the
mutex properly.  Remove the comm_owned field and use the mutex API
exclusively for gaining ownership.  The current driver has been audited
and is obtaining communications ownership properly.
Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b93c3ab6
...@@ -327,8 +327,6 @@ struct xgbe_phy_data { ...@@ -327,8 +327,6 @@ struct xgbe_phy_data {
unsigned int mdio_addr; unsigned int mdio_addr;
unsigned int comm_owned;
/* SFP Support */ /* SFP Support */
enum xgbe_sfp_comm sfp_comm; enum xgbe_sfp_comm sfp_comm;
unsigned int sfp_mux_address; unsigned int sfp_mux_address;
...@@ -382,12 +380,6 @@ static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata); ...@@ -382,12 +380,6 @@ static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata);
static int xgbe_phy_i2c_xfer(struct xgbe_prv_data *pdata, static int xgbe_phy_i2c_xfer(struct xgbe_prv_data *pdata,
struct xgbe_i2c_op *i2c_op) struct xgbe_i2c_op *i2c_op)
{ {
struct xgbe_phy_data *phy_data = pdata->phy_data;
/* Be sure we own the bus */
if (WARN_ON(!phy_data->comm_owned))
return -EIO;
return pdata->i2c_if.i2c_xfer(pdata, i2c_op); return pdata->i2c_if.i2c_xfer(pdata, i2c_op);
} }
...@@ -549,10 +541,6 @@ static int xgbe_phy_sfp_get_mux(struct xgbe_prv_data *pdata) ...@@ -549,10 +541,6 @@ static int xgbe_phy_sfp_get_mux(struct xgbe_prv_data *pdata)
static void xgbe_phy_put_comm_ownership(struct xgbe_prv_data *pdata) static void xgbe_phy_put_comm_ownership(struct xgbe_prv_data *pdata)
{ {
struct xgbe_phy_data *phy_data = pdata->phy_data;
phy_data->comm_owned = 0;
mutex_unlock(&xgbe_phy_comm_lock); mutex_unlock(&xgbe_phy_comm_lock);
} }
...@@ -562,9 +550,6 @@ static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata) ...@@ -562,9 +550,6 @@ static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata)
unsigned long timeout; unsigned long timeout;
unsigned int mutex_id; unsigned int mutex_id;
if (phy_data->comm_owned)
return 0;
/* The I2C and MDIO/GPIO bus is multiplexed between multiple devices, /* The I2C and MDIO/GPIO bus is multiplexed between multiple devices,
* the driver needs to take the software mutex and then the hardware * the driver needs to take the software mutex and then the hardware
* mutexes before being able to use the busses. * mutexes before being able to use the busses.
...@@ -593,7 +578,6 @@ static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata) ...@@ -593,7 +578,6 @@ static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata)
XP_IOWRITE(pdata, XP_I2C_MUTEX, mutex_id); XP_IOWRITE(pdata, XP_I2C_MUTEX, mutex_id);
XP_IOWRITE(pdata, XP_MDIO_MUTEX, mutex_id); XP_IOWRITE(pdata, XP_MDIO_MUTEX, mutex_id);
phy_data->comm_owned = 1;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment