Commits
Angela Stegmaier committed c4cf2512ec4
rpmsg: fix for lockdep warning in virtio rpmsg driver When a remote processor sends a RPMSG_NS_DESTROY message to the HOST, the name service endpoint callback will run, holding ept->cb_lock for the name service endpoint. The callback will destroy the requested channel, which will ultimately result in all the rpmsg client channel device endpoints also to be destroyed. During destruction of the channel's endpoint, ept->cb_lock for the channel's endpoint is locked. In this scenario, the ept->cb_lock is used in a nested fashion even though the locking is on different mutexes. This will result in a false warning from the lockdep validator when it is enabled because the lockdep deals with classes and both are the same class, although they are different instances. This issue is fixed by replacing the existing mutex_lock() calls with the mutex_lock_nested() API variation and using different subclasses for the NameService end-point and for the rpmsg channel device end-points. Following is the signature of the warning: virtio_rpmsg_bus virtio2: destroying channel rpmsg-proto addr 0x33 ============================================= [ INFO: possible recursive locking detected ] 3.14.51-00688-gea6ac1b #1 Tainted: G W --------------------------------------------- kworker/0:2/960 is trying to acquire lock: (&ept->cb_lock){+.+.+.}, at: [<c05f4e80>] __rpmsg_destroy_ept+0x48/0x8c but task is already holding lock: (&ept->cb_lock){+.+.+.}, at: [<c05f486c>] rpmsg_recv_done+0xe4/0x258 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&ept->cb_lock); lock(&ept->cb_lock); *** DEADLOCK *** May be due to missing lock nesting notation 4 locks held by kworker/0:2/960: #0: ("events"){.+.+.+}, at: [<c00528b4>] process_one_work+0x12c/0x44c #1: ((&mq->work)){+.+.+.}, at: [<c00528b4>] process_one_work+0x12c/0x44c #2: (&ept->cb_lock){+.+.+.}, at: [<c05f486c>] rpmsg_recv_done+0xe4/0x258 #3: (&__lockdep_no_validate__){......}, at: [<c040d494>] device_release_driver+0x20/0x34 stack backtrace: CPU: 0 PID: 960 Comm: kworker/0:2 Tainted: G W 3.14.51-00688-gea6ac1b #1 Workqueue: events mbox_rx_work Backtrace: [<c00126a4>] (dump_backtrace) from [<c00128bc>] (show_stack+0x18/0x1c) [<c00128a4>] (show_stack) from [<c07b8a98>] (dump_stack+0x84/0xc4) [<c07b8a14>] (dump_stack) from [<c007df84>] (__lock_acquire+0x1c08/0x1d7c) [<c007c37c>] (__lock_acquire) from [<c007e8f4>] (lock_acquire+0x70/0x84) [<c007e884>] (lock_acquire) from [<c07bbc50>] (mutex_lock_nested+0x6c/0x478) [<c07bbbe4>] (mutex_lock_nested) from [<c05f4e80>] (__rpmsg_destroy_ept+0x48/0x8c) [<c05f4e38>] (__rpmsg_destroy_ept) from [<c05f4f30>] (rpmsg_dev_remove+0x4c/0xd4) [<c05f4ee4>] (rpmsg_dev_remove) from [<c040d418>] (__device_release_driver+0x78/0xd4) [<c040d3a0>] (__device_release_driver) from [<c040d49c>] (device_release_driver+0x28/0x34) [<c040d474>] (device_release_driver) from [<c040ce4c>] (bus_remove_device+0xe8/0x114) [<c040cd64>] (bus_remove_device) from [<c040a1c8>] (device_del+0x10c/0x1a0) [<c040a0bc>] (device_del) from [<c040a270>] (device_unregister+0x14/0x28) [<c040a25c>] (device_unregister) from [<c05f473c>] (rpmsg_ns_cb+0xfc/0x148) [<c05f4640>] (rpmsg_ns_cb) from [<c05f4894>] (rpmsg_recv_done+0x10c/0x258) [<c05f4788>] (rpmsg_recv_done) from [<c039ca58>] (vring_interrupt+0x40/0x58) [<c039ca18>] (vring_interrupt) from [<c05f2024>] (rproc_vq_interrupt+0x4c/0x74) [<c05f1fd8>] (rproc_vq_interrupt) from [<c05f3634>] (omap_rproc_mbox_callback+0xcc/0xe4) [<c05f3568>] (omap_rproc_mbox_callback) from [<c05e7e7c>] (mbox_chan_received_data+0x20/0x24) [<c05e7e5c>] (mbox_chan_received_data) from [<c05e8e30>] (mbox_rx_work+0x5c/0xdc) [<c05e8dd4>] (mbox_rx_work) from [<c0052930>] (process_one_work+0x1a8/0x44c) [<c0052788>] (process_one_work) from [<c00537e0>] (worker_thread+0x140/0x3f8) [<c00536a0>] (worker_thread) from [<c0059b5c>] (kthread+0xe4/0xf8) [<c0059a78>] (kthread) from [<c000e9f0>] (ret_from_fork+0x14/0x24) Signed-off-by: Angela Stegmaier <angelabaker@ti.com> [s-anna@ti.com: flip the subclass values and other minor mods] Signed-off-by: Suman Anna <s-anna@ti.com>