Browse Source

[infiniband] Remove the return status code from MAD handlers

MAD handlers have to set the status fields within the MAD itself
anyway, in order to provide a meaningful response MAD; the additional
gPXE return status code is just noise.

Note that we probably don't need to ever explicitly set the status to
IB_MGMT_STATUS_OK, since it should already have this value from the
request.  (By not explicitly setting the status in this way, we can
safely have ib_sma_set_xxx() call ib_sma_get_xxx() in order to
generate the GetResponse MAD without worrying that ib_sma_get_xxx()
will clear any error status set by ib_sma_set_xxx().)
tags/v0.9.8
Michael Brown 15 years ago
parent
commit
94876f4bb6

+ 1
- 2
src/include/gpxe/ib_gma.h View File

34
 	 *
34
 	 *
35
 	 * @v gma	General management agent
35
 	 * @v gma	General management agent
36
 	 * @v mad	MAD
36
 	 * @v mad	MAD
37
-	 * @ret rc	Return status code
38
 	 *
37
 	 *
39
 	 * The handler should modify the MAD as applicable.  If the
38
 	 * The handler should modify the MAD as applicable.  If the
40
 	 * handler returns with a non-zero value in the MAD's @c
39
 	 * handler returns with a non-zero value in the MAD's @c
41
 	 * method field, it will be sent as a response.
40
 	 * method field, it will be sent as a response.
42
 	 */
41
 	 */
43
-	int ( * handle ) ( struct ib_gma *gma, union ib_mad *mad );
42
+	void ( * handle ) ( struct ib_gma *gma, union ib_mad *mad );
44
 };
43
 };
45
 
44
 
46
 /** GMA attribute handlers */
45
 /** GMA attribute handlers */

+ 25
- 47
src/net/infiniband/ib_gma.c View File

86
  *
86
  *
87
  * @v gma		General management agent
87
  * @v gma		General management agent
88
  * @v mad		MAD
88
  * @v mad		MAD
89
- * @ret rc		Return status code
90
  */
89
  */
91
-static int ib_sma_get_node_info ( struct ib_gma *gma,
92
-				  union ib_mad *mad ) {
90
+static void ib_sma_get_node_info ( struct ib_gma *gma,
91
+				   union ib_mad *mad ) {
93
 	struct ib_device *ibdev = gma->ibdev;
92
 	struct ib_device *ibdev = gma->ibdev;
94
 	struct ib_node_info *node_info = &mad->smp.smp_data.node_info;
93
 	struct ib_node_info *node_info = &mad->smp.smp_data.node_info;
95
 
94
 
104
 		 sizeof ( node_info->port_guid ) );
103
 		 sizeof ( node_info->port_guid ) );
105
 	node_info->partition_cap = htons ( 1 );
104
 	node_info->partition_cap = htons ( 1 );
106
 	node_info->local_port_num = ibdev->port;
105
 	node_info->local_port_num = ibdev->port;
107
-
108
-	return 0;
109
 }
106
 }
110
 
107
 
111
 /**
108
 /**
113
  *
110
  *
114
  * @v gma		General management agent
111
  * @v gma		General management agent
115
  * @v mad		MAD
112
  * @v mad		MAD
116
- * @ret rc		Return status code
117
  */
113
  */
118
-static int ib_sma_get_node_desc ( struct ib_gma *gma,
119
-				  union ib_mad *mad ) {
114
+static void ib_sma_get_node_desc ( struct ib_gma *gma,
115
+				   union ib_mad *mad ) {
120
 	struct ib_device *ibdev = gma->ibdev;
116
 	struct ib_device *ibdev = gma->ibdev;
121
 	struct ib_node_desc *node_desc = &mad->smp.smp_data.node_desc;
117
 	struct ib_node_desc *node_desc = &mad->smp.smp_data.node_desc;
122
 	struct ib_gid_half *guid = &ibdev->gid.u.half[1];
118
 	struct ib_gid_half *guid = &ibdev->gid.u.half[1];
127
 		   guid->bytes[0], guid->bytes[1], guid->bytes[2],
123
 		   guid->bytes[0], guid->bytes[1], guid->bytes[2],
128
 		   guid->bytes[3], guid->bytes[4], guid->bytes[5],
124
 		   guid->bytes[3], guid->bytes[4], guid->bytes[5],
129
 		   guid->bytes[6], guid->bytes[7], ibdev->dev->name );
125
 		   guid->bytes[6], guid->bytes[7], ibdev->dev->name );
