RDMA/nes: Make nesadapter->phy_lock usage consistent
[pandora-kernel.git] / drivers / infiniband / hw / nes / nes_nic.c
index b7c813f..9f4cadf 100644 (file)
@@ -1461,11 +1461,14 @@ static int nes_netdev_get_settings(struct net_device *netdev, struct ethtool_cmd
                        et_cmd->transceiver = XCVR_INTERNAL;
                        et_cmd->phy_address = mac_index;
                } else {
+                       unsigned long flags;
                        et_cmd->supported   = SUPPORTED_1000baseT_Full
                                            | SUPPORTED_Autoneg;
                        et_cmd->advertising = ADVERTISED_1000baseT_Full
                                            | ADVERTISED_Autoneg;
+                       spin_lock_irqsave(&nesadapter->phy_lock, flags);
                        nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data);
+                       spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
                        if (phy_data & 0x1000)
                                et_cmd->autoneg = AUTONEG_ENABLE;
                        else
@@ -1503,12 +1506,15 @@ static int nes_netdev_set_settings(struct net_device *netdev, struct ethtool_cmd
        struct nes_vnic *nesvnic = netdev_priv(netdev);
        struct nes_device *nesdev = nesvnic->nesdev;
        struct nes_adapter *nesadapter = nesdev->nesadapter;
-       u16 phy_data;
 
        if ((nesadapter->OneG_Mode) &&
            (nesadapter->phy_type[nesdev->mac_index] != NES_PHY_TYPE_PUMA_1G)) {
-               nes_read_1G_phy_reg(nesdev, 0, nesadapter->phy_index[nesdev->mac_index],
-                               &phy_data);
+               unsigned long flags;
+               u16 phy_data;
+               u8 phy_index = nesadapter->phy_index[nesdev->mac_index];
+
+               spin_lock_irqsave(&nesadapter->phy_lock, flags);
+               nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data);
                if (et_cmd->autoneg) {
                        /* Turn on Full duplex, Autoneg, and restart autonegotiation */
                        phy_data |= 0x1300;
@@ -1516,8 +1522,8 @@ static int nes_netdev_set_settings(struct net_device *netdev, struct ethtool_cmd
                        /* Turn off autoneg */
                        phy_data &= ~0x1000;
                }
-               nes_write_1G_phy_reg(nesdev, 0, nesadapter->phy_index[nesdev->mac_index],
-                               phy_data);
+               nes_write_1G_phy_reg(nesdev, 0, phy_index, phy_data);
+               spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
        }
 
        return 0;