diff options
| author | Michael Brown | 2010-09-16 04:28:41 +0200 |
|---|---|---|
| committer | Michael Brown | 2010-09-16 04:30:45 +0200 |
| commit | 14a76b59274818d60b7a634daaa3f2647ac5c6e1 (patch) | |
| tree | 04b88ec41a84f11d59df26cf8d03238b8ae92a5a /src/drivers | |
| parent | [infiniband] Always call ib_link_state_changed() in ib_smc_update() (diff) | |
| download | ipxe-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.c | 9 |
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 ); |
