• Moni Shoua's avatar
    IB/mthca: Fix dispatch of IB_EVENT_LID_CHANGE event · 270b8b85
    Moni Shoua authored
    When snooping a PortInfo MAD, its client_reregister bit is checked.
    If the bit is ON then a CLIENT_REREGISTER event is dispatched,
    otherwise a LID_CHANGE event is dispatched.  This way of decision
    ignores the cases where the MAD changes the LID along with an
    instruction to reregister (so a necessary LID_CHANGE event won't be
    dispatched) or the MAD is neither of these (and an unnecessary
    LID_CHANGE event will be dispatched).
    
    This causes problems at least with IPoIB, which will do a "light"
    flush on reregister, rather than the "heavy" flush required due to a
    LID change.
    
    Fix this by dispatching a CLIENT_REREGISTER event if the
    client_reregister bit is set, but also compare the LID in the MAD to
    the current LID.  If and only if they are not identical then a
    LID_CHANGE event is dispatched.
    Signed-off-by: default avatarMoni Shoua <monis@voltaire.com>
    Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
    Signed-off-by: default avatarYossi Etigin <yosefe@voltaire.com>
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    270b8b85
mthca_mad.c 9.92 KB