130
-
131
-	return 0;
132
 }
126
 }
133
 
127
 
134
 /**
128
 /**
136
  *
130
  *
137
  * @v gma		General management agent
131
  * @v gma		General management agent
138
  * @v mad		MAD
132
  * @v mad		MAD
139
- * @ret rc		Return status code
140
  */
133
  */
141
-static int ib_sma_get_guid_info ( struct ib_gma *gma,
142
-				  union ib_mad *mad ) {
134
+static void ib_sma_get_guid_info ( struct ib_gma *gma,
135
+				   union ib_mad *mad ) {
143
 	struct ib_device *ibdev = gma->ibdev;
136
 	struct ib_device *ibdev = gma->ibdev;
144
 	struct ib_guid_info *guid_info = &mad->smp.smp_data.guid_info;
137
 	struct ib_guid_info *guid_info = &mad->smp.smp_data.guid_info;
145
 
138
 
146
 	memset ( guid_info, 0, sizeof ( *guid_info ) );
139
 	memset ( guid_info, 0, sizeof ( *guid_info ) );
147
 	memcpy ( guid_info->guid[0], &ibdev->gid.u.half[1],
140
 	memcpy ( guid_info->guid[0], &ibdev->gid.u.half[1],
148
 		 sizeof ( guid_info->guid[0] ) );
141
 		 sizeof ( guid_info->guid[0] ) );
149
-
150
-	return 0;
151
 }
142
 }
152
 
143
 
153
 /**
144
 /**
155
  *
146
  *
156
  * @v gma		General management agent
147
  * @v gma		General management agent
157
  * @v mad		MAD
148
  * @v mad		MAD
158
- * @ret rc		Return status code
159
  */
149
  */
160
-static int ib_sma_get_port_info ( struct ib_gma *gma,
161
-				  union ib_mad *mad ) {
150
+static void ib_sma_get_port_info ( struct ib_gma *gma,
151
+				   union ib_mad *mad ) {
162
 	struct ib_device *ibdev = gma->ibdev;
152
 	struct ib_device *ibdev = gma->ibdev;
163
 	struct ib_port_info *port_info = &mad->smp.smp_data.port_info;
153
 	struct ib_port_info *port_info = &mad->smp.smp_data.port_info;
164
 
154
 
184
 	port_info->init_type_reply__mtu_cap = IB_MTU_2048;
174
 	port_info->init_type_reply__mtu_cap = IB_MTU_2048;
185
 	port_info->operational_vls__enforcement = ( IB_VL_0 << 4 );
175
 	port_info->operational_vls__enforcement = ( IB_VL_0 << 4 );
186
 	port_info->guid_cap = 1;
176
 	port_info->guid_cap = 1;
187
-
188
-	return 0;
189
 }
177
 }
190
 
178
 
191
 /**
179
 /**
193
  *
181
  *
194
  * @v gma		General management agent
182
  * @v gma		General management agent
195
  * @v mad		MAD
183
  * @v mad		MAD
196
- * @ret rc		Return status code
197
  */
184
  */
198
-static int ib_sma_set_port_info ( struct ib_gma *gma,
199
-				  union ib_mad *mad ) {
185
+static void ib_sma_set_port_info ( struct ib_gma *gma,
186
+				   union ib_mad *mad ) {
200
 	struct ib_device *ibdev = gma->ibdev;
187
 	struct ib_device *ibdev = gma->ibdev;
201
 	const struct ib_port_info *port_info = &mad->smp.smp_data.port_info;
188
 	const struct ib_port_info *port_info = &mad->smp.smp_data.port_info;
202
 	int rc;
189
 	int rc;
214
 			htons ( IB_MGMT_STATUS_UNSUPPORTED_METHOD_ATTR );
201
 			htons ( IB_MGMT_STATUS_UNSUPPORTED_METHOD_ATTR );
215
 	}
202
 	}
216
 
203
 
217
-	return ib_sma_get_port_info ( gma, mad );
204
+	ib_sma_get_port_info ( gma, mad );
218
 }
205
 }
219
 
206
 
220
 /**
207
 /**
222
  *
209
  *
223
  * @v gma		General management agent
210
  * @v gma		General management agent
224
  * @v mad		MAD
211
  * @v mad		MAD
225
- * @ret rc		Return status code
226
  */
212
  */
