linux/drivers/infiniband/hw/qib
Mike Marciniszyn f3bdf34465 IB/qib: Fix lockdep splat in qib_alloc_lkey()
The following backtrace is reported with CONFIG_PROVE_RCU:

    drivers/infiniband/hw/qib/qib_keys.c:64 suspicious rcu_dereference_check() usage!
    other info that might help us debug this:
    rcu_scheduler_active = 1, debug_locks = 1
    4 locks held by kworker/0:1/56:
    #0:  (events){.+.+.+}, at: [<ffffffff8107a4f5>] process_one_work+0x165/0x4a0
    #1:  ((&wfc.work)){+.+.+.}, at: [<ffffffff8107a4f5>] process_one_work+0x165/0x4a0
    #2:  (device_mutex){+.+.+.}, at: [<ffffffffa0148dd8>] ib_register_device+0x38/0x220 [ib_core]
    #3:  (&(&dev->lk_table.lock)->rlock){......}, at: [<ffffffffa017e81c>] qib_alloc_lkey+0x3c/0x1b0 [ib_qib]

    stack backtrace:
    Pid: 56, comm: kworker/0:1 Not tainted 3.10.0-rc1+ #6
    Call Trace:
    [<ffffffff810c0b85>] lockdep_rcu_suspicious+0xe5/0x130
    [<ffffffffa017e8e1>] qib_alloc_lkey+0x101/0x1b0 [ib_qib]
    [<ffffffffa0184886>] qib_get_dma_mr+0xa6/0xd0 [ib_qib]
    [<ffffffffa01461aa>] ib_get_dma_mr+0x1a/0x50 [ib_core]
    [<ffffffffa01678dc>] ib_mad_port_open+0x12c/0x390 [ib_mad]
    [<ffffffff810c2c55>] ?  trace_hardirqs_on_caller+0x105/0x190
    [<ffffffffa0167b92>] ib_mad_init_device+0x52/0x110 [ib_mad]
    [<ffffffffa01917c0>] ?  sl2vl_attr_show+0x30/0x30 [ib_qib]
    [<ffffffffa0148f49>] ib_register_device+0x1a9/0x220 [ib_core]
    [<ffffffffa01b1685>] qib_register_ib_device+0x735/0xa40 [ib_qib]
    [<ffffffff8106ba98>] ? mod_timer+0x118/0x220
    [<ffffffffa017d425>] qib_init_one+0x1e5/0x400 [ib_qib]
    [<ffffffff812ce86e>] local_pci_probe+0x4e/0x90
    [<ffffffff81078118>] work_for_cpu_fn+0x18/0x30
    [<ffffffff8107a566>] process_one_work+0x1d6/0x4a0
    [<ffffffff8107a4f5>] ?  process_one_work+0x165/0x4a0
    [<ffffffff8107c9c9>] worker_thread+0x119/0x370
    [<ffffffff8107c8b0>] ?  manage_workers+0x180/0x180
    [<ffffffff8108294e>] kthread+0xee/0x100
    [<ffffffff81082860>] ?  __init_kthread_worker+0x70/0x70
    [<ffffffff815c04ac>] ret_from_fork+0x7c/0xb0
    [<ffffffff81082860>] ?  __init_kthread_worker+0x70/0x70

Per Documentation/RCU/lockdep-splat.txt, the code now uses rcu_access_pointer()
vs. rcu_dereference().

Reported-by: Jay Fenlason <fenlason@redhat.com>
Reviewed-by: Dean Luick <dean.luick@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
2013-06-04 17:05:20 -07:00
..
Kconfig IB/qib: change QLogic to Intel 2013-03-22 18:07:04 -07:00
Makefile
qib.h
qib_6120_regs.h
qib_7220.h
qib_7220_regs.h
qib_7322_regs.h
qib_common.h
qib_cq.c
qib_diag.c
qib_dma.c
qib_driver.c IB/qib: change QLogic to Intel 2013-03-22 18:07:04 -07:00
qib_eeprom.c
qib_file_ops.c aio: don't include aio.h in sched.h 2013-05-07 20:16:25 -07:00
qib_fs.c fs: Limit sys_mount to only request filesystem modules. 2013-03-03 19:36:31 -08:00
qib_iba6120.c IB/qib: change QLogic to Intel 2013-03-22 18:07:04 -07:00
qib_iba7220.c
qib_iba7322.c
qib_init.c IB/qib: change QLogic to Intel 2013-03-22 18:07:04 -07:00
qib_intr.c
qib_keys.c IB/qib: Fix lockdep splat in qib_alloc_lkey() 2013-06-04 17:05:20 -07:00
qib_mad.c
qib_mad.h
qib_mmap.c
qib_mr.c
qib_pcie.c
qib_pio_copy.c
qib_qp.c IB/qib: Fix QP locate/remove race 2013-02-14 17:04:18 -08:00
qib_qsfp.c
qib_qsfp.h
qib_rc.c
qib_ruc.c
qib_sd7220.c firmware,IB/qib: revert firmware file move 2013-04-05 12:19:39 -07:00
qib_sdma.c
qib_srq.c
qib_sysfs.c IB/qib: Correct qib_verbs_register_sysfs() error handling 2013-04-16 23:04:36 -07:00
qib_twsi.c
qib_tx.c
qib_uc.c
qib_ud.c
qib_user_pages.c
qib_user_sdma.c
qib_user_sdma.h
qib_verbs.c IB/qib: Correct qib_verbs_register_sysfs() error handling 2013-04-16 23:04:36 -07:00
qib_verbs.h
qib_verbs_mcast.c
qib_wc_ppc64.c
qib_wc_x86_64.c