aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSteve Wise <swise@opengridcomputing.com>2008-07-08 17:40:05 -0400
committerRoland Dreier <rolandd@cisco.com>2008-07-08 17:40:05 -0400
commit5e19cf663be534c7c15a35a86fa7ddc9f797e4f4 (patch)
tree32fa3b0fdc33698a307c60289701d27282397f8e /drivers
parent62786b9e81a2dbe9c073a2ade52d33a2627d6d85 (diff)
RDMA/cxgb3: Fix regression caused by class_device -> device conversion
The change to iwch_provider.c in commit f4e91eb4 ("IB: convert struct class_device to struct device") undid the fix done in commit 7f049f2f ("RDMA/cxgb3: Hold rtnl_lock() around ethtool get_drvinfo call"). It removed the calls to rtnl_lock() that serialized the iw_cxgb3 ethtool ops calls into the cxgb3 driver. This locking is needed to avoid messing up the internal state of the cxgb3 driver. Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/infiniband/hw/cxgb3/iwch_provider.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index 8934178a23e..95f82cfb6c5 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -1096,7 +1096,9 @@ static ssize_t show_fw_ver(struct device *dev, struct device_attribute *attr, ch
1096 struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev; 1096 struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev;
1097 1097
1098 PDBG("%s dev 0x%p\n", __func__, dev); 1098 PDBG("%s dev 0x%p\n", __func__, dev);
1099 rtnl_lock();
1099 lldev->ethtool_ops->get_drvinfo(lldev, &info); 1100 lldev->ethtool_ops->get_drvinfo(lldev, &info);
1101 rtnl_unlock();
1100 return sprintf(buf, "%s\n", info.fw_version); 1102 return sprintf(buf, "%s\n", info.fw_version);
1101} 1103}
1102 1104
@@ -1109,7 +1111,9 @@ static ssize_t show_hca(struct device *dev, struct device_attribute *attr,
1109 struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev; 1111 struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev;
1110 1112
1111 PDBG("%s dev 0x%p\n", __func__, dev); 1113 PDBG("%s dev 0x%p\n", __func__, dev);
1114 rtnl_lock();
1112 lldev->ethtool_ops->get_drvinfo(lldev, &info); 1115 lldev->ethtool_ops->get_drvinfo(lldev, &info);
1116 rtnl_unlock();
1113 return sprintf(buf, "%s\n", info.driver); 1117 return sprintf(buf, "%s\n", info.driver);
1114} 1118}
1115 1119