diff options
author | Michael Brown <mcb30@ipxe.org> | 2010-09-15 23:10:15 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2010-09-16 03:30:45 +0100 |
commit | 42cf4a720cb85f71d43739b304cc1f25353f68c4 (patch) | |
tree | 5f6d9d242ae34c97dddfc580b850644edfd36d55 /src/include/ipxe/infiniband.h | |
parent | 3e8e2773de7acd47084c04205385e294c7825020 (diff) | |
download | ipxe-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.h | 7 |
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 ); |