summaryrefslogtreecommitdiffstats
path: root/net/rds/iw.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/rds/iw.c')
-rw-r--r--net/rds/iw.c23
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);
60static void rds_iw_add_one(struct ib_device *device) 60static 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
117err_mr: 106err_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);
122free_dev: 111free_dev:
123 kfree(rds_iwdev); 112 kfree(rds_iwdev);
124free_attr:
125 kfree(dev_attr);
126} 113}
127 114
128static void rds_iw_remove_one(struct ib_device *device, void *client_data) 115static void rds_iw_remove_one(struct ib_device *device, void *client_data)