Tim Sell
6f562b2161
staging: unisys: visornic - prevent lock recursion after IO recovery
In the patch which changed the serverdown logic to by synchronous, we
were
mistakenly holding on to devdata->priv_lock in the call to
visornic_serverdown_complete(), which ultimately ended up recursively
attempting to grab the same lock via the path:
--> dev_close
--> visornic_close()
--> visornic_disable_with_timeout()
Evidence:
BUG: spinlock recursion on CPU#0, kworker/u2:0/1567
lock: 0xffff88002d7e4c90, .magic: dead4ead, .owner: kworker/
.owner_cpu: 0
CPU: 0 PID: 1567 Comm: kworker/u2:0 Tainted: G WC
4.2.0-rc3-ARCH+ #60
Hardware name: Dell Inc. PowerEdge T110/ , BIOS 1.23 12/15/2009
Workqueue: visorchipset_controlvm controlvm_periodic_work [visorbus]
ffff8800216a9380 ffff88002d167878 ffffffff81476874 000000000000061f
ffff88002d7e4c90 ffff88002d167898 ffffffff8109e2bc ffff88002d7e4c90
ffffffff81763d7c ffff88002d1678b8 ffffffff8109e330 ffff88002d7e4c90
Call Trace:
[<ffffffff81476874>] dump_stack+0x4f/0x73
[<ffffffff8109e2bc>] spin_dump+0x7c/0xc0
[<ffffffff8109e330>] spin_bug+0x30/0x40
[<ffffffff8109e547>] do_raw_spin_lock+0x127/0x140
[<ffffffff8147bf8b>] _raw_spin_lock_irqsave+0x4b/0x60
[<ffffffffa0168a5c>] ? visornic_disable_with_timeout.clone.2+0x3c/
[visornic]
[<ffffffff8147c639>] ? _raw_spin_unlock_bh+0x39/0x40
[<ffffffffa0168a5c>] visornic_disable_with_timeout.clone.2+0x3c/
[visornic]
[<ffffffffa0168c6e>] visornic_close+0xe/0x20 [visornic]
[<ffffffff813ae8d2>] __dev_close_many+0x92/0xe0
[<ffffffff813ae9ea>] dev_close_many+0x7a/0x110
[<ffffffff81097556>] ? down+0x16/0x50
[<ffffffff813af01f>] dev_close+0x3f/0x50
[<ffffffffa0166b61>] visornic_serverdown+0x91/0x1a0 [visornic]
[<ffffffffa0155760>] ? device_changestate_responder.clone.
[visorbus]
[<ffffffffa0166c85>] visornic_pause+0x15/0x20 [visornic]
[<ffffffffa015101f>] initiate_chipset_device_pause_resume+0x9f/0xe0
[visorbus]
[<ffffffffa0151093>] chipset_device_pause+0x13/0x20 [visorbus]
[<ffffffffa0153cbb>] device_epilog+0x12b/0x1a0 [visorbus]
[<ffffffffa015506b>] handle_command+0x72b/0x970 [visorbus]
[<ffffffffa015214e>] ? visorchannel_signalremove+0x6e/0x80
[visorbus]
[<ffffffffa0155521>] controlvm_periodic_work+0x271/0x420 [visorbus]
[<ffffffff8106cb52>] process_one_work+0x1d2/0x540
[<ffffffff8106cab9>] ? process_one_work+0x139/0x540
[<ffffffff814771b7>] ? __schedule+0x807/0xc30
[<ffffffff8106cf57>] worker_thread+0x57/0x4c0
[<ffffffff8106cf00>] ? process_scheduled_works+0x40/0x40
[<ffffffff8106cf00>] ? process_scheduled_works+0x40/0x40
[<ffffffff81073b19>] kthread+0xe9/0x110
[<ffffffff81073a30>] ? __init_kthread_worker+0x70/0x70
[<ffffffff8147cddf>] ret_from_fork+0x3f/0x70
[<ffffffff81073a30>] ? __init_kthread_worker+0x70/0x70
BUG: spinlock lockup suspected on CPU#0, kworker/u2:0/1567
Fixes: f2b70efaf48f ("staging: unisys: Make serverdown synchronous")
Signed-off-by: Tim Sell <Timothy.Sell@unisys.com>
Signed-off-by: Benjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-07-31 16:09:23 -07:00
..
2015-07-16 23:47:19 +02:00
2015-07-24 16:54:59 -07:00
2015-06-10 22:46:34 -07:00
2015-07-09 11:20:01 -07:00
2015-06-08 14:33:26 +03:00
2015-07-22 13:30:20 -06:00
2015-07-14 22:54:55 +02:00
2015-06-26 11:54:29 -07:00
2015-07-15 21:46:59 +10:00
2015-07-17 16:39:53 -07:00
2015-07-07 10:44:45 +02:00
2015-07-16 23:47:19 +02:00
2015-07-09 22:59:49 +02:00
2015-07-08 15:14:13 +08:00
2015-07-17 16:39:53 -07:00
2015-07-03 12:10:12 -07:00
2015-06-12 17:01:42 -07:00
2015-07-21 09:52:51 +02:00
2015-07-18 10:27:12 -07:00
2015-07-24 14:27:44 +10:00
2015-07-08 12:40:23 +02:00
2015-07-02 10:25:22 -07:00
2015-06-12 16:58:33 -07:00
2015-07-03 14:39:06 +02:00
2015-07-01 16:15:05 +03:00
2015-06-08 13:46:43 -07:00
2015-07-09 22:25:54 +02:00
2015-07-01 10:49:25 -07:00
2015-07-27 11:10:05 -07:00
2015-07-21 09:42:54 +02:00
2015-07-24 16:33:11 -07:00
2015-07-23 14:17:39 +02:00
2015-07-18 10:27:12 -07:00
2015-07-15 17:24:45 -07:00
2015-07-01 19:09:11 -07:00
2015-06-22 17:59:09 -07:00
2015-06-15 16:42:37 +10:00
2015-07-02 10:36:29 -07:00
2015-07-25 11:24:58 -07:00
2015-07-21 09:42:54 +02:00
2015-07-06 05:33:17 -07:00
2015-06-30 19:44:57 -07:00
2015-06-13 08:44:14 -07:00
2015-07-17 16:39:53 -07:00
2015-07-22 21:31:05 -07:00
2015-07-24 10:18:39 +02:00
2015-07-01 10:49:25 -07:00
2015-07-22 14:45:25 -07:00
2015-06-26 14:51:15 -07:00
2015-07-04 14:09:32 -04:00
2015-07-25 09:57:56 -07:00
2015-07-01 19:40:18 -07:00
2015-07-25 12:48:05 -07:00
2015-07-01 15:19:35 -07:00
2015-07-02 10:25:22 -07:00
2015-07-15 20:02:09 +05:30
2015-07-21 15:27:27 -07:00
2015-07-14 11:02:44 -07:00
2015-07-06 23:52:21 +02:00
2015-07-02 10:42:13 -07:00
2015-06-23 13:32:38 -07:00
2015-06-23 14:08:54 -07:00
2015-07-24 16:19:25 +01:00
2015-06-18 11:44:41 +03:00
2015-07-18 00:42:31 +02:00
2015-07-23 13:07:04 -07:00
2015-07-23 13:07:04 -07:00
2015-07-01 15:19:35 -07:00
2015-07-02 14:40:49 -07:00
2015-07-24 16:19:50 +01:00
2015-06-09 16:38:06 +02:00
2015-07-31 16:09:23 -07:00
2015-07-04 14:13:43 -07:00
2015-07-01 10:49:25 -07:00
2015-07-23 18:08:29 -07:00
2015-06-12 17:01:43 -07:00
2015-07-22 14:49:42 -07:00
2015-06-28 12:32:13 -07:00
2015-07-23 13:07:04 -07:00
2015-07-10 21:44:19 +02:00
2015-07-03 16:02:25 -07:00
2015-06-12 17:31:05 -07:00
2015-06-12 16:58:33 -07:00
2015-07-17 16:39:53 -07:00
2015-07-04 14:13:43 -07:00
2015-06-24 21:24:10 -04:00
2015-06-29 10:34:42 -07:00