]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
amd-xgbe: Remove use of comm_owned field
authorTom Lendacky <thomas.lendacky@amd.com>
Wed, 23 May 2018 16:38:29 +0000 (11:38 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 May 2018 20:33:00 +0000 (16:33 -0400)
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: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c

index 123ceb0540d7939b64c88fee23bf2d350403cd49..05003be89ff5cfc73669d2e31a5cacd38e1bbc89 100644 (file)
@@ -327,8 +327,6 @@ struct xgbe_phy_data {
 
        unsigned int mdio_addr;
 
-       unsigned int comm_owned;
-
        /* SFP Support */
        enum xgbe_sfp_comm sfp_comm;
        unsigned int sfp_mux_address;
@@ -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,
                             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);
 }
 
@@ -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)
 {
-       struct xgbe_phy_data *phy_data = pdata->phy_data;
-
-       phy_data->comm_owned = 0;
-
        mutex_unlock(&xgbe_phy_comm_lock);
 }
 
@@ -562,9 +550,6 @@ static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata)
        unsigned long timeout;
        unsigned int mutex_id;
 
-       if (phy_data->comm_owned)
-               return 0;
-
        /* The I2C and MDIO/GPIO bus is multiplexed between multiple devices,
         * the driver needs to take the software mutex and then the hardware
         * mutexes before being able to use the busses.
@@ -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_MDIO_MUTEX, mutex_id);
 
-               phy_data->comm_owned = 1;
                return 0;
        }