• Jim Foraker's avatar
    IB/qib: Fix M_Key lease timeout handling · 6199c896
    Jim Foraker authored
    If a port has an M_Key lease set, the M_Key protect bits set to 1, and
    a SubnSet arrives with an invalid M_Key, an M_Key mismatch trap is
    generated, the lease timer begins as expected, and eventually the
    M_Key protect bits will be set back to 0 as per the spec.  However, if
    any other SMP with an invalid M_Key arrives, the lease timer is expired
    and the M_Key protect bits remain in force.
    
    This is not according to to spec.  In particular, C14-17 says that
    a lease timer that is underway is not affected by protection level
    checks (ie, at protection level 1, a SubnGet with a bad M_Key may be
    successful, but does not stop the timer), and C14-19 says that the timer
    shall stop when a valid M_Key has been received.  C14-19 is the only
    compliance statement that specifies a stopping condition for the timer.
    
    This behavior is magnified if the port's Master SM LID attribute
    points at itself.  In that case, the M_Key mismatch trap is sufficient to
    expire the timer, and the mkey lease attribute is rendered useless.
    Reviewed-by: default avatarRam Vepa <ram.vepa@qlogic.com>
    Signed-off-by: default avatarJim Foraker <foraker1@llnl.gov>
    Signed-off-by: default avatarMike Marciniszyn <mike.marciniszyn@qlogic.com>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    6199c896
qib_mad.c 61.7 KB