IB/mthca: Fix dispatch of IB_EVENT_LID_CHANGE event
authorMoni Shoua <monis@Voltaire.COM>
Wed, 28 Jan 2009 23:15:56 +0000 (15:15 -0800)
committerRoland Dreier <rolandd@cisco.com>
Wed, 28 Jan 2009 23:15:56 +0000 (15:15 -0800)
commit270b8b85134c299799dddec624ceeb5671330131
treea558f73a67af4cf9bb4f4e27cf7cd0eaa27ee2b4
parentf3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b
IB/mthca: Fix dispatch of IB_EVENT_LID_CHANGE event

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: Moni Shoua <monis@voltaire.com>
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Yossi Etigin <yosefe@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/mthca/mthca_mad.c