IPoIB: On P_Key change event, reset state properly
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Wed, 13 Feb 2008 14:23:50 +0000 (16:23 +0200)
committerRoland Dreier <rolandd@cisco.com>
Thu, 14 Feb 2008 18:15:06 +0000 (10:15 -0800)
commit167c42655cca188657aa9bb4e06d1194af3c73a5
tree52e500e426a6d4a77acdc68333c6dcae0bc342c8
parent5163dc1a645bc9ed7984fa484f1a77378c166d23
IPoIB: On P_Key change event, reset state properly

In P_Key event handling, if the old P_Key is no longer available, the
driver must call ipoib_ib_dev_stop() -- just as it does when the P_Key
is still available (see procedure __ipoib_ib_dev_flush()).

When a P_Key becomes available, the driver will perform ipoib_open(),
which assumes that the QP is in RESET, the cm_id has been
destroyed/deleted, etc.  If ipoib_ib_dev_stop() is not called as
described above, then these assumptions will be false, and the attempt
to bring the interface up will fail.

Found by Mellanox QA.

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/ipoib/ipoib_ib.c