227
-static int ib_sma_get_pkey_table ( struct ib_gma *gma,
228
-				   union ib_mad *mad ) {
213
+static void ib_sma_get_pkey_table ( struct ib_gma *gma,
214
+				    union ib_mad *mad ) {
229
 	struct ib_device *ibdev = gma->ibdev;
215
 	struct ib_device *ibdev = gma->ibdev;
230
 	struct ib_pkey_table *pkey_table = &mad->smp.smp_data.pkey_table;
216
 	struct ib_pkey_table *pkey_table = &mad->smp.smp_data.pkey_table;
231
 
217
 
232
 	memset ( pkey_table, 0, sizeof ( *pkey_table ) );
218
 	memset ( pkey_table, 0, sizeof ( *pkey_table ) );
233
 	pkey_table->pkey[0] = htons ( ibdev->pkey );
219
 	pkey_table->pkey[0] = htons ( ibdev->pkey );
234
-
235
-	return 0;
236
 }
220
 }
237
 
221
 
238
 /**
222
 /**
240
  *
224
  *
241
  * @v gma		General management agent
225
  * @v gma		General management agent
242
  * @v mad		MAD
226
  * @v mad		MAD
243
- * @ret rc		Return status code
244
  */
227
  */
245
-static int ib_sma_set_pkey_table ( struct ib_gma *gma,
246
-				   union ib_mad *mad ) {
228
+static void ib_sma_set_pkey_table ( struct ib_gma *gma,
229
+				    union ib_mad *mad ) {
247
 	struct ib_device *ibdev = gma->ibdev;
230
 	struct ib_device *ibdev = gma->ibdev;
248
 	struct ib_pkey_table *pkey_table = &mad->smp.smp_data.pkey_table;
231
 	struct ib_pkey_table *pkey_table = &mad->smp.smp_data.pkey_table;
249
 
232
 
250
 	ibdev->pkey = ntohs ( pkey_table->pkey[0] );
233
 	ibdev->pkey = ntohs ( pkey_table->pkey[0] );
251
 
234
 
252
-	return ib_sma_get_pkey_table ( gma, mad );
235
+	ib_sma_get_pkey_table ( gma, mad );
253
 }
236
 }
254
 
237
 
255
 /** List of attribute handlers */
238
 /** List of attribute handlers */
331
  *
314
  *
332
  * @v gma		General management agent
315
  * @v gma		General management agent
333
  * @v mad		MAD
316
  * @v mad		MAD
334
- * @ret rc		Return status code
335
  */
317
  */
336
-static int ib_handle_mad ( struct ib_gma *gma, union ib_mad *mad ) {
318
+static void ib_handle_mad ( struct ib_gma *gma, union ib_mad *mad ) {
337
 	struct ib_mad_hdr *hdr = &mad->hdr;
319
 	struct ib_mad_hdr *hdr = &mad->hdr;
338
 	struct ib_gma_handler *handler;
320
 	struct ib_gma_handler *handler;
339
 
321
 
344
 		     ( handler->method == hdr->method ) &&
326
 		     ( handler->method == hdr->method ) &&
345
 		     ( handler->attr_id == hdr->attr_id ) ) {
327
 		     ( handler->attr_id == hdr->attr_id ) ) {
346
 			hdr->method = handler->resp_method;
328
 			hdr->method = handler->resp_method;
347
-			return handler->handle ( gma, mad );
329
+			handler->handle ( gma, mad );
330
+			return;
348
 		}
331
 		}
349
 	}
332
 	}
350
 
333
 
351
 	hdr->method = IB_MGMT_METHOD_TRAP;
334
 	hdr->method = IB_MGMT_METHOD_TRAP;
352
 	hdr->status = htons ( IB_MGMT_STATUS_UNSUPPORTED_METHOD_ATTR );
335
 	hdr->status = htons ( IB_MGMT_STATUS_UNSUPPORTED_METHOD_ATTR );
353
-	return -ENOTSUP;
354
 }
336
 }
355
 
337
 
356
 /**
338
 /**
412
 		}
394
 		}
413
 	}
395
 	}
414
 
396
 
415
-	/* Handle MAD, if possible */
416
-	if ( ( rc = ib_handle_mad ( gma, mad ) ) != 0 ) {
417
-		DBGC ( gma, "GMA %p could not handle TID %08x%08x: %s\n",
418
-		       gma, ntohl ( hdr->tid[0] ), ntohl ( hdr->tid[1] ),
419
-		       strerror ( rc ) );
420
-		/* Do not abort; we may want to send an error response */
421
-	}
397
+	/* Handle MAD */
398
+	ib_handle_mad ( gma, mad );
422
 
