summaryrefslogtreecommitdiffstats
path: root/src/drivers
diff options
context:
space:
mode:
authorMichael Brown2010-09-16 00:10:15 +0200
committerMichael Brown2010-09-16 04:30:45 +0200
commit42cf4a720cb85f71d43739b304cc1f25353f68c4 (patch)
tree5f6d9d242ae34c97dddfc580b850644edfd36d55 /src/drivers
parent[arbel] Poll for link state changes while DOWN (diff)
downloadipxe-42cf4a720cb85f71d43739b304cc1f25353f68c4.tar.gz
ipxe-42cf4a720cb85f71d43739b304cc1f25353f68c4.tar.xz
ipxe-42cf4a720cb85f71d43739b304cc1f25353f68c4.zip
[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/drivers')
-rw-r--r--src/drivers/infiniband/linda.c4
-rw-r--r--src/drivers/infiniband/qib7322.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/src/drivers/infiniband/linda.c b/src/drivers/infiniband/linda.c
index 12a09a047..f3987d6ee 100644
--- a/src/drivers/infiniband/linda.c
+++ b/src/drivers/infiniband/linda.c
@@ -2364,8 +2364,10 @@ static int linda_probe ( struct pci_device *pci,
goto err_init_i2c;
/* Read EEPROM parameters */
- if ( ( rc = linda_read_eeprom ( linda, &ibdev->gid.s.guid ) ) != 0 )
+ if ( ( rc = linda_read_eeprom ( linda, &ibdev->node_guid ) ) != 0 )
goto err_read_eeprom;
+ memcpy ( &ibdev->gid.s.guid, &ibdev->node_guid,
+ sizeof ( ibdev->gid.s.guid ) );
/* Initialise send datapath */
if ( ( rc = linda_init_send ( linda ) ) != 0 )
diff --git a/src/drivers/infiniband/qib7322.c b/src/drivers/infiniband/qib7322.c
index b1902cfa9..e8c63a1f4 100644
--- a/src/drivers/infiniband/qib7322.c
+++ b/src/drivers/infiniband/qib7322.c
@@ -2357,6 +2357,8 @@ static int qib7322_probe ( struct pci_device *pci,
IB_LINK_WIDTH_4X; /* 1x does not work */
ibdev->link_speed_enabled = ibdev->link_speed_supported =
IB_LINK_SPEED_SDR; /* to avoid need for link tuning */
+ memcpy ( &ibdev->node_guid, &qib7322->guid,
+ sizeof ( ibdev->node_guid ) );
memcpy ( &ibdev->gid.s.guid, &qib7322->guid,
sizeof ( ibdev->gid.s.guid ) );
assert ( ( ibdev->gid.s.guid.bytes[7] & i ) == 0 );