IB/ipath: Fix IB_EVENT_PORT_ERR event
The link state event calls were being generated when the SM told the SMA to change link states. This works for IB_EVENT_PORT_ACTIVE but not if the link goes down and stays down. The fix is to generate event calls from the interrupt handler when the HW link state changes. Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:

committad av
Roland Dreier

förälder
6a733cdc71
incheckning
49739b3e24
@@ -570,26 +570,16 @@ static int recv_subn_set_portinfo(struct ib_smp *smp,
|
||||
else
|
||||
goto err;
|
||||
ipath_set_linkstate(dd, lstate);
|
||||
if (flags & IPATH_LINKACTIVE) {
|
||||
event.event = IB_EVENT_PORT_ERR;
|
||||
ib_dispatch_event(&event);
|
||||
}
|
||||
break;
|
||||
case IB_PORT_ARMED:
|
||||
if (!(flags & (IPATH_LINKINIT | IPATH_LINKACTIVE)))
|
||||
break;
|
||||
ipath_set_linkstate(dd, IPATH_IB_LINKARM);
|
||||
if (flags & IPATH_LINKACTIVE) {
|
||||
event.event = IB_EVENT_PORT_ERR;
|
||||
ib_dispatch_event(&event);
|
||||
}
|
||||
break;
|
||||
case IB_PORT_ACTIVE:
|
||||
if (!(flags & IPATH_LINKARMED))
|
||||
break;
|
||||
ipath_set_linkstate(dd, IPATH_IB_LINKACTIVE);
|
||||
event.event = IB_EVENT_PORT_ACTIVE;
|
||||
ib_dispatch_event(&event);
|
||||
break;
|
||||
default:
|
||||
/* XXX We have already partially updated our state! */
|
||||
|
Referens i nytt ärende
Block a user