|
@@ -36,12 +36,12 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
36
|
36
|
/**
|
37
|
37
|
* Transmit multicast group membership request
|
38
|
38
|
*
|
39
|
|
- * @v ibdev Infiniband device
|
|
39
|
+ * @v gma General management agent
|
40
|
40
|
* @v gid Multicast GID
|
41
|
41
|
* @v join Join (rather than leave) group
|
42
|
42
|
* @ret rc Return status code
|
43
|
43
|
*/
|
44
|
|
-static int ib_mc_member_request ( struct ib_device *ibdev, struct ib_gid *gid,
|
|
44
|
+static int ib_mc_member_request ( struct ib_gma *gma, struct ib_gid *gid,
|
45
|
45
|
int join ) {
|
46
|
46
|
union ib_mad mad;
|
47
|
47
|
struct ib_mad_sa *sa = &mad.sa;
|
|
@@ -61,14 +61,13 @@ static int ib_mc_member_request ( struct ib_device *ibdev, struct ib_gid *gid,
|
61
|
61
|
sa->sa_data.mc_member_record.scope__join_state = 1;
|
62
|
62
|
memcpy ( &sa->sa_data.mc_member_record.mgid, gid,
|
63
|
63
|
sizeof ( sa->sa_data.mc_member_record.mgid ) );
|
64
|
|
- memcpy ( &sa->sa_data.mc_member_record.port_gid, &ibdev->gid,
|
|
64
|
+ memcpy ( &sa->sa_data.mc_member_record.port_gid, &gma->ibdev->gid,
|
65
|
65
|
sizeof ( sa->sa_data.mc_member_record.port_gid ) );
|
66
|
66
|
|
67
|
67
|
/* Issue multicast membership record request */
|
68
|
|
- if ( ( rc = ib_gma_request ( &ibdev->gma, &mad, NULL,
|
69
|
|
- join ) ) != 0 ) {
|
70
|
|
- DBGC ( ibdev, "IBDEV %p could not join group: %s\n",
|
71
|
|
- ibdev, strerror ( rc ) );
|
|
68
|
+ if ( ( rc = ib_gma_request ( gma, &mad, NULL, join ) ) != 0 ) {
|
|
69
|
+ DBGC ( gma, "GMA %p could not join group: %s\n",
|
|
70
|
+ gma, strerror ( rc ) );
|
72
|
71
|
return rc;
|
73
|
72
|
}
|
74
|
73
|
|
|
@@ -85,22 +84,23 @@ static int ib_mc_member_request ( struct ib_device *ibdev, struct ib_gid *gid,
|
85
|
84
|
*/
|
86
|
85
|
int ib_mcast_join ( struct ib_device *ibdev, struct ib_queue_pair *qp,
|
87
|
86
|
struct ib_gid *gid ) {
|
|
87
|
+ struct ib_gma *gma = &ibdev->gma;
|
88
|
88
|
int rc;
|
89
|
89
|
|
90
|
|
- DBGC ( ibdev, "IBDEV %p QPN %lx joining %08x:%08x:%08x:%08x\n",
|
91
|
|
- ibdev, qp->qpn, ntohl ( gid->u.dwords[0] ),
|
|
90
|
+ DBGC ( gma, "GMA %p QPN %lx joining %08x:%08x:%08x:%08x\n",
|
|
91
|
+ gma, qp->qpn, ntohl ( gid->u.dwords[0] ),
|
92
|
92
|
ntohl ( gid->u.dwords[1] ), ntohl ( gid->u.dwords[2] ),
|
93
|
93
|
ntohl ( gid->u.dwords[3] ) );
|
94
|
94
|
|
95
|
95
|
/* Attach queue pair to multicast GID */
|
96
|
96
|
if ( ( rc = ib_mcast_attach ( ibdev, qp, gid ) ) != 0 ) {
|
97
|
|
- DBGC ( ibdev, "IBDEV %p could not attach: %s\n",
|
98
|
|
- ibdev, strerror ( rc ) );
|
|
97
|
+ DBGC ( gma, "GMA %p could not attach: %s\n",
|
|
98
|
+ gma, strerror ( rc ) );
|
99
|
99
|
goto err_mcast_attach;
|
100
|
100
|
}
|
101
|
101
|
|
102
|
102
|
/* Initiate multicast membership join */
|
103
|
|
- if ( ( rc = ib_mc_member_request ( ibdev, gid, 1 ) ) != 0 )
|
|
103
|
+ if ( ( rc = ib_mc_member_request ( gma, gid, 1 ) ) != 0 )
|
104
|
104
|
goto err_mc_member_record;
|
105
|
105
|
|
106
|
106
|
return 0;
|
|
@@ -120,9 +120,10 @@ int ib_mcast_join ( struct ib_device *ibdev, struct ib_queue_pair *qp,
|
120
|
120
|
*/
|
121
|
121
|
void ib_mcast_leave ( struct ib_device *ibdev, struct ib_queue_pair *qp,
|
122
|
122
|
struct ib_gid *gid ) {
|
|
123
|
+ struct ib_gma *gma = &ibdev->gma;
|
123
|
124
|
|
124
|
|
- DBGC ( ibdev, "IBDEV %p QPN %lx leaving %08x:%08x:%08x:%08x\n",
|
125
|
|
- ibdev, qp->qpn, ntohl ( gid->u.dwords[0] ),
|
|
125
|
+ DBGC ( gma, "GMA %p QPN %lx leaving %08x:%08x:%08x:%08x\n",
|
|
126
|
+ gma, qp->qpn, ntohl ( gid->u.dwords[0] ),
|
126
|
127
|
ntohl ( gid->u.dwords[1] ), ntohl ( gid->u.dwords[2] ),
|
127
|
128
|
ntohl ( gid->u.dwords[3] ) );
|
128
|
129
|
|
|
@@ -130,18 +131,19 @@ void ib_mcast_leave ( struct ib_device *ibdev, struct ib_queue_pair *qp,
|
130
|
131
|
ib_mcast_detach ( ibdev, qp, gid );
|
131
|
132
|
|
132
|
133
|
/* Initiate multicast membership leave */
|
133
|
|
- ib_mc_member_request ( ibdev, gid, 0 );
|
|
134
|
+ ib_mc_member_request ( gma, gid, 0 );
|
134
|
135
|
}
|
135
|
136
|
|
136
|
137
|
/**
|
137
|
138
|
* Handle multicast membership record join response
|
138
|
139
|
*
|
139
|
|
- * @v ibdev Infiniband device
|
|
140
|
+ * @v gma General management agent
|
140
|
141
|
* @v mad MAD
|
141
|
142
|
* @ret rc Return status code
|
142
|
143
|
*/
|
143
|
|
-static int ib_handle_mc_member_join ( struct ib_device *ibdev,
|
|
144
|
+static int ib_handle_mc_member_join ( struct ib_gma *gma,
|
144
|
145
|
union ib_mad *mad ) {
|
|
146
|
+ struct ib_device *ibdev = gma->ibdev;
|
145
|
147
|
struct ib_mc_member_record *mc_member_record =
|
146
|
148
|
&mad->sa.sa_data.mc_member_record;
|
147
|
149
|
struct ib_queue_pair *qp;
|
|
@@ -151,8 +153,8 @@ static int ib_handle_mc_member_join ( struct ib_device *ibdev,
|
151
|
153
|
|
152
|
154
|
/* Ignore if not a success */
|
153
|
155
|
if ( mad->hdr.status != htons ( IB_MGMT_STATUS_OK ) ) {
|
154
|
|
- DBGC ( ibdev, "IBDEV %p join failed with status %04x\n",
|
155
|
|
- ibdev, ntohs ( mad->hdr.status ) );
|
|
156
|
+ DBGC ( gma, "GMA %p join failed with status %04x\n",
|
|
157
|
+ gma, ntohs ( mad->hdr.status ) );
|
156
|
158
|
return -EINVAL;
|
157
|
159
|
}
|
158
|
160
|
|
|
@@ -163,24 +165,22 @@ static int ib_handle_mc_member_join ( struct ib_device *ibdev,
|
163
|
165
|
/* Locate matching queue pair */
|
164
|
166
|
qp = ib_find_qp_mgid ( ibdev, gid );
|
165
|
167
|
if ( ! qp ) {
|
166
|
|
- DBGC ( ibdev, "IBDEV %p has no QP to join "
|
167
|
|
- "%08x:%08x:%08x:%08x\n", ibdev,
|
168
|
|
- ntohl ( gid->u.dwords[0] ),
|
|
168
|
+ DBGC ( gma, "GMA %p has no QP to join %08x:%08x:%08x:%08x\n",
|
|
169
|
+ gma, ntohl ( gid->u.dwords[0] ),
|
169
|
170
|
ntohl ( gid->u.dwords[1] ),
|
170
|
171
|
ntohl ( gid->u.dwords[2] ),
|
171
|
172
|
ntohl ( gid->u.dwords[3] ) );
|
172
|
173
|
return -ENOENT;
|
173
|
174
|
}
|
174
|
|
- DBGC ( ibdev, "IBDEV %p QPN %lx joined %08x:%08x:%08x:%08x qkey "
|
175
|
|
- "%lx\n", ibdev, qp->qpn,
|
176
|
|
- ntohl ( gid->u.dwords[0] ), ntohl ( gid->u.dwords[1] ),
|
177
|
|
- ntohl ( gid->u.dwords[2] ), ntohl ( gid->u.dwords[3] ),
|
178
|
|
- qkey );
|
|
175
|
+ DBGC ( gma, "GMA %p QPN %lx joined %08x:%08x:%08x:%08x qkey %lx\n",
|
|
176
|
+ gma, qp->qpn, ntohl ( gid->u.dwords[0] ),
|
|
177
|
+ ntohl ( gid->u.dwords[1] ), ntohl ( gid->u.dwords[2] ),
|
|
178
|
+ ntohl ( gid->u.dwords[3] ), qkey );
|
179
|
179
|
|
180
|
180
|
/* Set queue key */
|
181
|
181
|
if ( ( rc = ib_modify_qp ( ibdev, qp, IB_MODIFY_QKEY, qkey ) ) != 0 ) {
|
182
|
|
- DBGC ( ibdev, "IBDEV %p QPN %lx could not modify qkey: %s\n",
|
183
|
|
- ibdev, qp->qpn, strerror ( rc ) );
|
|
182
|
+ DBGC ( gma, "GMA %p QPN %lx could not modify qkey: %s\n",
|
|
183
|
+ gma, qp->qpn, strerror ( rc ) );
|
184
|
184
|
return rc;
|
185
|
185
|
}
|
186
|
186
|
|
|
@@ -190,11 +190,11 @@ static int ib_handle_mc_member_join ( struct ib_device *ibdev,
|
190
|
190
|
/**
|
191
|
191
|
* Handle multicast membership record leave response
|
192
|
192
|
*
|
193
|
|
- * @v ibdev Infiniband device
|
|
193
|
+ * @v gma General management agent
|
194
|
194
|
* @v mad MAD
|
195
|
195
|
* @ret rc Return status code
|
196
|
196
|
*/
|
197
|
|
-static int ib_handle_mc_member_leave ( struct ib_device *ibdev,
|
|
197
|
+static int ib_handle_mc_member_leave ( struct ib_gma *gma,
|
198
|
198
|
union ib_mad *mad ) {
|
199
|
199
|
struct ib_mc_member_record *mc_member_record =
|
200
|
200
|
&mad->sa.sa_data.mc_member_record;
|
|
@@ -202,14 +202,14 @@ static int ib_handle_mc_member_leave ( struct ib_device *ibdev,
|
202
|
202
|
|
203
|
203
|
/* Ignore if not a success */
|
204
|
204
|
if ( mad->hdr.status != htons ( IB_MGMT_STATUS_OK ) ) {
|
205
|
|
- DBGC ( ibdev, "IBDEV %p leave failed with status %04x\n",
|
206
|
|
- ibdev, ntohs ( mad->hdr.status ) );
|
|
205
|
+ DBGC ( gma, "GMA %p leave failed with status %04x\n",
|
|
206
|
+ gma, ntohs ( mad->hdr.status ) );
|
207
|
207
|
return -EINVAL;
|
208
|
208
|
}
|
209
|
209
|
|
210
|
210
|
/* Extract MAD parameters */
|
211
|
211
|
gid = &mc_member_record->mgid;
|
212
|
|
- DBGC ( ibdev, "IBDEV %p left %08x:%08x:%08x:%08x\n", ibdev,
|
|
212
|
+ DBGC ( gma, "GMA %p left %08x:%08x:%08x:%08x\n", gma,
|
213
|
213
|
ntohl ( gid->u.dwords[0] ), ntohl ( gid->u.dwords[1] ),
|
214
|
214
|
ntohl ( gid->u.dwords[2] ), ntohl ( gid->u.dwords[3] ) );
|
215
|
215
|
|
|
@@ -217,7 +217,7 @@ static int ib_handle_mc_member_leave ( struct ib_device *ibdev,
|
217
|
217
|
}
|
218
|
218
|
|
219
|
219
|
/** Multicast membership record response handler */
|
220
|
|
-struct ib_mad_handler ib_mc_member_record_handlers[] __ib_mad_handler = {
|
|
220
|
+struct ib_gma_handler ib_mc_member_record_handlers[] __ib_gma_handler = {
|
221
|
221
|
{
|
222
|
222
|
.mgmt_class = IB_MGMT_CLASS_SUBN_ADM,
|
223
|
223
|
.class_version = IB_SA_CLASS_VERSION,
|