RDMA/nes: Make nesadapter->phy_lock usage consistent
nes_{read,write}_1G_phy_reg() are using phy_lock while nes_{read,write}_10G_phy_reg() leave that to the caller. Remove phy_lock from 1G routines and leave the locking to the caller. Add additional phy_lock calls around 1G read/write. Signed-off-by: Chien Tung <chien.tin.tung@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
这个提交包含在:
@@ -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;
|
||||
|
在新工单中引用
屏蔽一个用户