vfio-ccw: Do not call flush_workqueue while holding the spinlock
Currently we call flush_workqueue while holding the subchannel
spinlock. But flush_workqueue function can go to sleep, so
do not call the function while holding the spinlock.
Fixes the following bug:
[ 285.203430] BUG: scheduling while atomic: bash/14193/0x00000002
[ 285.203434] INFO: lockdep is turned off.
....
[ 285.203485] Preemption disabled at:
[ 285.203488] [<
000003ff80243e5c>] vfio_ccw_sch_quiesce+0xbc/0x120 [vfio_ccw]
[ 285.203496] CPU: 7 PID: 14193 Comm: bash Tainted: G W
....
[ 285.203504] Call Trace:
[ 285.203510] ([<
0000000000113772>] show_stack+0x82/0xd0)
[ 285.203514] [<
0000000000b7a102>] dump_stack+0x92/0xd0
[ 285.203518] [<
000000000017b8be>] __schedule_bug+0xde/0xf8
[ 285.203524] [<
0000000000b95b5a>] __schedule+0x7a/0xc38
[ 285.203528] [<
0000000000b9678a>] schedule+0x72/0xb0
[ 285.203533] [<
0000000000b9bfbc>] schedule_timeout+0x34/0x528
[ 285.203538] [<
0000000000b97608>] wait_for_common+0x118/0x1b0
[ 285.203544] [<
0000000000166d6a>] flush_workqueue+0x182/0x548
[ 285.203550] [<
000003ff80243e6e>] vfio_ccw_sch_quiesce+0xce/0x120 [vfio_ccw]
[ 285.203556] [<
000003ff80245278>] vfio_ccw_mdev_reset+0x38/0x70 [vfio_ccw]
[ 285.203562] [<
000003ff802458b0>] vfio_ccw_mdev_remove+0x40/0x78 [vfio_ccw]
[ 285.203567] [<
000003ff801a499c>] mdev_device_remove_ops+0x3c/0x80 [mdev]
[ 285.203573] [<
000003ff801a4d5c>] mdev_device_remove+0xc4/0x130 [mdev]
[ 285.203578] [<
000003ff801a5074>] remove_store+0x6c/0xa8 [mdev]
[ 285.203582] [<
000000000046f494>] kernfs_fop_write+0x14c/0x1f8
[ 285.203588] [<
00000000003c1530>] __vfs_write+0x38/0x1a8
[ 285.203593] [<
00000000003c187c>] vfs_write+0xb4/0x198
[ 285.203597] [<
00000000003c1af2>] ksys_write+0x5a/0xb0
[ 285.203601] [<
0000000000b9e270>] system_call+0xdc/0x2d8
Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
Reviewed-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Pierre Morel <pmorel@linux.ibm.com>
Message-Id: <
626bab8bb2958ae132452e1ddaf1b20882ad5a9d.
1554756534.git.alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>