• Mike Marciniszyn's avatar
    IB/qib: Fix double add_timer() · 414ed90c
    Mike Marciniszyn authored
    The following panic BUG_ON occurs during qib testing:
    
        Kernel BUG at include/linux/timer.h:82
    
        RIP  [<ffffffff881f7109>] :ib_qib:start_timer+0x73/0x89
         RSP <ffffffff80425bd0>
         <0>Kernel panic - not syncing: Fatal exception
         <0>Dumping qib trace buffer from panic
        qib_set_lid INFO: IB0:1 got a lid: 0xf8
        Done dumping qib trace buffer
        BUG: warning at kernel/panic.c:137/panic() (Tainted: G
    
    The flaw is due to a missing state test when processing responses that
    results in an add_timer() call when the same timer is already queued.
    This code was executing in parallel with a QP destroy on another CPU
    that had changed the state to reset, but the missing test caused to
    response handling code to run on into the panic.
    Signed-off-by: default avatarMike Marciniszyn <mike.marciniszyn@qlogic.com>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    414ed90c
qib_rc.c 61 KB