diff options
Diffstat (limited to 'net/rds/iw.c')
-rw-r--r-- | net/rds/iw.c | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/net/rds/iw.c b/net/rds/iw.c index 576f1825fc55..f4a9fff829e0 100644 --- a/net/rds/iw.c +++ b/net/rds/iw.c | |||
@@ -60,30 +60,20 @@ LIST_HEAD(iw_nodev_conns); | |||
60 | static void rds_iw_add_one(struct ib_device *device) | 60 | static void rds_iw_add_one(struct ib_device *device) |
61 | { | 61 | { |
62 | struct rds_iw_device *rds_iwdev; | 62 | struct rds_iw_device *rds_iwdev; |
63 | struct ib_device_attr *dev_attr; | ||
64 | 63 | ||
65 | /* Only handle iwarp devices */ | 64 | /* Only handle iwarp devices */ |
66 | if (device->node_type != RDMA_NODE_RNIC) | 65 | if (device->node_type != RDMA_NODE_RNIC) |
67 | return; | 66 | return; |
68 | 67 | ||
69 | dev_attr = kmalloc(sizeof *dev_attr, GFP_KERNEL); | ||
70 | if (!dev_attr) | ||
71 | return; | ||
72 | |||
73 | if (ib_query_device(device, dev_attr)) { | ||
74 | rdsdebug("Query device failed for %s\n", device->name); | ||
75 | goto free_attr; | ||
76 | } | ||
77 | |||
78 | rds_iwdev = kmalloc(sizeof *rds_iwdev, GFP_KERNEL); | 68 | rds_iwdev = kmalloc(sizeof *rds_iwdev, GFP_KERNEL); |
79 | if (!rds_iwdev) | 69 | if (!rds_iwdev) |
80 | goto free_attr; | 70 | return; |
81 | 71 | ||
82 | spin_lock_init(&rds_iwdev->spinlock); | 72 | spin_lock_init(&rds_iwdev->spinlock); |
83 | 73 | ||
84 | rds_iwdev->dma_local_lkey = !!(dev_attr->device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY); | 74 | rds_iwdev->dma_local_lkey = !!(device->attrs.device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY); |
85 | rds_iwdev->max_wrs = dev_attr->max_qp_wr; | 75 | rds_iwdev->max_wrs = device->attrs.max_qp_wr; |
86 | rds_iwdev->max_sge = min(dev_attr->max_sge, RDS_IW_MAX_SGE); | 76 | rds_iwdev->max_sge = min(device->attrs.max_sge, RDS_IW_MAX_SGE); |
87 | 77 | ||
88 | rds_iwdev->dev = device; | 78 | rds_iwdev->dev = device; |
89 | rds_iwdev->pd = ib_alloc_pd(device); | 79 | rds_iwdev->pd = ib_alloc_pd(device); |
@@ -111,8 +101,7 @@ static void rds_iw_add_one(struct ib_device *device) | |||
111 | list_add_tail(&rds_iwdev->list, &rds_iw_devices); | 101 | list_add_tail(&rds_iwdev->list, &rds_iw_devices); |
112 | 102 | ||
113 | ib_set_client_data(device, &rds_iw_client, rds_iwdev); | 103 | ib_set_client_data(device, &rds_iw_client, rds_iwdev); |
114 | 104 | return; | |
115 | goto free_attr; | ||
116 | 105 | ||
117 | err_mr: | 106 | err_mr: |
118 | if (rds_iwdev->mr) | 107 | if (rds_iwdev->mr) |
@@ -121,8 +110,6 @@ err_pd: | |||
121 | ib_dealloc_pd(rds_iwdev->pd); | 110 | ib_dealloc_pd(rds_iwdev->pd); |
122 | free_dev: | 111 | free_dev: |
123 | kfree(rds_iwdev); | 112 | kfree(rds_iwdev); |
124 | free_attr: | ||
125 | kfree(dev_attr); | ||
126 | } | 113 | } |
127 | 114 | ||
128 | static void rds_iw_remove_one(struct ib_device *device, void *client_data) | 115 | static void rds_iw_remove_one(struct ib_device *device, void *client_data) |