399
 
423
 	/* Finish processing if we have no response to send */
400
 	/* Finish processing if we have no response to send */
424
 	if ( ! hdr->method )
401
 	if ( ! hdr->method )
425
 		goto out;
402
 		goto out;
426
 
403
 
427
-	DBGC ( gma, "GMA %p TX TID %08x%08x (%02x,%02x,%02x,%04x)\n", gma,
428
-	       ntohl ( hdr->tid[0] ), ntohl ( hdr->tid[1] ), hdr->mgmt_class,
429
-	       hdr->class_version, hdr->method, ntohs ( hdr->attr_id ) );
404
+	DBGC ( gma, "GMA %p TX TID %08x%08x (%02x,%02x,%02x,%04x) status "
405
+	       "%04x\n", gma, ntohl ( hdr->tid[0] ), ntohl ( hdr->tid[1] ),
406
+	       hdr->mgmt_class, hdr->class_version, hdr->method,
407
+	       ntohs ( hdr->attr_id ), ntohs ( hdr->status ) );
430
 	DBGC2_HDA ( gma, 0, mad, sizeof ( *mad ) );
408
 	DBGC2_HDA ( gma, 0, mad, sizeof ( *mad ) );
431
 
409
 
432
 	/* Set response fields for directed route SMPs */
410
 	/* Set response fields for directed route SMPs */

+ 8
- 14
src/net/infiniband/ib_mcast.c View File

139
  *
139
  *
140
  * @v gma		General management agent
140
  * @v gma		General management agent
141
  * @v mad		MAD
141
  * @v mad		MAD
142
- * @ret rc		Return status code
143
  */
142
  */
144
-static int ib_handle_mc_member_join ( struct ib_gma *gma,
145
-				      union ib_mad *mad ) {
143
+static void ib_handle_mc_member_join ( struct ib_gma *gma,
144
+				       union ib_mad *mad ) {
146
 	struct ib_device *ibdev = gma->ibdev;
145
 	struct ib_device *ibdev = gma->ibdev;
147
 	struct ib_mc_member_record *mc_member_record =
146
 	struct ib_mc_member_record *mc_member_record =
148
 		&mad->sa.sa_data.mc_member_record;
147
 		&mad->sa.sa_data.mc_member_record;
155
 	if ( mad->hdr.status != htons ( IB_MGMT_STATUS_OK ) ) {
154
 	if ( mad->hdr.status != htons ( IB_MGMT_STATUS_OK ) ) {
156
 		DBGC ( gma, "GMA %p join failed with status %04x\n",
155
 		DBGC ( gma, "GMA %p join failed with status %04x\n",
157
 		       gma, ntohs ( mad->hdr.status ) );
156
 		       gma, ntohs ( mad->hdr.status ) );
158
-		return -EINVAL;
157
+		return;
159
 	}
158
 	}
160
 
159
 
161
 	/* Extract MAD parameters */
160
 	/* Extract MAD parameters */
170
 		       ntohl ( gid->u.dwords[1] ),
169
 		       ntohl ( gid->u.dwords[1] ),
171
 		       ntohl ( gid->u.dwords[2] ),
170
 		       ntohl ( gid->u.dwords[2] ),
172
 		       ntohl ( gid->u.dwords[3] ) );
171
 		       ntohl ( gid->u.dwords[3] ) );
173
-		return -ENOENT;
172
+		return;
174
 	}
173
 	}
175
 	DBGC ( gma, "GMA %p QPN %lx joined %08x:%08x:%08x:%08x qkey %lx\n",
174
 	DBGC ( gma, "GMA %p QPN %lx joined %08x:%08x:%08x:%08x qkey %lx\n",
176
 	       gma, qp->qpn, ntohl ( gid->u.dwords[0] ),
175
 	       gma, qp->qpn, ntohl ( gid->u.dwords[0] ),
181
 	if ( ( rc = ib_modify_qp ( ibdev, qp, IB_MODIFY_QKEY, qkey ) ) != 0 ) {
180
 	if ( ( rc = ib_modify_qp ( ibdev, qp, IB_MODIFY_QKEY, qkey ) ) != 0 ) {
182
 		DBGC ( gma, "GMA %p QPN %lx could not modify qkey: %s\n",
181
 		DBGC ( gma, "GMA %p QPN %lx could not modify qkey: %s\n",
183
 		       gma, qp->qpn, strerror ( rc ) );
182
 		       gma, qp->qpn, strerror ( rc ) );
184
-		return rc;
183
+		return;
185
 	}
184
 	}
186
-
187
-	return 0;
188
 }
185
 }
