diff options
author | Steve Wise <swise@opengridcomputing.com> | 2007-11-26 12:28:44 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-01-25 17:15:26 -0500 |
commit | 7f049f2f4259e4a5c213720df1ce0c2ca095641a (patch) | |
tree | d59b130c0aa7f2600cb2c9dfd3d2b569c7bba601 | |
parent | 908cf9a565348b5a6d765d120cb189a568ea4883 (diff) |
RDMA/cxgb3: Hold rtnl_lock() around ethtool get_drvinfo call
Currently the call into cxgb3 to get the driver info is not serialized.
The iw_cxgb3 module needs to hold the rtnl_lock around the ethtool ops
call like dev_ioctl() does.
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch_provider.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c index b5436ca92e68..69b1204e05f0 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_provider.c +++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/list.h> | 39 | #include <linux/list.h> |
40 | #include <linux/spinlock.h> | 40 | #include <linux/spinlock.h> |
41 | #include <linux/ethtool.h> | 41 | #include <linux/ethtool.h> |
42 | #include <linux/rtnetlink.h> | ||
42 | 43 | ||
43 | #include <asm/io.h> | 44 | #include <asm/io.h> |
44 | #include <asm/irq.h> | 45 | #include <asm/irq.h> |
@@ -1053,7 +1054,9 @@ static ssize_t show_fw_ver(struct class_device *cdev, char *buf) | |||
1053 | struct net_device *lldev = dev->rdev.t3cdev_p->lldev; | 1054 | struct net_device *lldev = dev->rdev.t3cdev_p->lldev; |
1054 | 1055 | ||
1055 | PDBG("%s class dev 0x%p\n", __FUNCTION__, cdev); | 1056 | PDBG("%s class dev 0x%p\n", __FUNCTION__, cdev); |
1057 | rtnl_lock(); | ||
1056 | lldev->ethtool_ops->get_drvinfo(lldev, &info); | 1058 | lldev->ethtool_ops->get_drvinfo(lldev, &info); |
1059 | rtnl_unlock(); | ||
1057 | return sprintf(buf, "%s\n", info.fw_version); | 1060 | return sprintf(buf, "%s\n", info.fw_version); |
1058 | } | 1061 | } |
1059 | 1062 | ||
@@ -1065,7 +1068,9 @@ static ssize_t show_hca(struct class_device *cdev, char *buf) | |||
1065 | struct net_device *lldev = dev->rdev.t3cdev_p->lldev; | 1068 | struct net_device *lldev = dev->rdev.t3cdev_p->lldev; |
1066 | 1069 | ||
1067 | PDBG("%s class dev 0x%p\n", __FUNCTION__, cdev); | 1070 | PDBG("%s class dev 0x%p\n", __FUNCTION__, cdev); |
1071 | rtnl_lock(); | ||
1068 | lldev->ethtool_ops->get_drvinfo(lldev, &info); | 1072 | lldev->ethtool_ops->get_drvinfo(lldev, &info); |
1073 | rtnl_unlock(); | ||
1069 | return sprintf(buf, "%s\n", info.driver); | 1074 | return sprintf(buf, "%s\n", info.driver); |
1070 | } | 1075 | } |
1071 | 1076 | ||