aboutsummaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/infiniband.h
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2010-09-15 23:10:15 +0100
committerMichael Brown <mcb30@ipxe.org>2010-09-16 03:30:45 +0100
commit42cf4a720cb85f71d43739b304cc1f25353f68c4 (patch)
tree5f6d9d242ae34c97dddfc580b850644edfd36d55 /src/include/ipxe/infiniband.h
parent3e8e2773de7acd47084c04205385e294c7825020 (diff)
downloadipxe-42cf4a720cb85f71d43739b304cc1f25353f68c4.tar.gz
[infiniband] Add node GUID as distinct from the first port GUID
iPXE currently uses the first port's port GUID as the node GUID, rather than using the (possibly distinct) real node GUID. This can confuse opensm during the handover to a loaded OS: it thinks the port already belongs to a different node and so discards our port information with a warning message about duplicate ports. Everything is picked up correctly on the second subnet sweep, after opensm has established that the "old" node no longer exists, but this can delay link-up unnecessarily by several seconds. Fix by using the real node GUID. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/infiniband.h')
-rw-r--r--src/include/ipxe/infiniband.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/include/ipxe/infiniband.h b/src/include/ipxe/infiniband.h
index aa67dd4ab..fc04dc873 100644
--- a/src/include/ipxe/infiniband.h
+++ b/src/include/ipxe/infiniband.h
@@ -404,7 +404,9 @@ struct ib_device {
uint8_t link_speed_enabled;
/** Link speed active */
uint8_t link_speed_active;
- /** Port GID */
+ /** Node GUID */
+ union ib_guid node_guid;
+ /** Port GID (comprising GID prefix and port GUID) */
union ib_gid gid;
/** Port LID */
uint16_t lid;
@@ -503,8 +505,7 @@ extern int ib_mcast_attach ( struct ib_device *ibdev, struct ib_queue_pair *qp,
union ib_gid *gid );
extern void ib_mcast_detach ( struct ib_device *ibdev,
struct ib_queue_pair *qp, union ib_gid *gid );
-extern int ib_get_hca_info ( struct ib_device *ibdev,
- union ib_guid *hca_guid );
+extern int ib_count_ports ( struct ib_device *ibdev );
extern int ib_set_port_info ( struct ib_device *ibdev, union ib_mad *mad );
extern int ib_set_pkey_table ( struct ib_device *ibdev, union ib_mad *mad );
extern struct ib_device * alloc_ibdev ( size_t priv_size );