189
 
186
 
190
 /**
187
 /**
192
  *
189
  *
193
  * @v gma		General management agent
190
  * @v gma		General management agent
194
  * @v mad		MAD
191
  * @v mad		MAD
195
- * @ret rc		Return status code
196
  */
192
  */
197
-static int ib_handle_mc_member_leave ( struct ib_gma *gma,
198
-				       union ib_mad *mad ) {
193
+static void ib_handle_mc_member_leave ( struct ib_gma *gma,
194
+					union ib_mad *mad ) {
199
 	struct ib_mc_member_record *mc_member_record =
195
 	struct ib_mc_member_record *mc_member_record =
200
 		&mad->sa.sa_data.mc_member_record;
196
 		&mad->sa.sa_data.mc_member_record;
201
 	struct ib_gid *gid;
197
 	struct ib_gid *gid;
204
 	if ( mad->hdr.status != htons ( IB_MGMT_STATUS_OK ) ) {
200
 	if ( mad->hdr.status != htons ( IB_MGMT_STATUS_OK ) ) {
205
 		DBGC ( gma, "GMA %p leave failed with status %04x\n",
201
 		DBGC ( gma, "GMA %p leave failed with status %04x\n",
206
 		       gma, ntohs ( mad->hdr.status ) );
202
 		       gma, ntohs ( mad->hdr.status ) );
207
-		return -EINVAL;
203
+		return;
208
 	}
204
 	}
209
 
205
 
210
 	/* Extract MAD parameters */
206
 	/* Extract MAD parameters */
212
 	DBGC ( gma, "GMA %p left %08x:%08x:%08x:%08x\n", gma,
208
 	DBGC ( gma, "GMA %p left %08x:%08x:%08x:%08x\n", gma,
213
 	       ntohl ( gid->u.dwords[0] ), ntohl ( gid->u.dwords[1] ),
209
 	       ntohl ( gid->u.dwords[0] ), ntohl ( gid->u.dwords[1] ),
214
 	       ntohl ( gid->u.dwords[2] ), ntohl ( gid->u.dwords[3] ) );
210
 	       ntohl ( gid->u.dwords[2] ), ntohl ( gid->u.dwords[3] ) );
215
-
216
-	return 0;
217
 }
211
 }
218
 
212
 
219
 /** Multicast membership record response handler */
213
 /** Multicast membership record response handler */

+ 3
- 6
src/net/infiniband/ib_pathrec.c View File

170
  *
170
  *
171
  * @v gma		General management agent
171
  * @v gma		General management agent
172
  * @v mad		MAD
172
  * @v mad		MAD
173
- * @ret rc		Return status code
174
  */
173
  */
175
-static int ib_handle_path_record ( struct ib_gma *gma,
176
-				   union ib_mad *mad ) {
174
+static void ib_handle_path_record ( struct ib_gma *gma,
175
+				    union ib_mad *mad ) {
177
 	struct ib_device *ibdev = gma->ibdev;
176
 	struct ib_device *ibdev = gma->ibdev;
178
 	struct ib_path_record *path_record = &mad->sa.sa_data.path_record;
177
 	struct ib_path_record *path_record = &mad->sa.sa_data.path_record;
179
 	struct ib_gid *dgid = &path_record->dgid;
178
 	struct ib_gid *dgid = &path_record->dgid;
186
 	if ( mad->hdr.status != htons ( IB_MGMT_STATUS_OK ) ) {
185
 	if ( mad->hdr.status != htons ( IB_MGMT_STATUS_OK ) ) {
187
 		DBGC ( gma, "GMA %p path record lookup failed with status "
186
 		DBGC ( gma, "GMA %p path record lookup failed with status "
188
 		       "%04x\n", gma, ntohs ( mad->hdr.status ) );
187
 		       "%04x\n", gma, ntohs ( mad->hdr.status ) );
189
-		return -EINVAL;
188
+		return;
190
 	}
189
 	}
191
 
190
 
192
 	/* Extract values from MAD */
191
 	/* Extract values from MAD */
209
 		cached->rate = rate;
208
 		cached->rate = rate;
210
 		cached->sl = sl;
209
 		cached->sl = sl;
211
 	}
210
 	}
212
-
213
-	return 0;
214
 }
211
 }
215
 
212
 
216
 /** Path record response handler */
213
 /** Path record response handler */

Loading…
Cancel
Save