david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[infiniband] Return status code from ib_create_mi()

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2017-03-22 10:57:06 +02:00
parent 39ef530088
commit c26c1fd07c
3 changed files with 19 additions and 16 deletions

View File

@ -127,8 +127,9 @@ ib_create_madx ( struct ib_device *ibdev, struct ib_mad_interface *mi,
extern void ib_destroy_madx ( struct ib_device *ibdev, extern void ib_destroy_madx ( struct ib_device *ibdev,
struct ib_mad_interface *mi, struct ib_mad_interface *mi,
struct ib_mad_transaction *madx ); struct ib_mad_transaction *madx );
extern struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev, extern int ib_create_mi ( struct ib_device *ibdev,
enum ib_queue_pair_type type ); enum ib_queue_pair_type type,
struct ib_mad_interface **new_mi );
extern void ib_destroy_mi ( struct ib_device *ibdev, extern void ib_destroy_mi ( struct ib_device *ibdev,
struct ib_mad_interface *mi ); struct ib_mad_interface *mi );

View File

@ -666,10 +666,9 @@ int ib_open ( struct ib_device *ibdev ) {
} }
/* Create subnet management interface */ /* Create subnet management interface */
ibdev->smi = ib_create_mi ( ibdev, IB_QPT_SMI ); if ( ( rc = ib_create_mi ( ibdev, IB_QPT_SMI, &ibdev->smi ) ) != 0 ) {
if ( ! ibdev->smi ) { DBGC ( ibdev, "IBDEV %s could not create SMI: %s\n",
DBGC ( ibdev, "IBDEV %s could not create SMI\n", ibdev->name ); ibdev->name, strerror ( rc ) );
rc = -ENOMEM;
goto err_create_smi; goto err_create_smi;
} }
@ -681,10 +680,9 @@ int ib_open ( struct ib_device *ibdev ) {
} }
/* Create general services interface */ /* Create general services interface */
ibdev->gsi = ib_create_mi ( ibdev, IB_QPT_GSI ); if ( ( rc = ib_create_mi ( ibdev, IB_QPT_GSI, &ibdev->gsi ) ) != 0 ) {
if ( ! ibdev->gsi ) { DBGC ( ibdev, "IBDEV %s could not create GSI: %s\n",
DBGC ( ibdev, "IBDEV %s could not create GSI\n", ibdev->name ); ibdev->name, strerror ( rc ) );
rc = -ENOMEM;
goto err_create_gsi; goto err_create_gsi;
} }

View File

@ -341,18 +341,21 @@ void ib_destroy_madx ( struct ib_device *ibdev __unused,
* *
* @v ibdev Infiniband device * @v ibdev Infiniband device
* @v type Queue pair type * @v type Queue pair type
* @ret mi Management agent, or NULL * @v new_mi New management interface to fill in
* @ret rc Return status code
*/ */
struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev, int ib_create_mi ( struct ib_device *ibdev, enum ib_queue_pair_type type,
enum ib_queue_pair_type type ) { struct ib_mad_interface **new_mi ) {
struct ib_mad_interface *mi; struct ib_mad_interface *mi;
const char *name; const char *name;
int rc; int rc;
/* Allocate and initialise fields */ /* Allocate and initialise fields */
mi = zalloc ( sizeof ( *mi ) ); mi = zalloc ( sizeof ( *mi ) );
if ( ! mi ) if ( ! mi ) {
rc = -ENOMEM;
goto err_alloc; goto err_alloc;
}
mi->ibdev = ibdev; mi->ibdev = ibdev;
INIT_LIST_HEAD ( &mi->madx ); INIT_LIST_HEAD ( &mi->madx );
@ -387,7 +390,8 @@ struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev,
/* Fill receive ring */ /* Fill receive ring */
ib_refill_recv ( ibdev, mi->qp ); ib_refill_recv ( ibdev, mi->qp );
return mi; *new_mi = mi;
return 0;
err_modify_qp: err_modify_qp:
ib_destroy_qp ( ibdev, mi->qp ); ib_destroy_qp ( ibdev, mi->qp );
@ -396,7 +400,7 @@ struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev,
err_create_cq: err_create_cq:
free ( mi ); free ( mi );
err_alloc: err_alloc:
return NULL; return rc;
} }
/** /**