summaryrefslogtreecommitdiffstats
path: root/src/drivers
diff options
context:
space:
mode:
authorMichael Brown2010-09-16 04:28:41 +0200
committerMichael Brown2010-09-16 04:30:45 +0200
commit14a76b59274818d60b7a634daaa3f2647ac5c6e1 (patch)
tree04b88ec41a84f11d59df26cf8d03238b8ae92a5a /src/drivers
parent[infiniband] Always call ib_link_state_changed() in ib_smc_update() (diff)
downloadipxe-14a76b59274818d60b7a634daaa3f2647ac5c6e1.tar.gz
ipxe-14a76b59274818d60b7a634daaa3f2647ac5c6e1.tar.xz
ipxe-14a76b59274818d60b7a634daaa3f2647ac5c6e1.zip
[hermon] Poll for link state changes while DOWN
No event is generated upon reaching INIT, so we must poll separately for link state changes while we remain DOWN. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/infiniband/hermon.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/drivers/infiniband/hermon.c b/src/drivers/infiniband/hermon.c
index 907865ded..06255c3a8 100644
--- a/src/drivers/infiniband/hermon.c
+++ b/src/drivers/infiniband/hermon.c
@@ -1836,6 +1836,15 @@ static void hermon_poll_eq ( struct ib_device *ibdev ) {
unsigned int eqe_idx_mask;
unsigned int event_type;
+ /* No event is generated upon reaching INIT, so we must poll
+ * separately for link state changes while we remain DOWN.
+ */
+ if ( ib_is_open ( ibdev ) &&
+ ( ibdev->port_state == IB_PORT_STATE_DOWN ) ) {
+ ib_smc_update ( ibdev, hermon_mad );
+ }
+
+ /* Poll event queue */
while ( 1 ) {
/* Look for event entry */
eqe_idx_mask = ( HERMON_NUM_EQES - 1 );