• Roland Dreier's avatar
    cxgb3: Don't call cxgb_vlan_mode until q locks are initialized · 60158e64
    Roland Dreier authored
    The driver calls cxgb_vlan_mode() from init_one().  This calls into
    synchronize_rx(), which locks all the q locks, but the q locks are not
    initialized until cxgb_up() -> setup_sge_qsets().  So move the call to
    cxgb_vlan_mode() into cxgb_up(), after the call to setup_sge_qsets().
    We also move the body of these functions up higher to avoid having to
    a forward declaration.
    
    This was found because of the lockdep warning:
    
        INFO: trying to register non-static key.
        the code is fine but needs lockdep annotation.
        turning off the locking correctness validator.
        Pid: 323, comm: work_for_cpu Not tainted 3.4.0-rc5 #28
        Call Trace:
         [<ffffffff8106e767>] register_lock_class+0x108/0x2d0
         [<ffffffff8106ff42>] __lock_acquire+0xd3/0xd06
         [<ffffffff81070fd0>] lock_acquire+0xbf/0xfe
         [<ffffffff813862a6>] _raw_spin_lock_irq+0x36/0x45
         [<ffffffffa01e71aa>] cxgb_vlan_mode+0x96/0xcb [cxgb3]
         [<ffffffffa01f90eb>] init_one+0x8c4/0x980 [cxgb3]
         [<ffffffff811fcbf0>] local_pci_probe+0x3f/0x70
         [<ffffffff81042206>] do_work_for_cpu+0x10/0x22
         [<ffffffff810482de>] kthread+0xa1/0xa9
         [<ffffffff8138e234>] kernel_thread_helper+0x4/0x10
    
    Contrary to what lockdep says, the code is not fine: we are locking an
    uninitialized spinlock.
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    60158e64
cxgb3_main.c 86.7 KB